Перейти к основному содержимому
Перейти к основному содержимому

Обнаружение кластера

Обзор

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