我已经阅读了clustering和HA章节,并对RabbitMQ群集有了一个公平的理解。我不明白的一件事是,在集群上有2个以上的节点和一组HA队列,客户端如何建立连接,这样如果一个节点出现故障,它们会自动无缝地连接到其余节点。这可以通过负载均衡器(例如Amazon ELB)实现,以便在AWS中进行部署吗?
答案 0 :(得分:1)
使用像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
替换为两个节点的位置。由于第二台服务器设置为backup check
,HAProxy将仅在第一个节点上平衡请求,如果此节点发生故障,请求将路由到第二个节点。
答案 1 :(得分:0)
我会在所有兔节点上使用简单的keepalived
deamon。它只是添加了节点之间共享的虚拟IP地址,您可以使用它来进行客户端访问。配置非常简单,请查看此Hollenback's page。
示例配置:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 1
priority 100
virtual_ipaddress {
192.168.1.1/24 brd 192.168.1.255 dev eth0
}
}
答案 2 :(得分:0)
您必须在rabbitmq-servers之间配置镜像队列。
rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode": "all"}'
在示例中,rabbitmq将是镜像队列,其前缀为amq。当服务器A发生故障时,那些队列单元1在服务器B上退出。您还在代码上HA(连接到服务器失败,然后连接到服务器B)或使用keepalive使用HA rabbitmq端口