在 HAproxy 服务器中动态添加节点时出现意外行为

在 HAproxy 服务器中动态添加节点时出现意外行为

我想将 HAProxy 用于我的 Web 应用程序以实现负载平衡。我尝试使用命令在 HAProxy 服务器中动态添加新的 rabbitmq 节点:haproxy -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)。我leastconn在负载平衡中使用平衡算法执行 tcp 连接模式。预期的情况是,当一个 rabbitmq 中有 3 个连接时,我会在 HAProxy 服务器中添加一个新的 rabbit 服务器。因此下一个连接将传递到第二个 rabbitmq 服务器,而我的情况并非如此。它以随机的方式分配连接。

这是我的配置文件:

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout      5000
        clitimeout 5000
        srvtimeout 5000
listen rabbitmq 0.0.0.0:5672
         mode    tcp
         stats   enable
         balance leastconn
        option tcplog
        server  rabbit01 xx.xx.xx.xx:5672 check
        server  rabbit02 xx.xx.xx.xx:5672 check
listen tomcatq 0.0.0.0:80
         mode    http
         stats   enable
         balance roundrobin
         stats refresh 10s
        stats refresh 10s
        stats uri     /lb?stats
        stats auth    admin:admin
         option httplog         

导致此行为的问题是什么?任何建议都将不胜感激。

答案1

HAProxy 文档关于平衡算法的说法leastconn

在需要非常长的会话的情况下建议使用此算法,例如 LDAP、SQL、TSE 等...但它不太适合使用短会话的协议,例如 HTTP。

我不确定 AMQP 是如何工作的,但我认为您不会看到完美的结果,尤其是在使用 leastconn 连接数较少的情况下。根据您的详细信息,您似乎没有动态添加节点,实际上您只是在重新启动 HAProxy 实例?

答案2

不确定如何向 haproxy 添加节点。新节点是否已存在于 haproxy.cfg 中?如果使用以下命令添加节点:haproxy -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid),haproxy 将重新启动,所有连接信息将被清除。因此,新连接可能不会发送到第二个 rabbitmq 服务器。

相关内容