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

Как настроить отказоустойчивый кластер Apache с балансировкой нагрузки

• 7 min read • Системное администрирование • Обновлено 22 Nov 2025
HA Apache: балансировка и отказоустойчивость
HA 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 и обновляет таблицы балансировки.

Типовая последовательность действий:

  1. Настроить heartbeat так, чтобы VIP назначался активному узлу.
  2. Настроить ldirectord с определением виртуального сервиса (VIP:порт), методом балансировки (rr, wrr и т.д.) и проверками состояния бэкендов.
  3. Запустить сервисы и проверить поведение при падении одного из балансировщиков или веб-узлов.

Ниже приведён примерный минимальный конфиг 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):

  1. На каждом узле убедитесь, что Apache отвечает локально: curl http://127.0.0.1
  2. На активном балансировщике проверьте, что VIP поднят: ip addr show
  3. Из внешней сети выполните запрос на VIP: curl http://192.168.0.105 — ответ должен приходить от одного из бэкендов.
  4. Отключите сетевой интерфейс одного из бэкендов или остановите Apache. ldirectord должен отметить бэкенд как down и перенаправлять трафик на оставшийся.
  5. Отключите активный балансировщик (имитация падения). Второй балансировщик должен захватить 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)

  1. Подготовить 4 узла и сеть.
  2. Установить Apache на бэкендах и проверить контент.
  3. Включить IPVS и проверить загрузку модулей.
  4. Установить Ultra Monkey на балансировщиках.
  5. Настроить ldirectord и heartbeat, поднять VIP.
  6. Тестировать failover и корректность проверок.
  7. Включить мониторинг и оповещения.

Ментальные модели и эвристики

  • «Разделяй контроль и трафик»: управление (heartbeat) и клиентский трафик должны быть независимы.
  • «Минимизируй время ожидания»: short checkinterval и разумный checktimeout позволяют быстрее реагировать, но увеличивают нагрузку на проверяемые сервисы.
  • «Fail-fast»: при сомнительном состоянии лучше временно пометить бэкенд как down, чем проксировать трафик с ошибками.

Глоссарий (1 строка)

  • IPVS — балансировка на уровне IP/транспортного уровня внутри ядра Linux.
  • ldirectord — демон, управляющий IPVS и проверяющий бэкенды.
  • heartbeat — сервис для обнаружения состояния партнёрских узлов и управления VIP.
  • VIP — виртуальный IP, который перемещается между балансировщиками.

Примеры сценариев тестирования (acceptance)

  1. Остановка Apache на webserver1: запросы на VIP не возвращают 5xx, трафик идёт на webserver2.
  2. Выключение питания на loadb1: loadb2 захватывает VIP и продолжает обслуживание.
  3. Одновременное увеличение нагрузки: 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‑возможности.

Список следующих шагов для внедрения в прод:

  • Адаптировать конфиги под вашу сеть и политики безопасности.
  • Настроить централизованную систему логирования и мониторинга.
  • Провести плановые тесты отказа в контролируемой среде.
Поделиться: 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 быстро