Як налаштувати HAProxy для балансування навантаження з Keepalived
Вступ
У сучасних високонавантажених системах питання відмовостійкості та масштабування є критичними. HAProxy — один із найпопулярніших L4/L7 балансувальників навантаження, який широко використовується для розподілу трафіку між серверами. Проте сам по собі HAProxy не забезпечує високої доступності (High Availability).
Для усунення цієї проблеми зазвичай використовують Keepalived, який реалізує протокол VRRP (Virtual Router Redundancy Protocol) та дозволяє автоматично перемикати віртуальну IP-адресу (VIP) між кількома вузлами HAProxy у разі збою.
У цій статті розглянемо:
-
базові принципи роботи HAProxy та Keepalived;
-
архітектуру HA-кластера;
-
покрокове налаштування;
-
перевірку працездатності.
Встановлення HAProxy
На обох балансувальниках:
sudo apt update sudo apt install -y haproxy
Перевірка версії:
Базове налаштування HAProxy
Файл конфігурації:
/etc/haproxy/haproxy.cfgGlobal та defaults
global
log /dev/log local0
log /dev/log local1 notice
daemon
maxconn 50000
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5s
timeout client 30s
timeout server 30s
Frontend
frontend http_front
bind *:80
default_backend app_backBackend з health-check
backend app_back
balance roundrobin
option httpchk GET /health
http-check expect status 200
server app01 10.0.0.11:80 check
server app02 10.0.0.12:80 check
server app03 10.0.0.13:80 check
Перевірка конфігурації
sudo haproxy -c -f /etc/haproxy/haproxy.cfg sudo systemctl restart haproxy sudo systemctl enable haproxy
Встановлення Keepalived
На обох HAProxy-вузлах:
sudo apt install -y keepalived
Налаштування Keepalived
Файл:
/etc/keepalived/keepalived.conf
MASTER (LB1)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass StrongPassword123
}
virtual_ipaddress {
10.0.0.100/24
}
track_script {
chk_haproxy
}
}
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
weight -20
}
BACKUP (LB2)
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass StrongPassword123
}
virtual_ipaddress {
10.0.0.100/24
}
track_script {
chk_haproxy
}
}
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
weight -20
}
Важливо:
interfaceмає відповідати реальному мережевому інтерфейсу.
virtual_router_idмає бути однаковим на обох вузлах.
priorityвизначає, який вузол стане MASTER.
Запуск та перевірка
sudo systemctl restart keepalived sudo systemctl enable keepalived
ip addr show eth0
Тестування failover
-
Зупиніть HAProxy або Keepalived на MASTER:
-
Переконайтеся, що VIP перейшла на BACKUP-вузол.
-
Відновіть сервіс та перевірте повернення ролі MASTER (за потреби).
Рекомендації для production
-
Використовуйте HTTPS та окремий frontend для TLS
-
Додайте HAProxy stats для моніторингу
-
Логування через rsyslog або ELK
-
Використовуйте unicast VRRP у хмарних середовищах
-
Обмежте VRRP трафік firewall-правилами