Репликация ClickHouse
Managed Service for ClickHouse позволяет использовать для организации репликации и распределения запросов один из следующих механизмов:
- ClickHouse Keeper.
- ZooKeeper (по умолчанию).
Это позволяет использовать реплицируемые таблицы в кластере с несколькими хостами в шарде. При этом управление репликацией осуществляется автоматически.
Из-за ограниченных ресурсов хосты классов b1.nano, b1.micro, b2.nano и b2.micro не реплицируются.
ClickHouse Keeper
Примечание
Эта функциональность находится на стадии Preview. Доступ к ClickHouse Keeper предоставляется по запросу. Обратитесь в техническую поддержку или к вашему аккаунт-менеджеру.
ClickHouse Keeper — сервис для репликации данных и выполнения распределенных DDL-запросов, реализующий совместимый с ZooKeeper клиент-серверный протокол. В отличие от ZooKeeper, ClickHouse Keeper не требует для своей работы отдельных хостов, а выполняется на хостах ClickHouse. Включить поддержку ClickHouse Keeper можно только при создании кластера.
Использование ClickHouse Keeper накладывает следующие ограничения:
- Можно создавать кластеры только из трех или более хостов.
- Поддержку ClickHouse Keeper нельзя включить или выключить после создания кластера.
- Минимальная версия ClickHouse, необходимая для использования ClickHouse Keeper — 22.3.
- Кластеры, использующие хосты ZooKeeper, нельзя перевести на использование ClickHouse Keeper.
Подробнее о ClickHouse Keeper см. в документации ClickHouse.
ZooKeeper
Если кластер был создан без поддержки ClickHouse Keeper, перед добавлением в шард из одного хоста новых хостов необходимо включить отказоустойчивость кластера, если она еще не включена. При этом в кластер будет добавлено 3 хоста ZooKeeper — минимально необходимое количество для управления репликацией и отказоустойчивостью.
Включить отказоустойчивость и настроить хосты ZooKeeper можно после создания кластера из одного хоста.
Также можно настроить хосты ZooKeeper сразу при создании кластера из нескольких хостов. При этом:
-
Если в виртуальной сети для кластера есть подсети в каждой из зон доступности, то в каждую подсеть автоматически будет добавлено по одному хосту ZooKeeper, если не указать настройки этих хостов явно. При необходимости можно явно указать три хоста ZooKeeper и их настройки при создании кластера.
-
Если в виртуальной сети для кластера есть подсети только в некоторых зонах доступности, то нужно явно указать три хоста ZooKeeper и их настройки при создании кластера.
-
Если вы не указали подсети для этих хостов, Managed Service for ClickHouse автоматически распределит их по подсетям той сети, к которой подключен ClickHouse-кластер.
По умолчанию для ZooKeeper используются хосты минимального класса. Класс хостов ZooKeeper можно изменить при настройке отказоустойчивости или при изменении настроек кластера. Изменить настройки ZooKeeper или подключиться к его хостам нельзя.
Важно
Обратите внимание, что:
- Хосты ZooKeeper, если они есть, учитываются при расчете потребления ресурсов и стоимости кластера.
- Если вы создали кластер и затем включили отказоустойчивость, то уменьшить количество хостов до одного в шардах из нескольких хостов будет невозможно.
Реплицируемые таблицы
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 или ClickHouse Keeper, обязательно должен начинаться с прямого слэша/
.{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 см. в разделе Шардирование.