gpt4 book ai didi

java - 为 rabbitmq 配置 HAProxy

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:24 26 4
gpt4 key购买 nike

我想使用 HAProxy 作为负载均衡器。我想在 haproxy 后面放两个 rabbitmq 服务器。两个 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 条消息应该发送到 rabbit server2。我必须遵循的配置应该是什么?

更新:

我还用 leastconn 进行了平衡测试,但 HAProxy 行为出现了意外。我已经在 serverfault.com 上发布了这个问题

最佳答案

消息被发布到一个交换器,该交换器将路由到一个队列。

您可能没有使用 {"x-ha-policy","all"} 配置队列。基于交换路由在两个节点上都有效的事实,这可能就是您所缺少的。

注意:在 Rabbit 3.0 之前,您可以使用 x-ha-policy 参数声明一个队列,并且它会被镜像。对于 rabbit 3.0,你需要应用一个策略(ha-mode = all)。您可以通过 api 或 api 工具(rabbitmqctl,管理 gui)设置策略。即

rabbitmqctl set_policy -p '/' MirrorAllQueues '.+' '{"ha-mode": "all"}'

关于java - 为 rabbitmq 配置 HAProxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10547523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com