RabbitMQ HA&;故障转移
我已经阅读了和章节,对RabbitMQ集群有了相当的了解。我不了解的一件事是,集群上有2+个节点和一组HA队列,客户端如何建立连接,以便在一个节点出现故障时,它们自动无缝连接到其余节点。这可以通过负载平衡器(例如,AWS中部署的Amazon ELB)实现吗?使用类似Amazon ELB或HAProxy的负载平衡器正是您应该如何将流量路由到Rabbit集群中的可用节点 我推荐HAProxy。以下是HAProxy配置示例:RabbitMQ HA&;故障转移,rabbitmq,cluster-computing,load-balancing,high-availability,failover,Rabbitmq,Cluster Computing,Load Balancing,High Availability,Failover,我已经阅读了和章节,对RabbitMQ集群有了相当的了解。我不了解的一件事是,集群上有2+个节点和一组HA队列,客户端如何建立连接,以便在一个节点出现故障时,它们自动无缝连接到其余节点。这可以通过负载平衡器(例如,AWS中部署的Amazon ELB)实现吗?使用类似Amazon ELB或HAProxy的负载平衡器正是您应该如何将流量路由到Rabbit集群中的可用节点 我推荐HAProxy。以下是HAProxy配置示例: global log 127.0.0.1 local1
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将仅在第一个节点上平衡请求,如果该节点失败,请求将路由到第二个节点。我将在所有兔子节点上使用simplekeepalived
deamon。它只是添加了一个在节点之间共享的虚拟IP地址,您可以使用该地址进行客户端访问。配置非常简单,请检查此项
示例配置:
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
}
}
您必须在rabbitmq服务器之间配置镜像队列
rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode": "all"}'
在本例中,rabbitmq将是镜像队列,其前缀为amq。当服务器A出现故障时,这些队列单元L将在服务器B上退出。您还可以使用代码HA(连接到服务器失败,然后连接到服务器B)或使用keepalive使用HA rabbitmq端口