首页 > 解决方案 > 在 RabbitMQ 中重启没有磁盘节点的 RAM 节点

问题描述

在 RabbitMQ 文档Restarting Cluster Nodes中,它说

停止节点选择一个在线集群成员(仅考虑磁盘节点)在重新启动后与之同步。重启后,默认情况下节点将尝试联系该对等方 10 次,响应超时为 30 秒。如果对等点在该时间间隔内可用,则节点成功启动,从对等点同步它需要的内容并继续运行。如果对等体不可用,则重新启动的节点将放弃并自动停止

我认为它说“如果集群中没有可用的磁盘节点,您将无法停止并重新启动 RAM 节点”

这是因为重启 RAM 节点需要一个或多个磁盘节点进行同步。如果集群中没有磁盘节点,则无法同步 RAM 节点,因此它放弃并自动停止。(文件是这么说的)

但是我尝试的结果与文件所说的不同。假设集群中有三个节点。一个磁盘节点和两个 RAM 节点。假设每个节点是“disk1”、“ram1”和“ram2”。

我认为这个过程应该是这样的:

  1. stop ram1
  2. stop disk1-- 此时集群是 RAM only 集群。(“ram2”节点是唯一活着的节点)
  3. start ram1-- 它应该无法启动,因为没有要同步的磁盘节点。

但是结果和我想的不一样。 我能够在没有任何磁盘节点的仅 RAM 集群上启动 RAM 节点。

我是不是误会了什么?

标签: rabbitmq

解决方案


软件无法控制机器的重启/崩溃。您当然可以删除节点并按照您喜欢的顺序启动它们。

根据我从文档中了解到的情况,无法使用 RabbitMQ 集群配置命令从 RabbitMQ 集群中删除唯一的磁盘节点。

然而,从 RabbitMQ 的角度来看,它不能完全阻止仅创建 RAM 集群。

来自官方集群文档

仅包含 RAM 节点的集群会太不稳定;如果集群停止,您将无法再次启动它并且将丢失所有数据。RabbitMQ 在许多情况下会阻止创建仅 RAM 节点的集群,但它不能绝对阻止它。


推荐阅读