I have a system running 1.5-rolling-202501110007 that is acting as a load balancer across several HTTP servers, and it always sends all traffic to a single backend server unless I manually make changes via ipvsadm.
Here's the config snippet involved (under high-availability):
virtual-server http {
address 50.106.9.46
algorithm weighted-round-robin
delay-loop 1
port 8080
protocol tcp
real-server 172.16.0.1 {
port 80
}
real-server 172.16.0.2 {
port 80
}
real-server 172.16.1.1 {
port 80
}
real-server 172.16.1.2 {
port 80
}
real-server 172.31.255.1 {
connection-timeout 5
port 80
}
real-server 172.31.255.2 {
connection-timeout 5
port 80
}
}Running a test from an external server with 256 open connections results in all connections going to the same backend:
TCP 50.106.9.46:http-alt wrr -> 172.16.0.1:http Masq 1 0 0 -> 172.16.0.2:http Masq 1 0 0 -> 172.16.1.1:http Masq 1 256 0 -> 172.16.1.2:http Masq 1 0 0 -> scottstuff.net:http Masq 1 0 0 -> scottstuff.net:http Masq 1 0 0
The backend that gets all of the traffic varies over time, but generally a single backend ends up with all traffic. Changing the LB algorithm in VyOS doesn't seem to make any difference. I've tried RR, WRR, and a couple of the LC options.
However, manually changing the algorithm via ipvsadm and then changing it back results in traffic being balanced:
# ipvsadm -E -t 50.106.9.46:8080 -s rr # ipvsadm -E -t 50.106.9.46:8080 -s wrr ... run test ... TCP 50.106.9.46:http-alt wrr -> 172.16.0.1:http Masq 1 42 0 -> 172.16.0.2:http Masq 1 43 0 -> 172.16.1.1:http Masq 1 43 256 -> 172.16.1.2:http Masq 1 42 0 -> scottstuff.net:http Masq 1 43 0 -> scottstuff.net:http Masq 1 43 0
I saw the same behavior with a nightly from July and upgraded to a current nightly, but it's still broken.
FWIW, here's most of`/run/keepalived/keepaliced.conf`:
# Autogenerated by VyOS
# Do not edit this file, all your changes will be lost
# on next commit or reboot
# Global definitions configuration block
global_defs {
dynamic_interfaces
script_user root
notify_fifo /run/keepalived/keepalived_notify_fifo
notify_fifo_script /usr/libexec/vyos/system/keepalived-fifo.py
}
# Virtual-server configuration
# Vserver http
virtual_server 50.106.9.46 8080 {
delay_loop 1
lb_algo wrr
lb_kind NAT
persistence_timeout 300
protocol TCP
real_server 172.16.0.1 80 {
weight 1
TCP_CHECK {
}
}
real_server 172.16.0.2 80 {
weight 1
TCP_CHECK {
}
}
real_server 172.16.1.1 80 {
weight 1
TCP_CHECK {
}
}
real_server 172.16.1.2 80 {
weight 1
TCP_CHECK {
}
}
real_server 172.31.255.1 80 {
weight 1
TCP_CHECK {
connect_timeout 5
}
}
real_server 172.31.255.2 80 {
weight 1
TCP_CHECK {
connect_timeout 5
}
}
}I should note that I have 2 additional virtual_servers defined but neither gets any traffic today so I'm omitted them from the config.