【问题标题】:RabbitMQ Mirrored Queues on Multiple Clusters多个集群上的 RabbitMQ 镜像队列
【发布时间】:2018-04-28 01:10:23
【问题描述】:

是否可以通过多个 (2) RabbitMQ 集群来使用 RabbitMQ HA?

这是我的要求:

我们有 2 个 RabbitMQ 集群(每个集群有 4 个节点)。两个集群中的所有节点都将使用相同的 Erlang cookie。因此,即使这 2 个集群在物理上位于不同的位置,但将作为具有 8 个节点的单个集群。

我们计划使用 HAProxy 对两个集群(8 个节点)进行负载平衡。发布者和消费者都将使用此代理连接到代理。

我们希望将镜像队列用于 HA 与 ha-mode:exactly、ha-params:4、ha-sync-mode:automatic 以及用于 cluster_partition_handling 的 auto-heal。

问题:

  1. 在 HA 的情况下,我们是否可以指定使用来自第一个集群的 2 个节点和来自第二个集群的 2 个节点。据我了解,这可以通过策略 ha-mode:nodes 并使用节点名称来完成,但这样它将始终使用同一个节点,这个设置可以是动态的吗?

  2. 由于这两个集群都非常可靠,因此对 cluster_partition_handling 使用自动修复是否是正确的方法(以防裂脑)?

  3. 根据这个“默认情况下,RabbitMQ 集群中的队列位于单个节点上(第一次声明它们的节点)。这与交换和绑定相反,它总是可以被认为是在所有节点上。”。这是否意味着默认情况下会镜像交换?那么当一条消息到达一个交换机并且该节点宕机时,该消息在另一个节点上的另一个交换机上是否可用?

【问题讨论】:

    标签: rabbitmq rabbitmq-exchange rabbitmqctl


    【解决方案1】:

    RabbitMQ 团队会监控 this mailing list,并且有时只会在 StackOverflow 上回答问题。


    因此,即使这 2 个集群在物理上位于不同的位置,但将充当具有 8 个节点的单个集群。

    请不要这样做。 RabbitMQ 集群需要具有低延迟可靠网络连接。如果您的集群跨越 WAN 或可用区,您拥有网络分区的机会将大大增加。有关更多信息,请参阅文档的 this section。您应该使用铲子或联邦功能。

    这是否意味着默认情况下会镜像交换?那么当一条消息到达一个交换机并且该节点宕机时,该消息在另一个节点上的另一个交换机上是否可用?

    是的,是的。

    【讨论】:

    • 我们的目标是 HA,我们有 2 个物理上分离的数据中心,通过 LAN 连接,网络延迟为 1 毫秒。在这种情况下,我们应该考虑使用 RabbitMQ 联合交换和联合队列还是使用镜像队列的单个集群(在两个数据中心中具有相同的 cookie)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2018-01-09
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多