IPVS(保持活力)无法平衡UDP连接

时间:2018-08-10 10:12:10

标签: udp load-balancing rsyslog graylog2

我有两个带Debian 8的负载均衡器和三个带Debian 9的Graylog服务器。

网络中的每台服务器都通过rsyslog将日志发送到LB上配置的虚拟服务器。连接是UDP。

问题是数据包不平衡。 (所有连接都在列表中的第一个真实服务器上)

如果发生故障转移,则将数据包正确发送到其他真实服务器。

我发现重新平衡连接的唯一方法是从LB中删除所有真实服务器并重新启动keepalived服务。

我已经束缚在台上:

ipvsadm --set 0 0 1
Timeout (tcp tcpfin udp): 900 120 1

我已经设置了这两个变量:

echo 1 > /proc/sys/net/ipv4/vs/expire_nodest_conn
echo 1 > /proc/sys/net/ipv4/vs/expire_quiescent_template

IPVS的配置如下:

vrrp_instance logserver {
    state MASTER
    interface eth0
    virtual_router_id 195
    priority 200
    advert_int 1
    authentication {
        auth_type keepalived
        auth_pass xxxxxx
    }
    virtual_ipaddress {
        10.20.20.195/22
    }
}


virtual_server 10.20.20.195 0 {
    delay_loop 60
    protocol UDP
    lb_algo wrr
    lb_kind DR
    persistence_timeout 30

    real_server 10.20.20.196 0 {
        weight 100
        MISC_CHECK {
                connect_timeout 3
                misc_path "/etc/keepalived/checkgraylog 10.20.20.196"
        }
    }

    real_server 10.20.20.197 0 {
       weight 100
        MISC_CHECK {
                connect_timeout 3
                misc_path "/etc/keepalived/checkgraylog 10.20.20.197"
        }
    }

    real_server 10.20.20.198 0 {
       weight 100
        MISC_CHECK {
                connect_timeout 3
                misc_path "/etc/keepalived/checkgraylog 10.20.20.198"
        }    } }

是否有一种方法可以有效平衡UDP与直接路由的连接? 谢谢

1 个答案:

答案 0 :(得分:1)

virtual_server 10.20.20.195 12333 {
    delay_loop 60
    protocol UDP
    lb_algo wrr
    lb_kind DR
    ops # <<< - Try this. Works for me (Ubuntu 18.04, Keepalived v1.3.9, ipvsadm v1.28) 

    real_server 10.20.20.196 12333 {

选项 ops 对我来说只有在以下情况下才有效:

  • 显式定义了虚拟服务器端口。
  • fwmark 与 virtual_server 定义一起使用。

不适用于 virtual_server_IP 0 表单 - 在这种情况下,ipvsadm -Ln 显示也使用了 persistent 选项。