Go to file
da2001 09c98dbbde Загрузить файлы в «/» 2024-03-05 12:27:49 +03:00
Vagrantfile Загрузить файлы в «/» 2024-03-05 12:27:49 +03:00
allow_replicated.xml Загрузить файлы в «/» 2024-03-05 12:25:55 +03:00
clickhouse.yaml Загрузить файлы в «/» 2024-03-05 12:25:55 +03:00
cluster.xml.j2 Загрузить файлы в «/» 2024-03-05 12:25:55 +03:00
hosts.ini Загрузить файлы в «/» 2024-03-05 12:25:55 +03:00
keeper.xml.j2 Загрузить файлы в «/» 2024-03-05 12:25:55 +03:00
listenhost.xml Загрузить файлы в «/» 2024-03-05 12:27:49 +03:00
macros.xml.j2 Загрузить файлы в «/» 2024-03-05 12:27:49 +03:00
readme.md Загрузить файлы в «/» 2024-03-05 12:27:49 +03:00

readme.md

Описание процесса создания кластера серверов БД 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 ключ хоста

user@host:~/clickhouse_cluster$ vagrant up

Логин/пароль вм: vagrant/vagrant

  1. Создание кластера

Для создания кластера БД используется Ansible Playbook. На 3 созданные вм устанавливается ClickHouse и формируются конфигурационные файлы для создания кластера

user@host:~/clickhouse_cluster$ ansible-playbook -i hosts.ini clickhouse.yaml -K
  1. Проверка кластера
  • на каждом хосту кластера подключиться к серверу БД
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.