HAProxy + RabbitMQ,保持连接活跃

HAProxy + RabbitMQ,保持连接活跃

我正在尝试将 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 心跳间隔),服务器或客户端应强制关闭连接,而无需任何握手。

相关内容