У меня есть простой кластер серого журнала с двумя хостами, для которого мне нужно сбалансировать нагрузку трафика syslog udp, я использую keepalived, плавающий IP-адрес и балансировка нагрузки отлично работает, но он по-прежнему направляет трафик на все узлы, даже на те, на которых не удалось выполнить проверку работоспособности, я хочу, чтобы он направлял трафик только на здоровые узлы, вот мой keepalived.conf:
global_defs {
enable_script_security
script_user root root
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface enp0s3
virtual_router_id 216
priority 200
advert_int 1
preempt_delay 30
authentication {
auth_type PASS
auth_pass redacted
}
virtual_ipaddress {
192.168.0.X
}
}
virtual_server 192.168.0.X 514 {
delay_loop 1
protocol UDP
lb_algo wrr # makes no difference
lb_kind NAT # no difference too
real_server 192.168.0.A 514 {
weight 1
HTTP_GET {
url {
path "/api/system/lbstatus"
status_code 200
}
connect_timeout 3
connect_port 9000
}
}
real_server 192.168.0.B 514 {
weight 1
HTTP_GET {
url {
path "/api/system/lbstatus"
status_code 200
}
connect_timeout 3
connect_port 9000
}
}
}
то же самое на втором хосте, кроме state BACKUP
и более низкий приоритет, оба экземпляра keepalived взаимодействуют, я вижу, что проверки работоспособности завершаются неудачно и успешно, в журналах добавляются и удаляются службы из VS и т. д., но оба хоста получают данные, даже если проверка работоспособности на одном из них не удалась (проверено с помощью tcpdump)
Что я делаю не так?