К основному контенту

Обновление ClickHouse и миграция с ZooKeeper на ClickHouse Keeper: практическое руководство

Введение

ClickHouse давно используется как одна из самых быстрых аналитических СУБД для работы с большими объёмами данных. Многие кластеры строились на базе ZooKeeper, который отвечал за координацию реплик. Но в новых версиях появился ClickHouse Keeper — встроенный аналог ZooKeeper, полностью совместимый по протоколу, но более простой в эксплуатации и управлении.

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



Исходная инфраструктура

До миграции у нас было:

  • 3 ноды ClickHouse (Ubuntu 16.04.7, ClickHouse 22.2.2.1);

  • Zookeeper 3.4.8, установленный локально на каждой ноде;

  • кластер с репликацией и ~2.2 ТБ данных на сервер.


План миграции

  1. Поднять новые ноды на Debian 12 с последним релизом ClickHouse.

  2. Добавить новые ноды в существующий кластер и синхронизировать данные.

  3. Развернуть и протестировать ClickHouse Keeper.

  4. Перенести конфигурацию с ZooKeeper на Keeper.

  5. Перевести реплики и вывести старые сервера из эксплуатации.


Настройки ZooKeeper (старый вариант)

В config.xml на старых нодах ClickHouse была секция:

<zookeeper> <node index="1"> <host>node1</host> <port>2181</port> </node> <node index="2"> <host>node2</host> <port>2181</port> </node> <node index="3"> <host>node3</host> <port>2181</port> </node> </zookeeper>

Настройки ClickHouse Keeper (новый вариант)

Теперь вместо ZooKeeper используем встроенный Keeper.
Пример конфига keeper.xml:

<clickhouse> <keeper_server> <tcp_port>9181</tcp_port> <server_id>1</server_id> <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path> <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path> <raft_configuration> <server> <id>1</id> <hostname>node1</hostname> <port>9444</port> </server> <server> <id>2</id> <hostname>node2</hostname> <port>9444</port> </server> <server> <id>3</id> <hostname>node3</hostname> <port>9444</port> </server> </raft_configuration> </keeper_server> </clickhouse>

После этого в config.xml указываем:

<zookeeper> <node index="1"> <host>node1</host> <port>9181</port> </node> <node index="2"> <host>node2</host> <port>9181</port> </node> <node index="3"> <host>node3</host> <port>9181</port> </node> </zookeeper>

Таким образом, ClickHouse будет подключаться уже к встроенному Keeper.


Пример настройки system.clusters

Файл clusters.xml (или в config.d/clusters.xml):

<yandex> <remote_servers> <cluster_3s> <shard> <internal_replication>true</internal_replication> <replica> <host>node1</host> <port>9000</port> </replica> <replica> <host>node2</host> <port>9000</port> </replica> <replica> <host>node3</host> <port>9000</port> </replica> </shard> </cluster_3s> </remote_servers> </yandex>

Проверка работы Keeper

  1. Проверяем статус Keeper:

SELECT * FROM system.zookeeper WHERE path = '/';
  1. Проверяем реплики:

SELECT table, is_readonly, total_replicas, active_replicas FROM system.replicas;
  1. Проверяем кворум:

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

Реплицируемая таблица

Пример создания таблицы в кластере:

CREATE TABLE replicated_table ( EventDate Date, UserId UInt64, CountryId UInt32, Sign Int8 ) ENGINE = ReplicatedMergeTree( '/clickhouse/tables/{shard}/replicated_table', '{replica}' ) PARTITION BY toYYYYMM(EventDate) ORDER BY (EventDate, UserId);

Итоги миграции

После полного перевода кластера на ClickHouse Keeper мы получили:

  • отказ от отдельного ZooKeeper;

  • упрощённую инфраструктуру (меньше сервисов для поддержки);

  • стабильную репликацию;

  • более простой мониторинг через системные таблицы ClickHouse.

Комментарии

Популярные сообщения из этого блога

Настройка и подключение IPSec в Windows

Настройка IPSec на Windows включает в себя создание правил безопасности и фильтров для защиты сетевого трафика. Ниже — пошаговое руководство. Включение службы IPSec Перед настройкой убедитесь, что служба IPSec Policy Agent запущена: Нажмите Win + R , введите services.msc и нажмите Enter . Найдите IPsec Policy Agent . Если она не работает, нажмите ПКМ → Свойства . Установите Тип запуска: Автоматически , затем нажмите Запустить . Настройка политики IPSec через «Локальную политику безопасности» Нажмите Win + R , введите secpol.msc , нажмите Enter . Перейдите в Политики IP-безопасности в локальном компьютере . В правом окне нажмите Создать политику IP-безопасности → Далее . Укажите имя политики (например, "IPSec VPN"), снимите флажок Активировать правило по умолчанию , нажмите Далее . Нажмите Добавить , чтобы создать правило. Транспортный или туннельный режим : Если IPSec для защищенной локальной сети – выберите Транспортный режим . Если IPSec для VPN – выберите Туннельн...

Как найти и изменить репозитарии для CentOS 8

В CentOS 8 официальные репозитории (BaseOS, AppStream и Extras) управляются с помощью dnf и файлов конфигурации в /etc/yum.repos.d/ . Вот как их найти и изменить: 1. Просмотр текущих репозиториев dnf repolist Если нужно увидеть подробную информацию: dnf repolist all 2. Изменение репозиториев Файлы конфигурации репозиториев находятся в /etc/yum.repos.d/ . Например, основной репозиторий может быть в файле CentOS-AppStream.repo . Открыть его можно так: nano /etc/yum.repos.d/CentOS-AppStream.repo Внутри можно изменить: enabled=1 → включает репозиторий enabled=0 → отключает репозиторий baseurl= или mirrorlist= → задать новый источник пакетов 3. Замена недоступных репозиториев CentOS 8 достиг конца поддержки , и официальные зеркала больше не работают. Вместо них можно подключить Vault или AlmaLinux/Rocky Linux : Использование архивного репозитория CentOS Vault Создайте резервную копию старых .repo файлов: mkdir /root/repo-backup && mv /etc/yum.repos.d/*.repo /root/repo-backu...

Debian 11: настройка сети и имени хоста /etc/network/interfaces, NetworkManager и systemd-networkd

Как настроить сеть в Debian 11? 🔹 1. Настройка через /etc/network/interfaces (Традиционный способ) Этот метод удобен для серверов и минималистичных систем без NetworkManager . Открываем конфигурационный файл: sudo nano /etc/network/interfaces 🔹 DHCP (Автоматическое получение IP) auto eth0 iface eth0 inet dhcp 🔹 Статический IP auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4 🔹 Wi-Fi (WPA2) auto wlan0 iface wlan0 inet dhcp wpa-ssid "Название_сети" wpa-psk "Пароль" 📌 Применение изменений: sudo systemctl restart networking 🔹 2. Настройка через NetworkManager (Удобно для десктопов) Проверяем статус: systemctl status NetworkManager Если не установлен, ставим: sudo apt install network-manager sudo systemctl enable --now NetworkManager 🔹 Графический интерфейс (TUI) nmtui Выберите Edit a connection , настройте параметры и сохраните. 🔹 Консольный способ ( nmcli ...