2017-06-13 242 views
0

希望有人能够给我一些指导。我在3个节点上安装了RabbitMQ集群。 - 节点1(主),节点2和节点3RabbitMQ - 集群和客户端连接

我无法弄清楚的部分是我找不到任何关于Master发生什么情况的信息,客户端指向什么?

如果Node1发生故障,那么配置为指向Node1的客户端肯定无法自动故障切换到新的主设备上?

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

任何想法或想法?

谢谢:)

回答

1

如果客户端只能够连接到一个节点,并在该节点出现故障,客户端将失去连接。你需要(如你揣)某种设置下,一是:

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

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

1

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

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

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

+0

Hey Johansson, 感谢你的理解,我会看看CloudAMQP是不是我之前做过的任何研究,但是如果它提供了这个机制,它可能是一个很好的选择。我会研究! 再次感谢 – Shane

1

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

对于如:

<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}"/> 

这样,当第一个节点出现故障,将连接到第二个节点进行。

+0

是的,我看了几个这些解决方案,但决定我想抽象出需要列出每个客户/消费者中实际的RabbitMQ节点。 绝对值得一看,不过谢谢你 – Shane