Репликация в Managed Service for ClickHouse®
Репликация в ClickHouse® осуществляется, если в кластере одновременно выполняются следующие условия:
- существует хотя бы один шард с двумя или более хостами;
- настроен механизм координации между хостами.
Кластер Managed Service for ClickHouse®, в котором функционирует репликация, считается отказоустойчивым. В таком кластере доступно создание реплицируемых таблиц.
Для координации хостов и распределения запросов между ними Managed Service for ClickHouse® позволяет использовать один из следующих механизмов:
- ClickHouse® Keeper;
- ZooKeeper (по умолчанию).
ClickHouse® Keeper
Примечание
Эта функциональность находится на стадии Preview. Доступ к ClickHouse® Keeper предоставляется по запросу. Обратитесь в техническую поддержку
ClickHouse® Keeper — сервис для репликации данных и выполнения распределенных DDL-запросов, реализующий совместимый с ZooKeeper клиент-серверный протокол. В отличие от ZooKeeper, ClickHouse® Keeper не требует для своей работы отдельных хостов, а выполняется на хостах ClickHouse®. Включить поддержку ClickHouse® Keeper можно только при создании кластера.
Использование ClickHouse® Keeper накладывает следующие ограничения:
- Можно создавать кластеры только из трех или более хостов.
- Поддержку ClickHouse® Keeper нельзя включить или выключить после создания кластера.
- Кластеры, использующие хосты ZooKeeper, нельзя перевести на использование ClickHouse® Keeper.
- Перенести хост c ClickHouse® Keeper в другую зону доступности можно только через обращение в службу поддержки
.
Подробнее о ClickHouse® Keeper см. в документации ClickHouse®
ZooKeeper
ZooKeeper — это сервис, который обеспечивает координацию и распределение запросов между хостами ClickHouse®. Для обеспечения репликации в кластере Managed Service for ClickHouse® должно быть от трех до пяти хостов ZooKeeper.
Если кластер состоит из одного хоста ClickHouse® или нескольких однохостовых шардов и был создан без поддержки ClickHouse® Keeper, перед добавлением новых хостов нужно обеспечить его отказоустойчивость. Для этого добавьте в кластер не менее трех хостов ZooKeeper. Если в кластере уже есть хосты ZooKeeper, вы можете добавлять хосты ClickHouse® к любым шардам.
Если вы создаете кластер с двумя или более хостами ClickHouse® на шард, в кластер автоматически добавятся три хоста ZooKeeper. При создании вы можете настроить только их конфигурацию с учетом следующих особенностей:
-
Если в виртуальной сети для кластера есть подсети в каждой из зон доступности, то в каждую подсеть автоматически будет добавлено по одному хосту ZooKeeper, если не указать настройки этих хостов явно. При необходимости можно явно указать три хоста ZooKeeper и их настройки при создании кластера.
-
Если в виртуальной сети для кластера есть подсети только в некоторых зонах доступности, то нужно явно указать три хоста ZooKeeper и их настройки при создании кластера.
-
Если вы не указали подсети для этих хостов, Managed Service for ClickHouse® автоматически распределит их по подсетям той сети, к которой подключен кластер ClickHouse®.
Минимальное количество ядер для одного хоста ZooKeeper зависит от суммарного количества ядер хостов ClickHouse®:
Суммарное количество ядер хостов ClickHouse® | Минимальное количество ядер для одного хоста ZooKeeper |
---|---|
Менее 48 | 2 |
48 и более | 4 |
Класс хостов и размер хранилища ZooKeeper можно изменить при изменении настроек кластера. Изменить настройки ZooKeeper или подключиться к его хостам нельзя.
Важно
Хосты ZooKeeper, если они есть, учитываются при расчете потребления ресурсов
Реплицируемые таблицы
ClickHouse® поддерживает автоматическую репликацию только для таблиц на движке семейства ReplicatedMergeTree
Важно
Рекомендуется создавать реплицируемые таблицы на всех хостах кластера, иначе может произойти потеря данных после восстановления кластера из резервной копии или миграции хостов кластера в другую зону доступности.
Чтобы создать таблицу 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® см. в разделе Шардирование.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc