RabbitMQ - 聚类&客户连接

时间:2017-06-13 13:10:13

标签: rabbitmq

希望有人能够就此提供一些指导。我在3个节点上设置了RabbitMQ集群。 - Node1(主站),Node2和Node3

我无法弄清楚的部分是我找不到任何有关Master掉线会发生什么的信息,客户指向的是什么?

如果Node1发生故障,那么配置为指向Node1的客户端肯定无法自动故障转移到任何成为新主服务器的客户端?

我的想法是设置一个负载均衡器,用于检测哪个节点是主节点,并且只将请求重定向到该节点?

有什么想法或想法吗?

谢谢:)

3 个答案:

答案 0 :(得分:3)

Spring amqp有助于轻松解决这个问题。它提供了开箱即用的故障转移机制。您可以使用逗号分隔配置节点的地址,并在创建连接工厂时将其传递给addresses参数。

例如:

    <rabbit:connection-factory id="rabbitConnectionFactory" addresses="192.168.1.2:5672,192.168.1.3:5672" username="${rabbitmq.username}"
                           connection-factory="clientConnectionFactory"
                           cache-mode="${rabbit.cacheMode}"
                           channel-cache-size="${rabbit.channelCacheSize}"
                           password="${rabbitmq.password}" virtual-host="${rabbitmq.vhost}"/>

这样,当第一个节点发生故障时,将连接到第二个节点。

答案 1 :(得分:1)

如果客户端只能连接到一个节点,并且该节点出现故障,则客户端将失去连接。你需要(正如你猜测的那样)某种设置:

  • 您将负载均衡器放在节点前面,客户端只连接到负载均衡器; OR
  • 客户端可以连接到任何可用节点,依次尝试每个节点。

无论哪种解决方案,都不需要将所有客户端流量定向到主节点。客户端节点可以连接到主代理或从代理。

答案 2 :(得分:1)

在CloudAMQP,我们有一个到客户端连接到的群集的URL,我们建议始终将客户端配置为在连接丢失时自动重新连接。

我们在节点之间进行故障转移和负载平衡,并且通过DNS完成,TTL较低(30秒)。

https://www.cloudamqp.com/blog/2015-12-29-cloudamqp-plan-setup-pause-minority-mirrored-nodes-and-the-cap-theorem.html