我已经阅读了 clustering和 HA章节并对 RabbitMQ 集群有了一个公平的理解。我不明白的一件事是,集群上有 2 个以上的节点和一组 HA 队列,客户端如何建立连接,以便在一个节点发生故障时它们自动无缝地连接到其余节点。这可以通过负载均衡器(例如用于在 AWS 中进行部署的 Amazon ELB)来实现吗?
最佳答案
使用像 Amazon ELB 或 HAProxy 这样的负载均衡器正是您应该如何将流量路由到 Rabbit 集群中的可用节点。
我推荐 HAProxy。这是一个示例 HAProxy 配置:
global
log 127.0.0.1 local1
maxconn 4096
#chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
#debug
#quiet
defaults
log global
mode tcp
option tcplog
retries 3
option redispatch
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
listen stats :1936
mode http
stats enable
stats hide-version
stats realm Haproxy\ Statistics
stats uri /
listen aqmp_front :5672
mode tcp
balance roundrobin
timeout client 3h
timeout server 3h
option clitcpka
server aqmp-1 rabbitmq1.domain:5672 check inter 5s rise 2 fall 3
server aqmp-2 rabbitmq2.domain:5672 backup check inter 5s rise 2 fall 3
注意最后两行。您需要将 rabbitmq1.domain
和 rabbitmq2.domain
替换为您的两个节点的位置。由于第二台服务器设置为备份检查
,HAProxy 将仅在第一个节点上平衡请求,如果该节点失败,请求将路由到第二个节点。
关于RabbitMQ HA 和故障转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29042201/