RabbitMQ HA&故障转移

时间:2015-03-13 21:24:07

标签: rabbitmq cluster-computing load-balancing high-availability failover

我已经阅读了clusteringHA章节,并对RabbitMQ群集有了一个公平的理解。我不明白的一件事是,在集群上有2个以上的节点和一组HA队列,客户端如何建立连接,这样如果一个节点出现故障,它们会自动无缝地连接到其余节点。这可以通过负载均衡器(例如Amazon ELB)实现,以便在AWS中进行部署吗?

3 个答案:

答案 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.domainrabbitmq2.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端口