Гид по технологиям

6 Настройка балансировщиков нагрузки

• 5 min read • DevOps • Обновлено 28 Nov 2025
Настройка балансировщиков нагрузки для MySQL-кластера
Настройка балансировщиков нагрузки для MySQL-кластера

Зачем нужен балансировщик перед MySQL-кластером

У нас есть кластер MySQL с двумя узлами: sql1.example.com и sql2.example.com. Без единого адреса приложения вынуждены напрямую распределять нагрузку между узлами. Это усложняет конфигурацию и увеличивает риск простоев: если один узел недоступен, клиенты, направленные на него, перестанут работать.

Решение — поставить перед кластером виртуальный IP, за которым стоят балансировщики. Балансировщик распределяет запросы между узлами и при падении одного узла перенаправляет трафик на работующий. Чтобы сам балансировщик не стал единой точкой отказа, используем два сервера loadb1.example.com и loadb2.example.com в active/passive (горячий резерв).

Важно: оба балансировщика должны поддерживать IPVS (IP Virtual Server) в ядре. IPVS реализует балансировку на транспортном уровне прямо в ядре Linux.

6.1 Установка Ultra Monkey

Ниже — пошаговая инструкция для loadb1.example.com и loadb2.example.com.

1) Включение модулей IPVS

Сначала загрузите модули в текущую сессию:

modprobe ip_vs_dh
modprobe ip_vs_ftp
modprobe ip_vs
modprobe ip_vs_lblc
modprobe ip_vs_lblcr
modprobe ip_vs_lc
modprobe ip_vs_nq
modprobe ip_vs_rr
modprobe ip_vs_sed
modprobe ip_vs_sh
modprobe ip_vs_wlc
modprobe ip_vs_wrr

Чтобы модули подгружались при загрузке системы, добавьте их в /etc/modules:

vi /etc/modules

Содержимое файла должно включать следующие строки:

ip_vs_dh
ip_vs_ftp
ip_vs
ip_vs_lblc
ip_vs_lblcr
ip_vs_lc
ip_vs_nq
ip_vs_rr
ip_vs_sed
ip_vs_sh
ip_vs_wlc
ip_vs_wrr

2) Подключение репозиториев и установка Ultra Monkey

Отредактируйте /etc/apt/sources.list и добавьте репозитории Ultra Monkey (не удаляйте существующие репозитории):

vi /etc/apt/sources.list

Добавьте строки:

deb http://www.ultramonkey.org/download/3/ sarge main
deb-src http://www.ultramonkey.org/download/3 sarge main

Затем обновите индексы пакетов и установите пакеты:

apt-get update
apt-get install ultramonkey libdbi-perl libdbd-mysql-perl libmysqlclient14-dev

Во время установки может появиться предупреждение о libsensors3 и поддержке датчиков в ядре. Это можно проигнорировать, если вы не используете аппаратные датчики:

  ¦ libsensors3 not functional                                               ¦
  ¦                                                                          ¦
  ¦ It appears that your kernel is not compiled with sensors support. As a   ¦
  ¦ result, libsensors3 will not be functional on your system.               ¦
  ¦                                                                          ¦
  ¦ If you want to enable it, have a look at "I2C Hardware Sensors Chip      ¦
  ¦ support" in your kernel configuration.                                   ¦

При появлении вопросов установки отвечайте, как в исходной инструкции:

Do you want to automatically load IPVS rules on boot?

<– No

Select a daemon method.

<– none

3) Обновление Perl-модуля DBD::mysql

Пакет libdbd-mysql-perl в дистрибутивных репозиториях может быть несовместим с MySQL 5. Установите более новую версию DBD::mysql из CPAN (пример для версии в инструкции):

cd /tmp
wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0002.tar.gz
tar xvfz DBD-mysql-3.0002.tar.gz
cd DBD-mysql-3.0002
perl Makefile.PL
make
make install

Примечание: можно установить более новую версию DBD::mysql через cpan или apt, если она доступна для вашей системы.

4) Включение пересылки пакетов (IP forwarding)

Отредактируйте /etc/sysctl.conf и включите IP forwarding:

vi /etc/sysctl.conf

Добавьте или отредактируйте строку:

# Enables packet forwarding
net.ipv4.ip_forward = 1

Примените изменения:

sysctl -p

Настройка heartbeat и ldirectord (кратко)

Ultra Monkey обеспечивает интеграцию heartbeat (мониторинг состояния вторичного балансировщика и свободы виртуального IP) и ldirectord (сам механизм балансировки запросов на уровне IPVS). В типовой конфигурации:

  • Один узел (loadb1) держит виртуальный IP и обрабатывает трафик (active).
  • Второй узел (loadb2) периодически проверяет состояние active; при падении — захватывает virtual IP (passive → active).
  • ldirectord распределяет входящие соединения по реальным бэкенд-узлам (sql1, sql2) на основании выбранной схемы (round-robin, least-conn и т.д.).

Полные конфигурационные файлы зависят от вашей сети и политики проверки состояния (check scripts, port checks, tcp-checks). Проверьте примеры в /etc/ultramonkey/ и документацию ldirectord.

Важные замечания

Важно: перед тем как вводить балансировщики в продуктив, прогоните нагрузочные тесты и сценарии переключения. Проверяйте сетевую маршрутизацию, firewall и правила NAT, чтобы виртуальный IP был доступен только тем хостам, которым разрешён доступ к MySQL.

Примечание: при использовании MySQL-кластера убедитесь, что клиентские приложения корректно работают при переключении соединений (timeout, retry, connection pooling).

Чек-лист для развёртывания (роль: инженер платформы)

  • Убедиться, что ядро поддерживает IPVS или собрать ядро с нужными опциями.
  • [ ] Загрузить модули ipvs* и добавить их в /etc/modules.
  • Настроить репозитории и установить ultramonkey + зависимости.
  • Переустановить/обновить DBD::mysql, если требуется совместимость с MySQL 5.
  • Включить net.ipv4.ip_forward и применить sysctl.
  • Настроить heartbeat для управления виртуальным IP в active/passive.
  • Настроить ldirectord с health-check для sql1/sql2.
  • Протестировать failover и восстановление вручную.
  • Настроить мониторинг и алерты на падение виртуального IP или service-level.

Чек-лист для разработчика приложения

  • Использовать виртуальный IP балансировщика в конфигурации БД.
  • Готовность к кратковременным сбоям — реализовать повторные попытки подключения.
  • Проверить поведение connection pool при сбросе соединений.

Критерии приёмки

  • Виртуальный IP корректно находится на active-балансировщике при нормальном состоянии.
  • При выключении active балансировщика virtual IP автоматически переносится на passive в пределах ожидаемого RTO.
  • ldirectord распределяет трафик между sql1 и sql2 согласно выбранной политике.
  • Приложения продолжают выполнять запросы к БД без ручной перенастройки.
  • Мониторинг фиксирует переключения и отправляет уведомления.

Альтернативные подходы

  • keepalived + IPVS или keepalived + HAProxy: keepalived предоставляет VRRP для виртуального IP и может работать с IPVS; HAProxy выполняет балансировку на уровне приложения (L7).
  • Hardware LB: использовать физические балансировщики (F5 и т. п.) при высоких SLA и сетевых требованиях.

Когда Ultra Monkey может не подойти

  • Если требуется сложная балансировка на уровне HTTP/SQL (L7) с глубоким разбором протокола — лучше HAProxy.
  • Если инфраструктура требует централизованного управления конфигурацией LB (например, в облаке) — использовать нативные облачные LB-сервисы.

Технический шпаргалка (cheat sheet)

Команды для проверки:

# Проверить, загружены ли модули IPVS
lsmod | grep ip_vs

# Убедиться, что виртуальный IP присутствует (после конфигурации)
ip addr show

# Проверить правила IPVS
ipvsadm -L -n

# Перезапустить ultramonkey или связанные сервисы
service ultramonkey restart
service ldirectord restart
service heartbeat restart

Отладка и типичные проблемы

  • Проблема: virtual IP не переходит на standby.

    • Проверить связь heartbeat между узлами (firewall, ICMP/UDP порты).
    • Проверить права на управление IP (capabilities, systemd unit).
  • Проблема: соединения закрываются при failover.

    • Настроить более мягкие таймауты на клиентской стороне и implement retry logic.
  • Проблема: ldirectord не видит backend-узлы.

    • Убедиться, что health-check скрипты корректны и порты слушаются на sql1/sql2.

Мини-методология развертывания (шаги)

  1. Подготовить образы/шаблоны ОС с поддержкой IPVS.
  2. Развернуть два балансировщика и два MySQL-узла в изолированной сети тестирования.
  3. Настроить IPVS-модули и установить Ultra Monkey.
  4. Настроить heartbeat/ldirectord и прописать virtual IP.
  5. Выполнить тесты отказоустойчивости и нагрузочные тесты.
  6. Перенести в продакшн поэтапно, отслеживая SLA.

Риски и смягчение

  • Риск: балансировщики находятся в одной сети/рубежном оборудовании — единая точка отказа. Смягчение: географически/сегментарно распределить балансировщики.
  • Риск: некорректные health-checks маскируют проблемы бэкенда. Смягчение: использовать более строгие проверки (проверка SQL-запросом в дополнение к TCP-port check).

Итог

Установка Ultra Monkey с IPVS, heartbeat и ldirectord даёт простой путь к отказоустойчивой балансировке MySQL-кластера на уровне сети. Главное — правильно настроить модули ядра, health-checks, поведение клиентов при переключениях и протестировать все сценарии.

Важно: рассмотрите альтернативы (keepalived + HAProxy или облачные LB) если вам нужны L7-возможности или централизованное управление.

flowchart TD
  A[Запрос клиента] --> B{Балансировщик active}
  B -->|ldirectord| C[sql1.example.com]
  B -->|ldirectord| D[sql2.example.com]
  B --> E{Active упал?}
  E -->|да| F[Standby захватывает virtual IP]
  F --> B
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро