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

Какой балансировщик выбрать для клатера ClickHouse + ZooKeeper?

Выбор балансировщика нагрузки для кластера ClickHouse + ZooKeeper зависит от архитектуры развертывания и целей использования. Рассмотрим несколько вариантов:

1. HAProxy (лучший вариант для балансировки TCP и HTTP)

Плюсы:

  • Поддержка балансировки TCP-соединений (важно для ClickHouse).

  • Возможность балансировки HTTP-запросов (если используется ClickHouse HTTP API).

  • Гибкая настройка стратегии балансировки (round-robin, least connections, sticky sessions и др.).

  • Мониторинг и логирование запросов.

Минусы:

  • Не умеет автоматически определять статус ClickHouse (если не настроить дополнительные проверки).

📌 Пример конфигурации HAProxy для ClickHouse:

frontend clickhouse bind *:8123 default_backend clickhouse_nodes backend clickhouse_nodes balance roundrobin server ch1 192.168.1.101:8123 check inter 2s server ch2 192.168.1.102:8123 check inter 2s server ch3 192.168.1.103:8123 check inter 2s

2. Nginx (если ClickHouse используется через HTTP API)

Плюсы:

  • Простая настройка.

  • Кеширование запросов.

  • Поддержка проксирования запросов на несколько серверов ClickHouse.

  • Можно настроить балансировку по least_conn (наименее загруженному серверу).

Минусы:

  • Только для HTTP API.

  • Менее гибкая балансировка по сравнению с HAProxy.

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

upstream clickhouse_cluster { least_conn; server 192.168.1.101:8123; server 192.168.1.102:8123; server 192.168.1.103:8123; } server { listen 80; location / { proxy_pass http://clickhouse_cluster; } }

3. Keepalived + Virtual IP (если нужна отказоустойчивость)

Плюсы:

  • Обеспечивает отказоустойчивость при падении балансировщика.

  • Можно использовать вместе с HAProxy/Nginx.

Минусы:

  • Сложнее в настройке.

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

vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass secret } virtual_ipaddress { 192.168.1.100 } }

4. ClickHouse Native Distributed Tables (если балансировка внутри кластера)

Если ваш ClickHouse-кластер настроен с Distributed-таблицами, то балансировка запросов между узлами может происходить автоматически.

📌 Пример создания Distributed-таблицы:

CREATE TABLE distributed_table ON CLUSTER my_cluster AS my_table ENGINE = Distributed(my_cluster, default, my_table, rand());

Минусы:

  • Нет автоматического перераспределения нагрузки.

  • Клиенты должны подключаться к нескольким ClickHouse-узлам вручную.


Вывод

HAProxy – универсальный вариант для балансировки ClickHouse по TCP.
Nginx – если работаете через HTTP API.
Keepalived + HAProxy – если требуется отказоустойчивость.
Distributed-таблицы – если нужен баланс внутри самого ClickHouse.

Если у вас большой кластер и высокие нагрузки, лучше использовать HAProxy + Keepalived.


Настройка отказоустойчивости для ClickHouse + ZooKeeper с HAProxy и Keepalived


Эта инструкция поможет вам настроить отказоустойчивую балансировку нагрузки с виртуальным IP (VIP) для кластера ClickHouse + ZooKeeper.


📌 Общая схема работы

  1. HAProxy балансирует запросы между узлами ClickHouse.

  2. Keepalived управляет виртуальным IP-адресом, который перемещается между балансировщиками при отказе одного из них.

  3. Клиенты подключаются только к виртуальному IP, не зная о внутренних изменениях в инфраструктуре.

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


🛠️ Шаг 1: Установка HAProxy

На двух балансировщиках (LB1 и LB2) установите HAProxy:

apt update && apt install -y haproxy

🔹 Настройка HAProxy

Откройте конфигурационный файл:

nano /etc/haproxy/haproxy.cfg

Добавьте следующее:

global log /dev/log local0 maxconn 4000 defaults log global option redispatch retries 3 timeout connect 5s timeout client 50s timeout server 50s frontend clickhouse_frontend bind *:8123 default_backend clickhouse_nodes backend clickhouse_nodes balance roundrobin option httpchk GET / server ch1 192.168.1.201:8123 check server ch2 192.168.1.202:8123 check server ch3 192.168.1.203:8123 check server ch4 192.168.1.204:8123 check

🔹 Перезапустите HAProxy

systemctl restart haproxy systemctl enable haproxy

Проверьте работу:

netstat -tulnp | grep 8123

🛠️ Шаг 2: Установка Keepalived

Установите Keepalived на оба балансировщика (LB1 и LB2):

apt install -y keepalived

🛠️ Шаг 3: Настройка Keepalived

Откройте файл конфигурации на LB1 (192.168.1.101):

nano /etc/keepalived/keepalived.conf

📌 Настройки для мастера (LB1):

vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass secretpass } virtual_ipaddress { 192.168.1.100 } }

Откройте файл конфигурации на LB2 (192.168.1.102):

nano /etc/keepalived/keepalived.conf

📌 Настройки для резервного узла (LB2):

vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass secretpass } virtual_ipaddress { 192.168.1.100 } }

🛠️ Шаг 4: Запуск Keepalived

Перезапустите службу на обоих балансировщиках:

systemctl restart keepalived systemctl enable keepalived

🔹 Проверьте работу Keepalived:

ip addr show eth0

Вы должны увидеть виртуальный IP (192.168.1.100) на LB1.


🛠️ Шаг 5: Тестирование отказоустойчивости

  1. Отключите основной балансировщик (LB1):

systemctl stop keepalived
  1. На резервном сервере (LB2) запустите команду:

ip addr show eth0

✅ Теперь виртуальный IP должен переключиться на LB2.

  1. Включите LB1 обратно:

systemctl start keepalived

✅ VIP вернется на LB1.


🛠️ Шаг 6: Настройка клиентов ClickHouse

Теперь все клиенты должны подключаться только к виртуальному IP (192.168.1.100), а не к конкретным серверам.

🔹 Пример подключения к ClickHouse:

clickhouse-client --host=192.168.1.100 --port=8123

🎯 Итог

HAProxy распределяет нагрузку между узлами ClickHouse.
Keepalived управляет виртуальным IP, обеспечивая отказоустойчивость.
✅ Если LB1 выходит из строя, VIP автоматически переходит на LB2.

Система теперь устойчива к отказам и поддерживает балансировку нагрузки. 🚀



Практическая реализация балансировки ClickHouse + ZooKeeper через Traefik с отказоустойчивостью (VIP)

Цель:
Настроить балансировку трафика для кластера ClickHouse + ZooKeeper через Traefik с отказоустойчивостью, используя Keepalived для управления виртуальным IP (VIP).


📌 Общая схема работы

  • Traefik выполняет роль балансировщика HTTP/HTTPS трафика к ClickHouse.

  • Keepalived управляет виртуальным IP (VIP: 192.168.1.100) и перемещает его между балансировщиками.

  • Клиенты подключаются к VIP, а трафик направляется на активный балансировщик, который распределяет его между ClickHouse-нодами.

📍 Схема развертывания:

+-------------+ +-------------+ +-------------+ | Клиенты | → | VIP (192.168.1.100) | +-------------+ +-------------+ +-------------+ | --------------------- | | +---------+---------+ +---------+---------+ | Traefik (LB1) | | Traefik (LB2) | | 192.168.1.101 | | 192.168.1.102 | +---------+---------+ +---------+---------+ | | --------------------------------------- | | | | +----+----+ +----+----+ +----+----+ +----+----+ | ClickHouse | | ClickHouse | | ClickHouse | | ClickHouse | | Node 1 | | Node 2 | | Node 3 | | Node 4 | +------------+ +------------+ +------------+ +------------+

🛠️ Шаг 1: Установка Docker и Docker Compose

Установите Docker и Docker Compose на обоих балансировщиках (LB1 и LB2):

apt update && apt install -y docker.io docker-compose systemctl enable docker systemctl start docker

🛠️ Шаг 2: Установка Traefik

Создайте рабочую директорию на LB1 и LB2:

mkdir -p /opt/traefik && cd /opt/traefik

Создайте файл docker-compose.yml:

version: '3.7' services: traefik: image: traefik:v2.10 restart: always container_name: traefik ports: - "80:80" - "443:443" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" - "./traefik.yml:/traefik.yml:ro" - "./dynamic.yml:/dynamic.yml:ro" networks: - traefik_net networks: traefik_net: driver: bridge

Создайте traefik.yml:

entryPoints: web: address: ":80" websecure: address: ":443" providers: file: filename: "dynamic.yml" api: dashboard: true insecure: true

Создайте dynamic.yml:

http: routers: clickhouse: rule: "Host(`clickhouse.local`)" service: clickhouse-service entryPoints: - web services: clickhouse-service: loadBalancer: servers: - url: "http://192.168.1.201:8123" - url: "http://192.168.1.202:8123" - url: "http://192.168.1.203:8123" - url: "http://192.168.1.204:8123"

Запустите Traefik на обоих балансировщиках:

docker-compose up -d

Проверьте запущенные контейнеры:

docker ps

Traefik теперь балансирует запросы между нодами ClickHouse.


🛠️ Шаг 3: Установка Keepalived

Установите Keepalived на обоих балансировщиках:

apt install -y keepalived

🛠️ Шаг 4: Настройка Keepalived

Откройте файл конфигурации на LB1 (192.168.1.101):

nano /etc/keepalived/keepalived.conf

📌 Конфигурация для главного узла (LB1):

vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass secretpass } virtual_ipaddress { 192.168.1.100 } }

Откройте файл конфигурации на LB2 (192.168.1.102):

nano /etc/keepalived/keepalived.conf

📌 Конфигурация для резервного узла (LB2):

vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass secretpass } virtual_ipaddress { 192.168.1.100 } }

Запустите Keepalived на обоих балансировщиках:

systemctl restart keepalived systemctl enable keepalived

Проверьте, какой узел сейчас владеет VIP:

ip addr show eth0

🛠️ Шаг 5: Тестирование отказоустойчивости

  1. Отключите LB1:

systemctl stop keepalived
  1. Запустите команду на LB2:

ip addr show eth0

VIP должен переключиться на LB2.

  1. Включите LB1 обратно:

systemctl start keepalived

VIP вернется на LB1.


🛠️ Шаг 6: Настройка клиентов

Клиенты теперь должны подключаться по виртуальному IP (192.168.1.100):

🔹 Подключение к ClickHouse через HTTP API:

curl http://192.168.1.100:80

🔹 Подключение через ClickHouse-client:

clickhouse-client --host=192.168.1.100 --port=8123

🎯 Итог

Traefik балансирует HTTP-запросы между ClickHouse-нодами.
Keepalived обеспечивает отказоустойчивость, управляя VIP.
При сбое балансировщика VIP автоматически переключается на резервный узел.

💡 Теперь у вас отказоустойчивый балансировщик для ClickHouse + ZooKeeper! 🚀

Комментарии

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

Настройка и подключение 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...

Пример по настройке и конфигурации IPsec-туннеля для безопасного соединения сетей

IPsec (Internet Protocol Security) используется для обеспечения безопасного обмена данными между сетями. В данной инструкции описывается настройка IPsec между двумя криптошлюзами:  GW-Alpha  (192.168.100.1) и  GW-Beta  (192.168.200.1). Все параметры вымышленные, но соответствуют типовым настройкам. Команды, использованные в инструкции, относятся к конфигурации VyOS или EdgeRouter (Ubiquiti) . Эти устройства используют синтаксис команд CLI, схожий с Juniper Junos, но ориентированный на программное обеспечение с открытым исходным кодом. Ниже приведены примеры для  Cisco, Mikrotik, Fortinet или pfSense , 1. Фазы работы IPsec IPsec работает в два основных этапа: Фаза 1 (IKE – Internet Key Exchange) Фаза 1 предназначена для установления безопасного канала между двумя узлами. Она включает в себя: Аутентификацию сторон – используется либо предварительно разделенный ключ (PSK), либо цифровые сертификаты. Обмен ключами – осуществляется с использованием алгоритма Диффи...