Функция Обнаружение кластера в 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/>.
- Последняя часть path из Keeper используется как имя кластера, а при регистрации имя берётся из XML-тега.
Сценарии использования и ограничения
При добавлении или удалении узлов по указанному пути в ZooKeeper они автоматически обнаруживаются или исключаются из кластера без необходимости изменять конфигурацию или перезапускать сервер.
Однако эти изменения затрагивают только конфигурацию кластера, но не данные и не существующие базы данных и таблицы.
Рассмотрим следующий пример кластера из 3 узлов:
Затем мы добавляем в кластер новый узел, запуская его с той же записью в разделе remote_servers файла конфигурации:
Четвёртый узел входит в кластер, но таблица event_table по-прежнему существует только на первых трёх узлах:
Если вам нужно, чтобы таблицы реплицировались на всех узлах, вы можете использовать движок базы данных Replicated как альтернативу обнаружению кластера. Последнее изменение 12 июня 2026 г.