Выбор балансировщика нагрузки для кластера ClickHouse + ZooKeeper зависит от архитектуры развертывания и целей использования. Рассмотрим несколько вариантов:
1. HAProxy (лучший вариант для балансировки TCP и HTTP)
Плюсы:
-
Поддержка балансировки TCP-соединений (важно для ClickHouse).
-
Возможность балансировки HTTP-запросов (если используется ClickHouse HTTP API).
-
Гибкая настройка стратегии балансировки (round-robin, least connections, sticky sessions и др.).
-
Мониторинг и логирование запросов.
Минусы:
-
Не умеет автоматически определять статус ClickHouse (если не настроить дополнительные проверки).
📌 Пример конфигурации HAProxy для ClickHouse:
2. Nginx (если ClickHouse используется через HTTP API)
Плюсы:
-
Простая настройка.
-
Кеширование запросов.
-
Поддержка проксирования запросов на несколько серверов ClickHouse.
-
Можно настроить балансировку по
least_conn
(наименее загруженному серверу).
Минусы:
-
Только для HTTP API.
-
Менее гибкая балансировка по сравнению с HAProxy.
📌 Пример конфигурации Nginx:
3. Keepalived + Virtual IP (если нужна отказоустойчивость)
Плюсы:
-
Обеспечивает отказоустойчивость при падении балансировщика.
-
Можно использовать вместе с HAProxy/Nginx.
Минусы:
-
Сложнее в настройке.
📌 Пример Keepalived-конфигурации:
4. ClickHouse Native Distributed Tables (если балансировка внутри кластера)
Если ваш ClickHouse-кластер настроен с Distributed
-таблицами, то балансировка запросов между узлами может происходить автоматически.
📌 Пример создания Distributed-таблицы:
Минусы:
-
Нет автоматического перераспределения нагрузки.
-
Клиенты должны подключаться к нескольким ClickHouse-узлам вручную.
Вывод
✅ HAProxy – универсальный вариант для балансировки ClickHouse по TCP.
✅ Nginx – если работаете через HTTP API.
✅ Keepalived + HAProxy – если требуется отказоустойчивость.
✅ Distributed-таблицы – если нужен баланс внутри самого ClickHouse.
Если у вас большой кластер и высокие нагрузки, лучше использовать HAProxy + Keepalived.
Настройка отказоустойчивости для ClickHouse + ZooKeeper с HAProxy и Keepalived
Эта инструкция поможет вам настроить отказоустойчивую балансировку нагрузки с виртуальным IP (VIP) для кластера ClickHouse + ZooKeeper.
📌 Общая схема работы
-
HAProxy балансирует запросы между узлами ClickHouse.
-
Keepalived управляет виртуальным IP-адресом, который перемещается между балансировщиками при отказе одного из них.
-
Клиенты подключаются только к виртуальному IP, не зная о внутренних изменениях в инфраструктуре.
📍 Пример конфигурации:
🛠️ Шаг 1: Установка HAProxy
На двух балансировщиках (LB1 и LB2) установите HAProxy:
🔹 Настройка HAProxy
Откройте конфигурационный файл:
Добавьте следующее:
🔹 Перезапустите HAProxy
Проверьте работу:
🛠️ Шаг 2: Установка Keepalived
Установите Keepalived на оба балансировщика (LB1 и LB2):
🛠️ Шаг 3: Настройка Keepalived
Откройте файл конфигурации на LB1 (192.168.1.101):
📌 Настройки для мастера (LB1):
Откройте файл конфигурации на LB2 (192.168.1.102):
📌 Настройки для резервного узла (LB2):
🛠️ Шаг 4: Запуск Keepalived
Перезапустите службу на обоих балансировщиках:
🔹 Проверьте работу Keepalived:
Вы должны увидеть виртуальный IP (192.168.1.100) на LB1.
🛠️ Шаг 5: Тестирование отказоустойчивости
-
Отключите основной балансировщик (LB1):
-
На резервном сервере (LB2) запустите команду:
✅ Теперь виртуальный IP должен переключиться на LB2.
-
Включите LB1 обратно:
✅ VIP вернется на LB1.
🛠️ Шаг 6: Настройка клиентов ClickHouse
Теперь все клиенты должны подключаться только к виртуальному IP (192.168.1.100), а не к конкретным серверам.
🔹 Пример подключения к ClickHouse:
🎯 Итог
✅ 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-нодами.
📍 Схема развертывания:
🛠️ Шаг 1: Установка Docker и Docker Compose
Установите Docker и Docker Compose на обоих балансировщиках (LB1 и LB2):
🛠️ Шаг 2: Установка Traefik
Создайте рабочую директорию на LB1 и LB2:
Создайте файл docker-compose.yml:
Создайте traefik.yml:
Создайте dynamic.yml:
Запустите Traefik на обоих балансировщиках:
Проверьте запущенные контейнеры:
Traefik теперь балансирует запросы между нодами ClickHouse.
🛠️ Шаг 3: Установка Keepalived
Установите Keepalived на обоих балансировщиках:
🛠️ Шаг 4: Настройка Keepalived
Откройте файл конфигурации на LB1 (192.168.1.101):
📌 Конфигурация для главного узла (LB1):
Откройте файл конфигурации на LB2 (192.168.1.102):
📌 Конфигурация для резервного узла (LB2):
Запустите Keepalived на обоих балансировщиках:
Проверьте, какой узел сейчас владеет VIP:
🛠️ Шаг 5: Тестирование отказоустойчивости
-
Отключите LB1:
-
Запустите команду на LB2:
✅ VIP должен переключиться на LB2.
-
Включите LB1 обратно:
✅ VIP вернется на LB1.
🛠️ Шаг 6: Настройка клиентов
Клиенты теперь должны подключаться по виртуальному IP (192.168.1.100):
🔹 Подключение к ClickHouse через HTTP API:
🔹 Подключение через ClickHouse-client:
🎯 Итог
✅ Traefik балансирует HTTP-запросы между ClickHouse-нодами.
✅ Keepalived обеспечивает отказоустойчивость, управляя VIP.
✅ При сбое балансировщика VIP автоматически переключается на резервный узел.
💡 Теперь у вас отказоустойчивый балансировщик для ClickHouse + ZooKeeper! 🚀
Комментарии
Отправить комментарий