如果唯一的磁盘节点死亡,RabbitMQ集群会发生什么情况?

如果唯一的磁盘节点死亡,RabbitMQ集群会发生什么情况?,rabbitmq,amqp,Rabbitmq,Amqp,RabbitMQ群集需要至少有一个磁盘节点(不能将最后一个磁盘节点转换为ram节点) 但是(特别是在云环境中)节点可能会死亡-如果唯一的磁盘节点死亡,集群会发生什么 集群是否会自动指定一个新的磁盘节点,或者在没有磁盘节点的情况下继续工作。简短回答:如果所有磁盘节点都已死亡,并且您至少有一个RAM节点,您将获得仅RAM的集群。在只剩下一个RAM节点的情况下,它会先下降然后上升,只有持久的实体会驻留在它上面 长答案: 如果使用队列中所述的群集,则仅驻留在一个节点上: RabbitMQ代理操作所需的所

RabbitMQ群集需要至少有一个磁盘节点(不能将最后一个磁盘节点转换为ram节点)

但是(特别是在云环境中)节点可能会死亡-如果唯一的磁盘节点死亡,集群会发生什么


集群是否会自动指定一个新的磁盘节点,或者在没有磁盘节点的情况下继续工作。

简短回答:如果所有磁盘节点都已死亡,并且您至少有一个RAM节点,您将获得仅RAM的集群。在只剩下一个RAM节点的情况下,它会先下降然后上升,只有持久的实体会驻留在它上面

长答案:

如果使用队列中所述的群集,则仅驻留在一个节点上:

RabbitMQ代理操作所需的所有数据/状态均为 跨所有节点复制,以实现可靠性和可扩展性,并具有完整的 酸性质例外情况是消息队列,它通过 默认值位于创建它们的节点上,尽管它们是可见的 并且可以从所有节点访问。在网络中跨节点复制队列 群集,请参阅有关高可用性的文档(请注意 首先需要一个工作集群)

所以,当节点死亡时(不仅是磁盘一,它也应用于RAM),您将丢失驻留在该节点上的队列(包含内容)

如果您使用跨多个节点镜像队列(实际上,这取决于您如何设置队列,请参阅
ha模式
ha策略
策略键的详细说明-
all
确切地说是
节点

对于HA,如果队列设置了一些HA策略,并且它所驻留的节点已死亡,则该队列将尝试镜像到其他节点,包括仅一个RAM(当然,这取决于您如何设置
HA模式
,例如,如果它设置为
节点
,并且列表中的所有节点均已死亡,则会丢失队列)

那么在这样的介绍之后,

如果关闭所有磁盘节点,并且只有RAM节点和符合内存要求的队列,那么一切都将正常工作。如果队列不适合内存,则应用内存限制,如集群文档中所述(在e结尾:

应至少有一个磁盘节点始终运行,以防止数据丢失 丢失。RabbitMQ将在许多情况下阻止创建仅限RAM的群集 情况,但它仍然不会阻止你停止和强制 重置所有磁盘节点,这将导致只使用RAM的群集。 这样做是不可取的,而且很容易丢失数据

还有一点来自:

节点可以是磁盘节点或RAM节点。(注意:磁盘和磁盘是 可互换使用。配置语法或状态消息通常 使用光盘。)RAM节点仅在内存中保持其状态(使用 队列内容异常,如果队列不可用,则可以驻留在光盘上 持久或太大,无法放入内存)。磁盘节点保持状态 内存和磁盘上。由于RAM节点不必向磁盘写入那么多数据 作为磁盘节点,它们可以执行得更好 队列数据始终存储在光盘上,性能改进将 仅影响资源管理(例如添加/删除队列, 交换,或vhost),但不发布或消耗速度。因为 如果在集群中的所有节点上复制状态,就足够了 (但不推荐)要在群集中只有一个磁盘节点,请执行以下操作: 安全地存储群集的状态

所以,如果你不直接添加任何磁盘节点,你将得到一个只有RAM的集群。在某些情况下,它可能很快,但如果所有节点都宕机,你将永远失去所有包含It内容的队列,除了持久队列,而任何节点都会在磁盘上转储持久队列和消息

但不要依赖于RAM节点在磁盘上转储持久实体,而在某些情况下,它可能根本不会转储或不是所有实体(尤其是消息)

有一些旧的邮件列表线程可能会带来一些额外的情况: