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

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

Обзор

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