Обзор
Функция Обнаружение кластера в ClickHouse упрощает настройку кластера, позволяя узлам автоматически обнаруживать и регистрировать себя без необходимости явно задавать их в файлах конфигурации. Это особенно полезно, когда ручное определение каждого узла становится слишком трудоёмким.Для работы механизма обнаружения кластера требуется настроенный ClickHouse Keeper или ZooKeeper.
В старых версиях это была экспериментальная возможность, которую требовалось включать с помощью параметра
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 по-прежнему существует только на первых трёх узлах: