Как настроить отказоустойчивый кластер Apache с балансировкой нагрузки
Кратко: руководство показывает, как собрать двухузловой кластер Apache с двумя узлами балансировщика, разделяющими виртуальный IP для входящего HTTP-трафика. На балансировщиках включаем IPVS, устанавливаем пакет Ultra Monkey (heartbeat + ldirectord) и настраиваем мониторинг и перенаправление на два веб-сервера. В статье также есть проверочные сценарии, чек-листы и рекомендации по отладке.
Зачем этот подход
Этот способ обеспечивает: быстрый failover балансировщика, распределение нагрузки на уровне сети (Layer 4), контроль состояния бэкендов и более предсказуемое поведение с сессиями веб-приложений по сравнению с простым round-robin DNS.
Важно: любая единичная точка отказа должна быть устранена — поэтому балансировщик сам состоит как минимум из двух узлов, которые держат общий виртуальный IP (VIP).
Кому полезно
- Системным администраторам, которым нужна простая HA-архитектура для веб-сервисов.
- Командам, у которых есть сессии на стороне сервера и критична непрерывность обслуживания.
Схема и ресурсы
Требуемая инфраструктура: четыре узла и пять IP-адресов — по одному IP на каждый реальный узел + общий виртуальный IP для балансировщиков.
Пример (сохраняйте имена и IP как в вашей сети):
- Apache узел 1: webserver1.example.com (webserver1) — 192.168.0.101; документ-рут: /var/www
- Apache узел 2: webserver2.example.com (webserver2) — 192.168.0.102; документ-рут: /var/www
- Балансировщик 1: loadb1.example.com (loadb1) — 192.168.0.103
- Балансировщик 2: loadb2.example.com (loadb2) — 192.168.0.104
- Виртуальный IP: 192.168.0.105 (VIP для входящих запросов)
Иллюстрация архитектуры доступна в руководствах IPVS/UltraMonkey. Для понимания потока трафика посмотрите рисунок по адресу http://www.linuxvirtualserver.org/docs/ha/ultramonkey.html
Требования и предпосылки
- Debian Sarge (в оригинале), можно адаптировать для более новых Debian/Ubuntu с соответствующими пакетами.
- Базовая установка Debian на всех четырёх узлах.
- Apache уже установлен на webserver1 и webserver2, /var/www — корневая папка сайта.
- Доступ по SSH и права root на каждом узле.
Важно: в современных дистрибутивах компоненты и названия пакетов могут отличаться; проверьте документацию дистрибутива при переносе.
Шаг 1 — Включаем IPVS на балансировщиках
IPVS (IP Virtual Server) выполняет балансировку на транспортном уровне внутри ядра Linux (Layer 4).
На обоих балансировщиках (loadb1 и loadb2) выполните следующие команды для добавления модулей в автозагрузку:
echo ip_vs_dh >> /etc/modules
echo ip_vs_ftp >> /etc/modules
echo ip_vs >> /etc/modules
echo ip_vs_lblc >> /etc/modules
echo ip_vs_lblcr >> /etc/modules
echo ip_vs_lc >> /etc/modules
echo ip_vs_nq >> /etc/modules
echo ip_vs_rr >> /etc/modules
echo ip_vs_sed >> /etc/modules
echo ip_vs_sh >> /etc/modules
echo ip_vs_wlc >> /etc/modules
echo ip_vs_wrr >> /etc/modulesПосле этого подгрузите модули немедленно (то же на loadb1/loadb2):
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Если вы получите ошибки загрузки модулей, вероятно текущее ядро не собрано с поддержкой IPVS. В этом случае установите готовый пакет-ядра с поддержкой IPVS или пересоберите ядро.
Проверка
Проверьте, что модули загружены:
lsmod | grep ip_vsИли проверка наличия интерфейса IPVS:
cat /proc/net/ip_vsЕсли файл существует — IPVS активен.
Важно: на защищённых серверах убедитесь, что iptables/ufw/профили SELinux не блокируют трафик между балансировщиками и бэкендами.
Шаг 2 — Устанавливаем Ultra Monkey на балансировщиках
Ultra Monkey — пакет, который включает heartbeat (мониторинг живости второго балансировщика) и ldirectord (реальный балансировщик).
На loadb1 и loadb2 добавьте репозиторий Ultra Monkey в /etc/apt/sources.list. Откройте файл:
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Внимание: во время установки вам могут показать предупреждение о libsensors3 — его можно игнорировать, если датчиков аппаратных нет.
Пакет установки может спросить:
- “Do you want to automatically load IPVS rules on boot?” — выберите: No
- “Select a daemon method.” — выберите: none
Выбранные параметры соответствуют более ручному контролю конфигурации IPVS и сервисов.
Конфигурация ldirectord и heartbeat (обзор)
Ultra Monkey включает несколько компонентов. Основные из них:
- heartbeat — отвечает за проверку состояния партнёрского узла балансировщика и управление VIP.
- ldirectord — контролирует IPVS, проверяет состояние webserver1 и webserver2 и обновляет таблицы балансировки.
Типовая последовательность действий:
- Настроить heartbeat так, чтобы VIP назначался активному узлу.
- Настроить ldirectord с определением виртуального сервиса (VIP:порт), методом балансировки (rr, wrr и т.д.) и проверками состояния бэкендов.
- Запустить сервисы и проверить поведение при падении одного из балансировщиков или веб-узлов.
Ниже приведён примерный минимальный конфиг ldirectord (пример, адаптируйте под свою сеть).
# /etc/ldirectord.cf (пример)
checktimeout=10
checkinterval=3
autoreload=yes
logfile=/var/log/ldirectord.log
virtual=192.168.0.105:80
real=192.168.0.101:80 gate
real=192.168.0.102:80 gate
method=rr
scheduler=rr
protocol=tcp
checktype=negotiate
request="GET / HTTP/1.0\r\nHost: webdummy\r\n\r\n"
receive="HTTP/"Пояснения: checktype=negotiate выполняет простой HTTP-проверочный запрос. “real” — IP-адреса бэкендов. Метод scheduler=rr (round robin) — пример; для учёта нагрузки используйте wrr/weight.
Пример конфигурации heartbeat (упрощённый):
# /etc/ha.d/ha.cf
logfacility local0
udp 192.168.0.103 694
udp 192.168.0.104 694
bcast eth0
keepalive 2
deadtime 10
warntime 5
initdead 20
# /etc/ha.d/haresources (пример, на активном узле)
loadb1.example.com 192.168.0.105/24/eth0 ldirectordНастройка конкретных опций зависит от версии heartbeat и пакета в вашем дистрибутиве.
Тестирование и проверка работоспособности
Мини‑методология тестирования (короткий SOP):
- На каждом узле убедитесь, что Apache отвечает локально: curl http://127.0.0.1
- На активном балансировщике проверьте, что VIP поднят: ip addr show
- Из внешней сети выполните запрос на VIP: curl http://192.168.0.105 — ответ должен приходить от одного из бэкендов.
- Отключите сетевой интерфейс одного из бэкендов или остановите Apache. ldirectord должен отметить бэкенд как down и перенаправлять трафик на оставшийся.
- Отключите активный балансировщик (имитация падения). Второй балансировщик должен захватить VIP и принять трафик.
Критерии приёмки
- VIP доступен и отвечает на HTTP-запросы в течение 10 секунд после поднятия сервисов.
- При остановке одного бэкенда весь трафик автоматически уходит на второй без ошибок 5xx.
- При падении активного балансировщика второй берёт VIP и продолжает обслуживать запросы.
Отладка и типичные проблемы
- Модули IPVS не загружаются — проверьте совместимость ядра.
- ldirectord помечает бэкенд как DOWN — проверьте HTTP-проверочный запрос (Host header, путь, возвращаемый статус).
- VIP не переносится — проверьте конфигурацию heartbeat и привязку к интерфейсу (правильный network/mask/interface).
- Сессии рушатся при failover — решите проблему на уровне приложения: общая сессия в БД, sticky sessions (если требуется) или репликация сессий.
Совет: включите подробное логирование ldirectord (/var/log/ldirectord.log) и heartbeat для быстрого выявления причин.
Альтернативные подходы
- HAProxy + keepalived (часто используется вместо Ultra Monkey) — HAProxy даёт богатые возможности L7, а keepalived обеспечивает VIP и VRRP.
- Linux Virtual Server (LVS) напрямую без Ultra Monkey, управляемый собственными скриптами.
- Round-robin DNS — простая, но небезопасная альтернатива, не учитывает состояние узлов и не обеспечивает прозрачный failover с сессиями.
Когда не использовать этот метод
- Если вам нужна балансировка на основе содержимого HTTP (L7) — тогда лучше HAProxy или Nginx.
- Если инфраструктура облачная и у провайдера уже встроен LB/VRRP — используйте управляемый сервис.
Рекомендации по безопасности и сетям
- Ограничьте доступ к административным портам ldirectord/heartbeat через firewall.
- Разделите трафик управления (heartbeat) и клиентский трафик VLAN/подсетью, чтобы уменьшить вероятность ошибок из-за перегрузки сети.
- Логи балансировщика храните централизованно для аудита и расследований.
Ролевые чек-листы
Администратор балансировщика (loadb1/loadb2):
- Установлены и загружены модули IPVS
- Установлен пакет ultramonkey
- Проверена конфигурация ldirectord
- Настроен и протестирован heartbeat и VIP
- Настроено логирование и мониторинг
Администратор веба (webserver1/webserver2):
- Apache отвечает локально
- Контент /var/www синхронизирован между узлами (rsync/SCM)
- Мониторинг и метрики (response time, CPU, mem)
Краткая методика внедрения (мини‑roadmap)
- Подготовить 4 узла и сеть.
- Установить Apache на бэкендах и проверить контент.
- Включить IPVS и проверить загрузку модулей.
- Установить Ultra Monkey на балансировщиках.
- Настроить ldirectord и heartbeat, поднять VIP.
- Тестировать failover и корректность проверок.
- Включить мониторинг и оповещения.
Ментальные модели и эвристики
- «Разделяй контроль и трафик»: управление (heartbeat) и клиентский трафик должны быть независимы.
- «Минимизируй время ожидания»: short checkinterval и разумный checktimeout позволяют быстрее реагировать, но увеличивают нагрузку на проверяемые сервисы.
- «Fail-fast»: при сомнительном состоянии лучше временно пометить бэкенд как down, чем проксировать трафик с ошибками.
Глоссарий (1 строка)
- IPVS — балансировка на уровне IP/транспортного уровня внутри ядра Linux.
- ldirectord — демон, управляющий IPVS и проверяющий бэкенды.
- heartbeat — сервис для обнаружения состояния партнёрских узлов и управления VIP.
- VIP — виртуальный IP, который перемещается между балансировщиками.
Примеры сценариев тестирования (acceptance)
- Остановка Apache на webserver1: запросы на VIP не возвращают 5xx, трафик идёт на webserver2.
- Выключение питания на loadb1: loadb2 захватывает VIP и продолжает обслуживание.
- Одновременное увеличение нагрузки: scheduler правильно распределяет запросы по весам (если настроено wrr).
Маленькая decision‑карта (Mermaid)
flowchart LR
A[Нужна балансировка?] --> B{Требуется L7}
B -- Да --> C[Использовать HAProxy/Nginx + keepalived]
B -- Нет --> D[Использовать IPVS + ldirectord]
D --> E{Требуется авто‑failover балансировщика}
E -- Да --> F[Добавить heartbeat/keepalived]
E -- Нет --> G[Одноузловый балансировщик]Итог и рекомендации
Это практическое руководство даёт рабочую схему для настройки отказоустойчивого кластера Apache с балансировщиками на базе IPVS и Ultra Monkey. Подход прост в реализации и эффективен для классических сценариев L4-балансировки с необходимостью быстрого failover. Для современных развёртываний рассмотрите HAProxy+keepalived или облачные managed-LB сервисы, если нужны дополнительные L7‑возможности.
Список следующих шагов для внедрения в прод:
- Адаптировать конфиги под вашу сеть и политики безопасности.
- Настроить централизованную систему логирования и мониторинга.
- Провести плановые тесты отказа в контролируемой среде.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента