我已经配置了 HAProxy(1.5.4,但我也尝试了 1.5.14),以在 TCP 模式下平衡两台在 5672 端口上公开 AMQP 协议(WSO2 消息代理)的服务器。
客户端通过 HAProxy 创建并使用与 AMQP 服务器的永久连接。
我更改了客户端和服务器 TCP keepalive 超时,设置 net.ipv4.tcp_keepalive_time=120 (CentOS 7)。
在 HAProxy 中,我将客户端/服务器超时设置为 200 秒(> 120 秒的 keepalive 数据包)并使用选项 clitcpka。
然后我启动了wireshark并嗅探了所有tcp流量:在客户端发出最后一个请求后,tcp keepalived数据包会在120秒后定期发送,但在客户端发出最后一个请求后200秒后,连接将关闭(因此忽略keepalived 数据包)。
配置如下:
haproxy.conf
global
log 127.0.0.1 local3
maxconn 4096
user haproxy
group haproxy
daemon
debug
listen messagebroker_balancer 172.19.19.91:5672
mode tcp
log global
retries 3
timeout connect 5000ms
option redispatch
timeout client 200000ms
timeout server 200000ms
option tcplog
option clitcpka
balance leastconn
server s1 172.19.19.79:5672 check inter 5s rise 2 fall 3
server s2 172.19.19.80:5672 check inter 5s rise 2 fall 3
TCP keepalive 位于传输层,仅用于在连接上进行一些流量,因此中间的像数据包过滤器这样的系统不会丢失任何状态,并且终端系统可以注意到与另一端的连接是否中断(可能是因为某些东西崩溃或网络电缆损坏)。
TCP 保持活动状态与您已明确设置为 200 秒的应用程序级别空闲超时无关:
timeout client 200000ms
timeout server 200000ms
如果连接空闲,即没有传输数据,则会触发此超时。 TCP keepalive 不传输任何数据,这些数据包的有效负载为空。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)