gpt4 book ai didi

cluster-computing - 网络故障后 RabbitMQ 集群未重新连接

转载 作者:行者123 更新时间:2023-12-03 21:15:06 28 4
gpt4 key购买 nike

我有一个 RabbitMQ 集群,其中有两个生产节点,集群因以下错误消息而中断:

=ERROR REPORT==== 23-Dec-2011::04:21:34 ===
** Node rabbit@rabbitmq02 not responding **
** Removing (timedout) connection **

=INFO REPORT==== 23-Dec-2011::04:21:35 ===
node rabbit@rabbitmq02 lost 'rabbit'

=ERROR REPORT==== 23-Dec-2011::04:21:49 ===
Mnesia(rabbit@rabbitmq01): ** ERROR ** mnesia_event got {inconsistent_database, running_partitioned_network, rabbit@rabbitmq02}
我试图通过使用“tcpkill”终止两个节点之间的连接来模拟问题。集群已断开连接,令人惊讶的是,两个节点并没有尝试重新连接!
当集群中断时,HAProxy 负载均衡器仍将两个节点标记为事件节点并向它们发送请求,尽管它们不在集群中。
我的问题:
  • 如果节点被配置为集群工作,当我遇到网络故障时,为什么他们不尝试重新连接?
  • 如何识别损坏的集群并关闭其中一个节点?分别使用两个节点时,我遇到了一致性问题。
  • 最佳答案

    RabbitMQ 集群在不可靠的网络上不能很好地工作(RabbitMQ 文档的一部分)。因此,当网络故障发生时(在两节点集群中),每个节点都认为它是集群中的主节点和唯一节点。两个主节点不会自动重新连接,因为它们的状态不会自动同步(即使在 RabbitMQ 从属的情况下 - 实际的消息同步不会发生 - 从队列只是“ catch ”消息从队列中消耗和更多消息被添加)。

    要检测您是否有损坏的集群,请运行以下命令:

    rabbitmqctl cluster_status

    在构成集群一部分的每个节点上。如果集群坏了,那么你只会看到一个节点。就像是:
    Cluster status of node rabbit@rabbitmq1 ...
    [{nodes,[{disc,[rabbit@rabbitmq1]}]},{running_nodes,[rabbit@rabbitmq1]}]
    ...done.

    在这种情况下,您需要在构成原始集群一部分的节点之一上运行以下命令集(以便它作为从属节点加入集群中的另一个主节点(例如 rabbitmq1)):
    rabbitmqctl stop_app

    rabbitmqctl reset

    rabbitmqctl join_cluster rabbit@rabbitmq1

    rabbitmqctl start_app

    最后再次检查集群状态..这次你应该看到两个节点。

    注意:如果您在 HA 配置中使用虚拟 IP 的 RabbitMQ 节点(并且客户端使用此虚拟 IP 连接到 RabbitMQ),那么应该成为主节点的节点应该是具有虚拟 IP 的节点。

    关于cluster-computing - 网络故障后 RabbitMQ 集群未重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8654053/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com