Обнаружение кластера
Обзор
Функция обнаружения кластера в 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 движок базы данных вместо обнаружения кластеров.