Перейти к основному содержимому
Версия: 4.2

Настройка ClickHouse Keeper

ClickHouse Keeper используется для координации репликации и управления метаданными между узлами в кластере ClickHouse.

Обратите внимание!

Настройка требуется только в том случае, если ваш кластер состоит из нескольких узлов. Если ClickHouse установлен на одном сервере, использование ClickHouse Keeper не обязательно.

Настройка ClickHouse Keeper

Базовая конфигурация кластера ClickHouse

Конфигурационный файл ClickHouse Keeper находится в директории /etc/clickhouse-server/keeper_config.xml. Для базовой настройки основных параметров ClickHouse Keeper может быть использована следующая конфигурация:

<clickhouse>
<keeper_server>
<tcp_port>2181</tcp_port>
<server_id>1</server_id>
<log_storage_path>/var/lib/clickhouse/keeper/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/keeper/snapshots</snapshot_storage_path>
<coordination_settings>
<session_timeout_ms>30000</session_timeout_ms>
<operation_timeout_ms>10000</operation_timeout_ms>
<dead_session_check_period_ms>5000</dead_session_check_period_ms>
</coordination_settings>
</keeper_server>
</clickhouse>

После внесения изменений в конфигурационный файл выполните запуск службы и убедитесь что служба успешно запустилась при помощи следующих команд:

sudo systemctl enable clickhouse-keeper
sudo systemctl start clickhouse-keeper
sudo systemctl status clickhouse-keeper

Конфигурация распределенного кластера clickhouse

Файл конфигурации ClickHouse Keeper обычно находится по пути /etc/clickhouse-server/config.d/keeper_config.xml.

Пример конфигурационного файла:

<keeper_server>
<log_storage_path>/var/lib/clickhouse/keeper/</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/keeper/</snapshot_storage_path>
<tcp_port>9181</tcp_port>
<tcp_port_secure>9443</tcp_port_secure>
<server_id>1</server_id>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
</coordination_settings>

<raft_configuration>
<server>
<id>1</id>
<hostname>clickhousen1.domain.com</hostname>
<port>9444</port>
</server>
<server>
<id>2</id>
<hostname>clickhousen2.domain.com</hostname>
<port>9444</port>
</server>
<server>
<id>3</id>
<hostname>clickhousen3.domain.com</hostname>
<port>9444</port>
</server>
</raft_configuration>
</keeper_server>

Описание параметров:

  • <log_storage_path> и <snapshot_storage_path> - пути для хранения логов и снимков состояния ClickHouse Keeper

  • <tcp_port> и <tcp_port_secure> - порты для соединений между узлами ClickHouse Keeper

  • <server_id> - уникальный идентификатор сервера в кластере ClickHouse Keeper

    примечание

    Каждому узлу в кластере должен быть присвоен уникальный server_id, чтобы избежать конфликтов. Это число должно быть уникальным и соответствовать порядковому номеру узла в кластере.

  • <coordination_settings> - параметры, определяющие поведение координации между узлами

  • <operation_timeout_ms> - таймаут для операций координации, значение указывается в миллисекундах

После внесения изменений в конфигурационный файл выполните запуск службы и убедитесь что служба успешно запустилась при помощи следующих команд:

sudo systemctl enable clickhouse-keeper
sudo systemctl start clickhouse-keeper
sudo systemctl status clickhouse-keeper

Интеграция ClickHouse Keeper с ClickHouse

Для того чтобы узлы ClickHouse начали использовать ClickHouse Keeper, необходимо настроить соответствующие параметры в конфигурационном файле ClickHouse (/etc/clickhouse-server/config.xml) на каждом узле ClickHouse. Добавьте следующие строки в секцию zookeeper:

<zookeeper>
<node>
<host>127.0.0.1</host> <!-- IP-адрес или имя хоста сервера ClickHouse Keeper -->
<port>2181</port> <!-- Порт сервера ClickHouse Keeper -->
</node>
</zookeeper>

После внесения изменений в конфигурационные файлы выполните перезапуск служб clickhouse при помощи следующей команды:

sudo systemctl restart clickhouse-server

Теперь ClickHouse будет использовать ClickHouse Keeper для координации и управления кластером. Для проверки работы ClickHouse Keeper можно использовать команду:

clickhouse-client --query "SELECT * FROM system.zookeeper WHERE path = '/'"

В выводе команды должна присутствовать информация о состоянии ClickHouse Keeper.

Использование ClickHouse Keeper для координации репликации

ClickHouse Keeper используется для координации репликации между узлами. В конфигурационном файле необходимо указать параметры для подключения к ClickHouse Keeper. Конфигурационный файл находится по пути: /etc/clickhouse-keeper/keeper_config.xml.

Пример конфигурации:

<clickhouse>
<clickhouse_keeper>
<node index="1">
<host>keeper1</host>
<port>9181</port>
</node>
<node index="2">
<host>keeper2</host>
<port>9181</port>
</node>
<node index="3">
<host>keeper3</host>
<port>9181</port>
</node>
</clickhouse_keeper>
</clickhouse>

Параметры конфигурации ClickHouse Keeper:

  • <clickhouse_keeper> - блок в конфигурационном файле config.xml указывает, что ClickHouse должен использовать ClickHouse Keeper для координации репликации и управления состоянием кластера
  • <node> - каждый узел внутри блока <clickhouse_keeper> представляет собой отдельный сервер или виртуальную машину, на которых работает ClickHouse Keeper:
    • index - уникальный идентификатор для каждой ноды в конфигурации. Индекс помогает системе различать разные узлы
    • <host> - имя хоста или IP-адрес сервера, на котором запущен ClickHouse Keeper
    • <port> - порт, на котором ClickHouse Keeper принимает соединения

Настройка шардов и реплик

В ClickHouse конфигурацию шардов и реплик рекомендуется выносить в отдельный файл, который хранятся в директории /etc/clickhouse-server/conf.d. Пример самой конфигурации представлен ниже:

<clickhouse>
<remote_servers>
<cluster_1S_2R>
<shard>
<replica>
<host> ... </host> <!-- адрес хоста кластера -->
<port>9000</port>
</replica>
<replica>
<host> ... </host> <!-- адрес хоста кластера -->
<port>9000</port>
</replica>
</shard>
</cluster_1S_2R>
</remote_servers>
</clickhouse>

Этот файл содержит информацию о кластере, включая настройки шардов и реплик. В нем указываются узлы, которые входят в кластер, и как данные распределяются между ними.

Содержимое файла основывается на топологии вашего кластера и должно включать IP-адреса или имена хостов всех серверов, входящих в кластер.

Каждая реплика хранит полную копию данных своего шарда. Реплики одного шарда обязательно должны находиться на разных хостах, чтобы обеспечить отказоустойчивость. Реплики разных шардов могут располагаться на одном хосте, так как они хранят разные части данных.

Настройка макросов

Для того чтобы настроить реплицируемые таблицы на кластере, в конфигурации каждого сервера ClickHouse необходимо задать секцию <macros>. В ней указываются уникальные значения для шарда и реплики сервера. Эти макросы используются для автоматической подстановки в команды создания таблиц и упрощения настройки репликации.

  • <macros> - раздел конфигурации, который задает уникальные идентификаторы для текущего сервера. Они используются при создании и настройке реплицируемых таблиц в кластере.
  • <replica> - идентификатор реплики. Уникален для каждой реплики в рамках одного шарда. Например, если у вас два сервера с репликами одного шарда, то на одном сервере будет replica=1, а на другом - replica=2.
  • <shard> - идентификатор шарда, которому принадлежит реплика. Один шард может содержать несколько реплик, но все реплики одного шарда должны иметь одинаковый идентификатор шарда, а сами реплики - разные.

Например, макросы для host-1 в кластере cluster_1S_2R будут выглядеть следующим образом:

<clickhouse>
<macros>
<replica>1</replica>
<shard>1</shard>
</macros>
</clickhouse>

Перезапустите ClickHouse, чтобы изменения конфигурации вступили в силу:

sudo systemctl restart clickhouse-server