我们正在运行一个由 Ansible 管理的 OpenStack 环境,其中包含三个控制器节点。最近,Controller-2 遇到了 RabbitMQ 集群网络分区问题,我们无法解决,导致我们将其从 RabbitMQ 集群中移除并执行 rabbitmqctl reset。

此后,RabbitMQ 集群节点移除,我们目前无法将此节点重新加入 RabbitMQ 集群。尝试加入集群时出现以下错误:

Controller-2]# rabbitmqctl join_cluster rabbit@ctrl-1-rabbit-mq-container 将节点 rabbit@ctrl-2 与 rabbit@ctrl-1 进行集群 错误:{:failed_to_cluster_with,[:”rabbit@ctrl-3″, :”rabbit@ctrl-1″],’Mnesia 无法连接到任何节点。’}

我们已经验证 Controller-2 可以与集群中的其他节点通信,并且它使用‘pong’响应“rabbitmqctl eval ‘net_adm:ping(”’rabbit@ctrl-1”’)’”。

没有额外的错误日志表明问题的根源。

我们对解决该问题的任何帮助都将不胜感激。


最佳答案
1

rabbitmqctl reset按下 ctrl-2 是不够的,您还需要rabbitmqctl forget_cluster_node rabbit@ctrl-2在调用 join_cluster 操作之前从现有集群成员之一发出。但它可能是别的,因为它写了一些关于 Mnesia 的东西。通常,当我修复 RabbitMQ 集群时,我会删除除一个之外的所有节点,然后创建新的节点。您只需要确保您的第一个节点(例如 rabbitmq@ctrl-1)正常,检查 vhosts(rabbitmqctl list_vhosts)、权限(rabbitmqctl list_permissions),几乎每个 OpenStack 组件都需要自己的 vhost、用户和适当的权限……您写道您使用 Ansible……您可能是指 Kolla-Ansible 或 Openstack-Ansible,对吗?我不太了解它们,但它们有可能包含一些用于自动修复集群的剧本或任务,您检查过这个吗?

1

  • 我让集群忘记了其他节点。因此,目前这两个节点都在集群中,并且可以看到它们正常,并且所有 vhost 都用于开放堆栈组件。我们不会重建容器,而是尝试修复它。验证了所有任务和剧本,但没有看到任何内容。一个选项是重新创建容器,但我们不想这样做,因为不确定是否有其他问题导致此行为。


    –