Включение переадресации пакетов и настройка heartbeat и ldirectord
Краткие определения
- heartbeat — демон для организации отказоустойчивых кластеров на уровне узлов.
- ldirectord — менеджер реальных серверов (L7 health checking) для LVS/iptables балансировки.
- VIP — виртуальный IP-адрес, который «плавающий» и назначается активному балансировщику.
Требования и обозначения
- В статье предполагаются два балансировщика: loadb1 и loadb2.
- В примерах используются IP: балансировщики — 192.168.0.100/101 (пример), апачи — 192.168.0.101 и 192.168.0.102, VIP — 192.168.0.105.
- Все команды выполняются под root или с sudo.
1. Включение переадресации пакетов на балансировщиках
Балансировщики должны маршрутизировать пакеты на узлы Apache. Для этого включите форвардинг IPv4.
На loadb1 и loadb2 отредактируйте /etc/sysctl.conf:
vi /etc/sysctl.confВ файл добавьте или отредактируйте строку:
# Enables packet forwarding
net.ipv4.ip_forward = 1Примените изменения:
sysctl -pПроверка (альтернативно):
cat /proc/sys/net/ipv4/ip_forward
# должно вернуть 1Примечание: если у вас есть правила firewall (iptables/nftables), убедитесь, что политика FORWARD и правила NAT позволяют проход трафика от VIP к реальным серверам.
Важно: если балансировщик использует kernel LVS, убедитесь, что необходимые модули загружены и политика iptables не мешает пересылке.
2. Настройка heartbeat
Файлы конфигурации heartbeat должны быть идентичны на loadb1 и loadb2. Создайте следующие файлы.
Отредактируйте /etc/ha.d/ha.cf:
vi /etc/ha.d/ha.cfВставьте:
logfacility local0
bcast eth0 # Linux
mcast eth0 225.0.0.1 694 1 0
auto_failback off
node loadb1
node loadb2
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=haclusterПояснения:
- logfacility — куда писать логи (local0 соответствует конфигурации syslog).
- bcast/mcast — способ объявления присутствия (broadcast или multicast). Используйте тот, который поддерживается в вашей сети.
- node — имена узлов кластера; они должны совпадать с выводом uname -n на соответствующих машинах.
- respawn/apiauth — параметры для механизма обнаружения и авторизации.
ВАЖНО: в качестве имени узла используйте точный результат команды:
uname -nЭто имя должно совпадать с полем node в ha.cf на каждой машине.
Создайте /etc/ha.d/haresources:
vi /etc/ha.d/haresourcesПример содержимого (замените loadb1 и IP на ваши значения):
loadb1 \
ldirectord::ldirectord.cf \
LVSSyncDaemonSwap::master \
IPaddr2::192.168.0.105/24/eth0/192.168.0.255Пояснение: первое слово — имя узла, который будет владельцем ресурсов по умолчанию (здесь loadb1). После IPaddr2 указан виртуальный IP (VIP).
Создайте файл авторизации /etc/ha.d/authkeys:
vi /etc/ha.d/authkeysПример:
auth 3
3 md5 somerandomstringsomerandomstring — общий секрет между демонами heartbeat. Используйте собственную случайную строку. Варианты аутентификации: md5 (рекомендуется), text, none.
Ограничьте права файла:
chmod 600 /etc/ha.d/authkeys3. Настройка ldirectord
ldirectord отвечает за health-check и распределение в режиме LVS. Файл /etc/ha.d/ldirectord.cf должен быть идентичен на обоих балансировщиках.
vi /etc/ha.d/ldirectord.cfПример содержимого (точно как указано):
checktimeout=10
checkinterval=2
autoreload=no
logfile="local0"
quiescent=yes
virtual=192.168.0.105:80
real=192.168.0.101:80 gate
real=192.168.0.102:80 gate
fallback=127.0.0.1:80 gate
service=http
request="ldirector.html"
receive="Test Page"
scheduler=rr
protocol=tcp
checktype=negotiateПояснения ключевых полей:
- virtual — VIP и порт.
- real — IP-адреса реальных веб-серверов и режим (gate означает, что используется iptables/route).
- fallback — локальный fallback (на случай, если все реалы недоступны).
- request/receive — файл и строка, которые ldirectord запрашивает у бекендов для проверки их работоспособности. Создайте /var/www/ldirector.html на веб-серверах с содержимым “Test Page”.
- scheduler — алгоритм (rr = round-robin).
Совет: если ваши бэкенды используют HTTPS или специфичные URI, настройте request/receive в соответствии с реальным endpoint.
4. Автозагрузка и запуск
Создайте ссылки автозапуска для heartbeat и удалите автозапуск ldirectord (ldirectord будет запускаться из heartbeat):
update-rc.d heartbeat start 75 2 3 4 5 . stop 05 0 1 6 .
update-rc.d -f ldirectord removeОстановите ldirectord, если он запущен, и запустите heartbeat (это запустит ldirectord через haresources):
/etc/init.d/ldirectord stop
/etc/init.d/heartbeat startПроверьте статус:
ps -ef | grep -E "heartbeat|ldirectord"
ip addr show
# или
ip aКритерии приёмки
- VIP (192.168.0.105) присутствует на активном узле: ip addr show | grep 192.168.0.105
- Запрос к VIP возвращает контент страницы: curl http://192.168.0.105/ldirector.html → содержит “Test Page”.
- При остановке heartbeat на активном узле VIP появляется на пассивном в течение проверяемого интервала.
- Файлы /etc/ha.d/ha.cf, /etc/ha.d/haresources и /etc/ha.d/ldirectord.cf идентичны на обеих нодах (за исключением имени узла в haresources, если специально требуется).
Плейбук быстрого восстановления (SOP)
- Проверить, что heartbeat запущен на обоих нодах: ps -ef | grep heartbeat
- Если VIP пропал, проверить /var/log/syslog и логи heartbeat/local0.
- На пассивном узле временно включить debug в /etc/ha.d/ha.cf и перезапустить демон (только для отладки).
- Вернуть нормальные права на /etc/ha.d/authkeys (chmod 600).
Отладка и частые ошибки
- Неправильный node name: имя в ha.cf не совпадает с uname -n → heartbeat не формирует кластер.
- Неправильные права authkeys → heartbeat отказывается использовать ключ.
- ip_forward выключен → пакеты не доходят до реальных серверов.
- firewall блокирует трафик от VIP к реальным серверам.
- ldirectord запущен отдельно и одновременно с heartbeat → конфликт, поэтому удаляйте автоматический запуск для ldirectord.
Альтернативные подходы и ограничения
- Вместо ldirectord можно использовать HAProxy + keepalived (современный стек L7/L4 с широкими возможностями). Это предпочтительнее, если нужны расширенные балансировочные политики и SSL termination.
- Для облачных окружений часто используют встроенные балансировщики провайдера (elb, lb), где ручная настройка LVS/heartbeat не требуется.
Рекомендации по безопасности
- Используйте сильную случайную строку в authkeys и chmod 600.
- Ограничьте доступ к интерфейсам управления кластера на уровне сети (офисный VLAN, VPN).
- Логи и аудит: отправляйте логи heartbeat/ldirectord в центральный syslog.
Роль‑ориентированные чеклисты
Администратор сети:
- Убедиться, что multicast/broadcast работает между нодами.
- Проверить правило FORWARD и маршрутизацию.
Системный инженер:
- Настроить и синхронизировать /etc/ha.d/* на обеих нодах.
- Проверить, что VIP корректно переключается при отказе.
Мини‑глоссарий
- VIP — виртуальный IP, который перемещается между нодами.
- real server — реальный бэкенд, принимающий трафик от балансировщика.
- active/passive — топология, где один узел активен, второй — горячий резерв.
Короткое объявление (для рассылки, ~120 слов)
Мы настроили отказоустойчивый кластер балансировщиков с помощью heartbeat и ldirectord. Включена переадресация пакетов (ip_forward) и настроен мониторинг бэкендов через ldirectord, который проверяет доступность страницы ldirector.html. Конфигурации идентичны на обоих балансировщиках; один узел работает как активный, другой — в режиме hot‑standby. При сбое активного узла виртуальный IP автоматически переместится на резервный узел, обеспечивая непрерывность обслуживания.
Итог: выполните шаги в разделе 1–4, проверьте критерии приёмки и добавьте мониторинг и оповещения для контроля состояния кластера.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента