Обнаружение кластера
Обзор
Функция обнаружения кластера в ClickHouse упрощает конфигурацию кластера, позволяя узлам автоматически обнаруживать и регистрировать себя без необходимости явного определения в файлах конфигурации. Это особенно полезно в случаях, когда ручное определение каждого узла становится громоздким.
Обнаружение кластера — это экспериментальная функция, и она может быть изменена или удалена в будущих версиях.
Чтобы включить её, добавьте настройку allow_experimental_cluster_discovery
в ваш файл конфигурации:
Конфигурация удалённых серверов
Традиционная ручная конфигурация
Традиционно в ClickHouse каждый шард и реплика в кластере должны были быть указаны вручную в конфигурации:
Использование обнаружения кластера
С помощью обнаружения кластера, вместо того чтобы явно определять каждый узел, вы просто указываете путь в ZooKeeper. Все узлы, которые регистрируются под этим путем в ZooKeeper, автоматически обнаруживаются и добавляются в кластер.
Если вы хотите указать номер шарда для определённого узла, вы можете включить тег <shard>
в секции <discovery>
:
для node1
и node2
:
для node3
и node4
:
Режим наблюдателя
Узлы, настроенные в режиме наблюдателя, не будут регистрировать себя как реплики.
Они будут только наблюдать и обнаруживать другие активные реплики в кластере, не участвуя активно.
Чтобы включить режим наблюдателя, добавьте тег <observer/>
в секцию <discovery>
:
Обнаружение кластеров
Иногда вам может понадобиться добавлять и удалять не только узлы в кластерах, но и сами кластеры. Вы можете использовать узел <multicluster_root_path>
с корневым путем для нескольких кластеров:
В этом случае, когда какой-либо другой узел регистрируется с путём /clickhouse/discovery/some_new_cluster
, будет добавлен кластер с именем some_new_cluster
.
Вы можете одновременно использовать оба функционала, узел может зарегистрировать себя в кластере my_cluster
и обнаруживать другие кластеры:
Ограничения:
- Нельзя использовать одновременно
<path>
и<multicluster_root_path>
в одном поддеревеremote_servers
. <multicluster_root_path>
может использоваться только с<observer/>
.- Последняя часть пути от Keeper используется как имя кластера, тогда как при регистрации имя берётся из XML тега.
Сценарии использования и ограничения
Когда узлы добавляются или удаляются из указанного пути ZooKeeper, они автоматически обнаруживаются или удаляются из кластера без необходимости изменений в конфигурации или перезапуска сервера.
Однако изменения затрагивают только конфигурацию кластера, а не данные или существующие базы данных и таблицы.
Рассмотрим следующий пример с кластером из 3 узлов:
Затем мы добавляем новый узел в кластер, запуская новый узел с той же записью в секции remote_servers
в файле конфигурации:
Четвёртый узел участвует в кластере, но таблица event_table
всё ещё существует только на первых трёх узлах:
Если вам нужно, чтобы таблицы реплицировались на всех узлах, вы можете использовать Replicated движок базы данных вместо обнаружения кластеров.