RabbitMQ HA&;故障转移

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

我已经阅读了和章节,对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将仅在第一个节点上平衡请求,如果该节点失败,请求将路由到第二个节点。

我将在所有兔子节点上使用simple
keepalived
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端口