【发布时间】:2012-05-19 19:46:15
【问题描述】:
我想使用 HAProxy 作为负载平衡器。我想把两个rabbitmq服务器放在haproxy后面。两个rabbitmq 服务器都在不同的EC2 实例上。我已经按照this reference 配置了HAProxy 服务器。我工作,但问题是消息没有以循环模式发布。消息仅在一台服务器上发布。我的要求有什么不同的配置吗?
我在 /etc/haproxy/haproxy.cfg 中的配置
listen rabbitmq 0.0.0.0:5672
mode tcp
stats enable
balance roundrobin
option tcplog
no option clitcpka
no option srvtcpka
server rabbit01 46.XX.XX.XX:5672 check
server rabbit02 176.XX.XX.XX:5672 check
listen web-service *:80
mode http
balance roundrobin
option httpchk HEAD / HTTP/1.0
option httpclose
option forwardfor
option httpchk OPTIONS /health_check.html
stats enable
stats refresh 10s
stats hide-version
stats scope .
stats uri /lb?stats
stats realm LB2\ Statistics
stats auth admin:Adm1nn
更新:
我对此做了一些研发,发现HAProxy是在rabbitmq服务器上循环连接的。例如:如果我请求 10 个连接,那么它将在我的 2 个 rabbitmq 服务器上循环 10 个连接并发布消息。
但问题是我想轮询消息,而不是连接它应该由 HAProxy 服务器管理。也就是说,如果我一次向 HAProxy 发送 1000 条消息,那么 500 条消息应该发送到 rabbit server1,500 条 msg 应该发送到 rabbit server2。我应该遵循什么配置?
更新:
我也用 minimumconn 进行了平衡测试,但 HAProxy 的行为出乎意料。我已经在serverfault.com 上发布了这个问题
【问题讨论】:
-
当你说它可以工作但消息只发布在一个服务器上时,这肯定是它不工作的迹象吗?从 HAProxy 机器上,您可以与两台服务器建立 AMQP 连接吗?我注意到它们位于不同的网络上,您能否发布统计页面的屏幕截图,以便我们可以看到 HAProxy 正在做什么。顺便说一句,你在这里的目标是什么?如果可以通过扇出交换更好地管理某些事情,则使用 HAProxy 将消息 RR 到不同的服务器。
-
史蒂夫·马丁。谢谢你的答复。我的 HAproxy 服务器能够连接两个 Rabbitmq 服务器。我的目标是连接应该由 HAProxy 管理。例如,如果我在 HAProxy 后面有 2 个 rabbit 服务器并发布了 1000 条消息,那么 rabbit1 应该有 500 个 msg,剩下的应该有 500 个 msg。如果我在 HAProxy 服务器中动态添加 rabbitmq 服务器,HAP 应该分布在所有的 rabbit 服务器中。目前我正在遭受的是所有 1000 条消息都在 rabbit1 中,而不是在两者中。
-
啊,刚刚更仔细地查看了您的 HAP 配置。您将两台服务器都配置为“备份”。将在答案中发布建议...
标签: java load-balancing rabbitmq haproxy round-robin