Загрузить файлы в «/»
parent
b1058ec689
commit
09c98dbbde
|
@ -0,0 +1,22 @@
|
|||
Vagrant.configure("2") do |config|
|
||||
(1..3).each do |i|
|
||||
config.vm.define "server#{i}" do |bd|
|
||||
bd.vm.box = "ubuntu/focal64"
|
||||
bd.vm.network "public_network", ip: "192.168.13.20#{i}", bridge: "wlp2s0"
|
||||
bd.vm.hostname = "server#{i}"
|
||||
|
||||
bd.vm.provision "shell" do |s|
|
||||
ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
|
||||
s.inline = <<-SHELL
|
||||
echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
|
||||
SHELL
|
||||
end
|
||||
|
||||
bd.vm.provider "virtualbox" do |v|
|
||||
v.name = "server#{i}"
|
||||
v.memory = 1024
|
||||
v.cpus = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,3 @@
|
|||
<clickhouse>
|
||||
<listen_host>0.0.0.0</listen_host>
|
||||
</clickhouse>
|
|
@ -0,0 +1,7 @@
|
|||
<clickhouse>
|
||||
<macros>
|
||||
<cluster>{{ cluster_name }}</cluster>
|
||||
<replica>replica{{ server_id }}</replica>
|
||||
<shard>1</shard>
|
||||
</macros>
|
||||
</clickhouse>
|
|
@ -0,0 +1,169 @@
|
|||
### Описание процесса создания кластера серверов БД ClickHouse с помощью Ansible Playbook
|
||||
Требования:
|
||||
- Для обеспечения координации узлов использовать Clickhouse-Keeper вместо Zookeeper (https://clickhouse.com/docs/ru/operations/clickhouse-keeper/)
|
||||
- После старта БД создать реплицированную БД (https://clickhouse.com/docs/ru/engines/database-engines/replicated/)
|
||||
- Создать внутри реплицированной БД произвольную таблицу
|
||||
- Записать произвольные 10 строк в созданную таблицу используя для подключения адрес узла server1 в реплицированном кластере из 3-х узлов.
|
||||
- Остановить узел server1, останется кластер из 2-х узлов
|
||||
- Подключиться к узлу server2 или узлу server3, убедиться с помощью SELECT что данные остались в сохранности
|
||||
|
||||
|
||||
1. Подготовка тестового окружения
|
||||
|
||||
Для создания тестового окружения используется Vagrantfile, который разворачивает 3 виртуальных хоста Ubuntu и передаёт в виртуалки SSH ключ хоста
|
||||
|
||||
```bash
|
||||
user@host:~/clickhouse_cluster$ vagrant up
|
||||
```
|
||||
|
||||
Логин/пароль вм: vagrant/vagrant
|
||||
|
||||
|
||||
2. Создание кластера
|
||||
|
||||
Для создания кластера БД используется Ansible Playbook.
|
||||
На 3 созданные вм устанавливается ClickHouse и формируются конфигурационные файлы для создания кластера
|
||||
|
||||
```bash
|
||||
user@host:~/clickhouse_cluster$ ansible-playbook -i hosts.ini clickhouse.yaml -K
|
||||
```
|
||||
|
||||
|
||||
3. Проверка кластера
|
||||
|
||||
- на каждом хосту кластера подключиться к серверу БД
|
||||
```bash
|
||||
user@host:~/clickhouse_cluster$ clickhouse-client
|
||||
```
|
||||
|
||||
*при успешном подключении, приглашение должно измениться на:*
|
||||
```
|
||||
vagrant@server1:~$ clickhouse-client
|
||||
ClickHouse client version 21.12.2.17 (official build).
|
||||
Connecting to localhost:9000 as user default.
|
||||
Connected to ClickHouse server version 21.12.2 revision 54452.
|
||||
|
||||
server1 :)
|
||||
```
|
||||
|
||||
- на каждом хосте кластера необходимо создать реплицированную БД
|
||||
```
|
||||
CREATE DATABASE testbase ENGINE=Replicated('/clickhouse/{cluster}/tables/testbase', '{shard}', '{replica}');
|
||||
```
|
||||
|
||||
- на server1 создать локальную таблицу в созданной БД
|
||||
```
|
||||
create table testbase.localusers (id Int16, Name String, Age Int16) Engine=ReplicatedMergeTree() Order by id;
|
||||
```
|
||||
*таблица должна распространиться на все узлы кластера*
|
||||
```
|
||||
server1 :) create table testbase.localusers (id Int16, Name String, Age Int16) Engine=ReplicatedMergeTree() Order by id;
|
||||
|
||||
CREATE TABLE testbase.localusers
|
||||
(
|
||||
`id` Int16,
|
||||
`Name` String,
|
||||
`Age` Int16
|
||||
)
|
||||
ENGINE = ReplicatedMergeTree
|
||||
ORDER BY id
|
||||
|
||||
Query id: d2cb6afe-a93c-4f4c-ac10-ef63f1e80702
|
||||
|
||||
┌─host───────┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
|
||||
│ 1|replica1 │ 0 │ │ 2 │ 2 │
|
||||
└────────────┴────────┴───────┴─────────────────────┴──────────────────┘
|
||||
┌─host───────┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
|
||||
│ 1|replica3 │ 0 │ │ 1 │ 0 │
|
||||
│ 1|replica2 │ 0 │ │ 0 │ 0 │
|
||||
└────────────┴────────┴───────┴─────────────────────┴──────────────────┘
|
||||
|
||||
3 rows in set. Elapsed: 0.243 sec.
|
||||
```
|
||||
|
||||
- на server1 создать Distributed таблицу в созданной БД
|
||||
```
|
||||
create table testbase.users (id Int16, Name String, Age Int16) Engine=Distributed('testcluster','testbase', 'localusers');
|
||||
```
|
||||
*таблица также должна распределиться на все хосты кластера*
|
||||
|
||||
- создать в таблице users 10 строк
|
||||
```
|
||||
insert into testbase.users values(1, 'Max', '25'), (2, 'Den', '35'), (3, 'Bob', '22'), (4, 'Gleb', '44'), (5, 'Nikolay', '27'), (6, 'Anna', '26'), (7, 'Ira', '32'), (8, 'Lena', '21'), (9, 'Evgeniy', '33'), (10, 'Pavel', '41');
|
||||
```
|
||||
|
||||
- проверить созданные строки на server1
|
||||
```
|
||||
select * from testbase.users;
|
||||
```
|
||||
|
||||
```
|
||||
SELECT *
|
||||
FROM testbase.users
|
||||
|
||||
Query id: 87f9c04f-e073-4695-8452-ac078341869b
|
||||
|
||||
┌─id─┬─Name────┬─Age─┐
|
||||
│ 1 │ Max │ 25 │
|
||||
│ 2 │ Den │ 35 │
|
||||
│ 3 │ Bob │ 22 │
|
||||
│ 4 │ Gleb │ 44 │
|
||||
│ 5 │ Nikolay │ 27 │
|
||||
│ 6 │ Anna │ 26 │
|
||||
│ 7 │ Ira │ 32 │
|
||||
│ 8 │ Lena │ 21 │
|
||||
│ 9 │ Evgeniy │ 33 │
|
||||
│ 10 │ Pavel │ 41 │
|
||||
└────┴─────────┴─────┘
|
||||
|
||||
10 rows in set. Elapsed: 0.007 sec.
|
||||
```
|
||||
|
||||
- выключить server1 и проверить наличии созданных на server1 строк на оставшихся узлах кластера
|
||||
```
|
||||
server2 :) select * from testbase.users;
|
||||
|
||||
SELECT *
|
||||
FROM testbase.users
|
||||
|
||||
Query id: af197532-d5ad-4068-8faa-f3bd7f6d0294
|
||||
|
||||
┌─id─┬─Name────┬─Age─┐
|
||||
│ 1 │ Max │ 25 │
|
||||
│ 2 │ Den │ 35 │
|
||||
│ 3 │ Bob │ 22 │
|
||||
│ 4 │ Gleb │ 44 │
|
||||
│ 5 │ Nikolay │ 27 │
|
||||
│ 6 │ Anna │ 26 │
|
||||
│ 7 │ Ira │ 32 │
|
||||
│ 8 │ Lena │ 21 │
|
||||
│ 9 │ Evgeniy │ 33 │
|
||||
│ 10 │ Pavel │ 41 │
|
||||
└────┴─────────┴─────┘
|
||||
|
||||
10 rows in set. Elapsed: 0.005 sec.
|
||||
```
|
||||
|
||||
```
|
||||
server3 :) select * from testbase.users;
|
||||
|
||||
SELECT *
|
||||
FROM testbase.users
|
||||
|
||||
Query id: e1397271-d994-4428-b79b-1d06547b1335
|
||||
|
||||
┌─id─┬─Name────┬─Age─┐
|
||||
│ 1 │ Max │ 25 │
|
||||
│ 2 │ Den │ 35 │
|
||||
│ 3 │ Bob │ 22 │
|
||||
│ 4 │ Gleb │ 44 │
|
||||
│ 5 │ Nikolay │ 27 │
|
||||
│ 6 │ Anna │ 26 │
|
||||
│ 7 │ Ira │ 32 │
|
||||
│ 8 │ Lena │ 21 │
|
||||
│ 9 │ Evgeniy │ 33 │
|
||||
│ 10 │ Pavel │ 41 │
|
||||
└────┴─────────┴─────┘
|
||||
|
||||
10 rows in set. Elapsed: 0.007 sec.
|
||||
```
|
Loading…
Reference in New Issue