据我了解,RabbitMQ 集群是为了可扩展性而不是可用性,但使用镜像队列也可以实现可用性,因为如果该主服务器出现故障,则可以将最新的从服务器提升为主服务器。
从文档中:
发布到队列的消息被复制到所有从站。无论消费者连接到哪个节点,消费者都连接到主节点,从节点丢弃已在主节点确认的消息。因此,队列镜像增强了可用性,但不会在节点之间分配负载(所有参与的节点各自完成所有工作)。
因此,给定队列的节点之间的负载平衡没有意义,因为这总是会增加从联系的节点到队列的主节点的额外行程(除非我误解了某些东西)。因此,我们希望始终能够知道哪个节点是给定队列的主节点。
我并没有真正使用过 RabbitMQ,所以也许我只是在文档中遗漏了它,但似乎没有办法确定镜像队列的 master 的 ip,如果存在 master 故障并且 slave 被提升为掌握。我看到的每个来源都只是评论一个人设置初始主节点的能力,这对我来说不是很有帮助。对于任何时间 t,我如何找到给定队列的主节点 ip?
PS:将节点简单地放在负载均衡器后面似乎也很糟糕,因为如果有一些网络分区(即使在同一个 LAN 中的节点也可能发生),那么我们可能会遇到无法与队列的主人或更糟糕的是,如果您愿意,我们可能会进化出大脑分裂。