Репликация ClickHouse
Managed Service for ClickHouse помогает организовать репликацию для кластеров ClickHouse с двумя и более хостами в шарде. Нужно лишь добавить хосты ZooKeeper в кластер и создать таблицы с поддержкой репликации. Непосредственно репликацией будет управлять Apache ZooKeeper в автоматическом режиме.
Из-за ограниченных ресурсов хосты классов b1.nano, b1.micro, b2.nano и b2.micro не реплицируются.
Хосты ZooKeeper
В Managed Service for ClickHouse перед добавлением новых хостов в шард из одного хоста необходимо включить отказоустойчивость для кластера, если она еще не включена. При этом будет добавлено минимальное количество хостов ZooKeeper для управления процессом репликации.
По умолчанию все шарды кластера создаются с одним хостом и выключенной отказоустойчивостью. При создании кластера ClickHouse из нескольких хостов c помощью консоли управления, вам будет предложено добавить хосты ZooKeeper для включения отказоустойчивости. При создании такого кластера с помощью CLI или API:
- Если в виртуальной сети для кластера есть подсети в каждой из зон доступности, то в каждую подсеть автоматически будет добавлено по одному хосту ZooKeeper, если не указать настройки этих хостов явно. При необходимости можно явно указать три хоста ZooKeeper и их настройки при создании кластера.
- Если в виртуальной сети для кластера есть подсети только в некоторых зонах доступности, то нужно явно указать три хоста ZooKeeper и их настройки при создании кластера.
Важно
Обратите внимание, что:
- Хосты ZooKeeper, если они есть, учитываются при расчете потребления ресурсов и стоимости кластера.
- Если вы создали кластер и затем включили отказоустойчивость, то уменьшить количество хостов до одного в шардах из нескольких хостов будет невозможно.
- Если кластер использует гибридное хранилище на стадии Preview, то в нем невозможно настроить репликацию. На стадии General Availability это ограничение будет снято.
Особенности управления ZooKeeper в Managed Service for ClickHouse
Для обеспечения работы автоматической репликации Managed Service for ClickHouse управляет хостами ZooKeeper следующим образом:
-
По умолчанию эти хосты создаются с минимальным классом хостов. Но вы можете задать нужный класс хостов ZooKeeper при создании кластера или при включении отказоустойчивости для кластера.
-
Managed Service for ClickHouse не предоставляет возможности подключаться к этим хостам и настраивать их. Но вы можете изменить ресурсы, выделенные хостам ZooKeeper, изменив класс хостов.
-
Если вы не указали подсети для этих хостов, Managed Service for ClickHouse автоматически распределит их по подсетям той сети, к которой подключен ClickHouse-кластер.
Реплицируемые таблицы
ClickHouse поддерживает автоматическую репликацию только для таблиц на движке семейства ReplicatedMergeTree. Чтобы обеспечить репликацию, вы можете создать такие таблицы на каждом хосте по отдельности или использовать распределенный DDL-запрос.
Чтобы создать таблицу ReplicatedMergeTree
на определенном хосте ClickHouse, отправьте запрос следующего вида:
CREATE TABLE db_01.table_01 (log_date Date, user_name String) \
ENGINE = ReplicatedMergeTree('/table_01', '{replica}') PARTITION BY log_date ORDER BY (log_date, user_name);
Здесь:
db_01
— имя базы данных.table_01
— имя таблицы./table_01
— путь к таблице в ZooKeeper, обязательно должен начинаться с прямого слэша/
.{replica}
— макроподстановка идентификатора хоста.
Чтобы создать реплицируемые таблицы на всех хостах кластера, отправьте распределенный DDL-запрос:
CREATE TABLE db_01.table_01 ON CLUSTER '{cluster}' (log_date Date, user_name String) \
ENGINE = ReplicatedMergeTree('/table_01', '{replica}') PARTITION BY log_date ORDER BY (log_date, user_name);
Аргумент '{cluster}'
автоматически разрешится в идентификатор кластера ClickHouse.
Об организации взаимодействия реплицированных и распределенных таблиц в кластере ClickHouse см. в разделе Шардирование.