Keepalived + HAProxy: Настройка отказоустойчивости (Failover)
🛡️ Keepalived + HAProxy: Настройка отказоустойчивости (Failover)
Полная инструкция по установке и настройке Keepalived для автоматического переключения между HAProxy инстансами (MASTER/BACKUP).
📦 Установка Keepalived и создание пользователя
sudo apt install keepalived -y sudo useradd -s /usr/sbin/nologin keepalived_script
🧪 Скрипт проверки HAProxy
sudo vim /etc/keepalived/check_haproxy.sh
Содержимое:
#!/bin/bash
if ! pgrep haproxy > /dev/null; then
exit 1
fi
exit 0
sudo chmod +x /etc/keepalived/check_haproxy.sh
🛠️ Разрешение non-local bind
Добавьте в /etc/sysctl.conf:
net.ipv4.ip_nonlocal_bind=1
Примените:
sudo sysctl -p
🟥 Конфигурация для MASTER-сервера
sudo vim /etc/keepalived/keepalived.conf
Пример:
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh" interval 2 weight -20}
vrrp_instance VI_1 {
state MASTER interface ens192 virtual_router_id 51 priority 200 advert_int 1authentication { auth_type PASS auth_pass 12345 }virtual_ipaddress { 192.168.166.100 }track_script { chk_haproxy }}
Запуск:
sudo systemctl restart keepalived sudo systemctl enable keepalived sudo systemctl status keepalived
🟨 Конфигурация для BACKUP-сервера
sudo vim /etc/keepalived/keepalived.conf
Пример:
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight -20
}
vrrp_instance VI_2 {
state BACKUP
interface ens192
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
192.168.166.100
}
track_script {
chk_haproxy
}
}
Запуск:
sudo systemctl restart keepalived sudo systemctl enable keepalived sudo systemctl status keepalived
💡 Рекомендации и дополнения:
- Убедитесь, что
haproxyустановлен и настроен на обоих узлах - Для HAProxy можно использовать health-check в связке с Keepalived
- Используйте
tcpdumpилиip aдля проверки привязки192.168.166.100 - Проверить работу можно, остановив
haproxyна MASTER и убедившись, что IP переехал на BACKUP
🎯 Готово! Теперь при отказе HAProxy на MASTER, трафик автоматически переключится на BACKUP через виртуальный IP 🚦