Развертывание кластера ClickHouse

ClickHouse поддерживает развертывание кластеров для масштабируемости, высокой доступности и выполнения распределенных запросов. Кластеры ClickHouse можно развернуть как в локальных сетях (on-premise), так и на облачных платформах или с использованием Kubernetes.

1. Ключевые компоненты кластера ClickHouse

КомпонентОписание
Сервер ClickHouseДвижок базы данных, работающий на каждом узле
ZooKeeperУправляет репликацией, выбором лидера и координацией кластера
Распределенные таблицыРазрешают выполнять запросы на нескольких шардах для параллельного выполнения
ReplicatedMergeTreeОбеспечивает репликацию данных по узлам для отказоустойчивости
Шарды и репликиШарды разделяют данные, реплики обеспечивают избыточность
Инструменты клиента (ch-client, HTTP API, BI-инструменты)Используются для запроса и взаимодействия с кластером

2. Архитектура кластера ClickHouse

Кластер ClickHouse состоит из:

  • Несколько шардов (данные распределяются по этим шардированным узлам).
  • Несколько реплик (каждый шард имеет резервные копии для высокой доступности).
  • ZooKeeper для координации кластера.

3. Шаги для развертывания кластера ClickHouse

Шаг 1: Установите ClickHouse на каждом узле
Запустите команду на всех узлах:

sudo apt-get install -y clickhouse-server clickhouse-client

Запустите сервис ClickHouse:

sudo systemctl start clickhouse-server

Шаг 2: Настройте ZooKeeper (для репликации и отказоустойчивости)
ZooKeeper необходим для управления реплицированными таблицами.

Пример конфигурации ZooKeeper (/etc/clickhouse-server/config.xml):

<zookeeper>
    <node index="1">
        <host>zoo1</host>
        <port>2181</port>
    </node>
    <node index="2">
        <host>zoo2</host>
        <port>2181</port>
    </node>
    <node index="3">
        <host>zoo3</host>
        <port>2181</port>
    </node>
</zookeeper>
 

Перезапустите ClickHouse после изменений:

sudo systemctl restart clickhouse-server

Шаг 3: Настройте шардирование и репликацию
Измените /etc/clickhouse-server/config.xml для определения шардов и реплик:

<remote_servers>
    <my_cluster>
        <shard>
            <replica>
                <host>clickhouse1</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>clickhouse2</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>clickhouse3</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>clickhouse4</host>
                <port>9000</port>
            </replica>
        </shard>
    </my_cluster>
</remote_servers>
 

Перезапустите ClickHouse:

sudo systemctl restart clickhouse-server

Шаг 4: Создайте реплицированную таблицу на каждом узле
Каждый шард должен хранить реплицированные данные.

На каждом шарде (таблица ReplicatedMergeTree):

CREATE TABLE events ON CLUSTER my_cluster (
    event_id UInt32,
    event_time DateTime,
    user_id UInt32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/shard1/events', '{replica}')
ORDER BY event_time;
 

/clickhouse/tables/shard1/events → путь в ZooKeeper.
{replica} → автоматически заменяется на имя реплики узла.

Шаг 5: Создайте распределенную таблицу (Маршрутизатор запросов)
Распределенная таблица направляет запросы на правильные шарды.

CREATE TABLE events_distributed ON CLUSTER my_cluster AS events
ENGINE = Distributed(my_cluster, default, events, rand());

✅ Запросы к events_distributed будут автоматически направляться на правильный шард.

Шаг 6: Проверьте статус кластера
Чтобы проверить статус кластера:

SELECT * FROM system.clusters WHERE cluster='my_cluster';

Чтобы проверить назначение шардов:

SELECT * FROM system.replicas;

4. Ключевые особенности кластеризации в ClickHouse

ОсобенностьОписание
ШардингРаспределение данных по нескольким узлам
РепликацияОбеспечение высокой доступности с помощью избыточных копий данных
Распределенные таблицыНаправление запросов на правильные шарды
Автоматический отказВ случае сбоя реплики запросы перенаправляются на другую реплику
Параллельное выполнение запросовЗапросы разбиваются на части, выполняются параллельно для повышения производительности

5. Масштабирование кластера ClickHouse

Расширение кластера (добавление новых узлов)

  1. Разверните новый узел ClickHouse.
  2. Добавьте его в конфигурацию кластера (config.xml).
  3. Синхронизируйте данные с помощью команды SYSTEM SYNC REPLICA:
SYSTEM SYNC REPLICA events;

Измените распределенную таблицу, чтобы включить новый узел.

6. Резюме: Как развернуть кластер ClickHouse

ШагДействие
✅ Установить ClickHouseНа всех узлах
✅ Настроить ZooKeeperДля управления репликацией
✅ Определить шардирование и репликациюНастроить config.xml
✅ Создать реплицированные таблицыИспользовать ReplicatedMergeTree
✅ Создать распределенную таблицуМаршрутизация запросов через шардирование
✅ Проверить состояние кластераПроверить system.clusters
✅ Масштабировать кластерДобавить узлы и выполнить SYSTEM SYNC REPLICA

🚀 Заключение:

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