我正在尝试将 HAProxy 设置为 RabbitMQ 集群上的负载均衡器。我使用如下配置:
global
log /dev/log local0 debug
log /dev/log local1 debug
chroot /var/lib/haproxy
user haproxy
group haproxy
defaults
log global
retries 2
timeout connect 5000
timeout server 50000
timeout client 50000
listen rabbitmq-cluster
bind my.pu.blic.ip:5672
mode tcp
option tcpka
option redispatch
balance roundrobin
server rabbit1 rabbit1:5672 check inter 5000 downinter 500
server rabbit2 rabbit2:5672 check inter 5000 downinter 500
server rabbit3 rabbit3:5672 check inter 5000 downinter 500
我的问题是,客户端本应保持与 rabbitmq 服务器的连接打开,但每 50 秒就会关闭一次连接。我是不是忘记了某个选项,还是应该将超时时间增加到某个更高的值来缓解这个问题?
谢谢!
答案1
看起来您的客户端建立了连接,但是在 AMQP 握手之后没有其他活动(常见的情况是消费者正在等待队列中的数据但队列为空)。
根据您发布的配置,超时设置为 50 秒,因此当该连接上没有网络活动时,预计 50 秒后关闭连接。
为了解决这个问题,您可以增加超时时间以使其适合您的用例值,或者启用心跳(参见心跳部分),此外还要研究配置手动(参见hearbeat
选项说明)。对于您的情况,您必须将心跳值更改为低于 50 秒的值,例如timeout
/3 四舍五入为...例如 15。
通常,使用心跳时,心跳帧会在最后一次连接活动后的心跳间隔后发送。当三个心跳帧失败时(需要 3 x 心跳间隔),服务器或客户端应强制关闭连接,而无需任何握手。