我正在使用 keepalived 来平衡多个 TCP 服务器之间的连接。我不认为这很重要,但这种情况下的服务是rabbitmq。我正在使用带有加权循环的 NAT 类型平衡。
客户端连接到服务器,因此:
[client]-----------[lvs]------------[real server]
a b
如果客户端连接到 LVS 并保持空闲,在套接字上不发送任何内容,这最终会超时,根据使用设置的超时ipvsadm --set
。此时,上面标记为“a”的连接正确地从netstat -anp
客户端的输出和ipvsadm -L -n -c
lvs 框的输出中消失了。但是,连接“b”根据netstat -anp
真实服务器盒保持已建立。
为什么是这样?我可以强制lvs正确重置与真实服务器的连接吗?
您是否启用了持久连接?可以使用 -p [timeout] 设置持久连接超时
这使连接 b 保持活动状态,以将来自客户端 IP 的进一步请求路由到同一真实服务器。
您可以使用 --set 命令来减少超时。
或者试试haproxy。
我有同样的问题。我停止了firewalld,并解决了它。
在LVS MASTER中,我使用tcpdump发现LVS没有将F包转发给RS,客户端一次次发送F包给LVS
添加 -e 到 tcpdump 以查看机器的 MAC:
tcpdump -i eth0 -nn -e host CLIENT_IP and port 80
10.220.16.105是客户端ip,10.220.15.10是VIP
最后,我尝试 systemctl stop firewalld。