如果唯一的磁盘节点死亡,RabbitMQ集群会发生什么情况?
RabbitMQ群集需要至少有一个磁盘节点(不能将最后一个磁盘节点转换为ram节点) 但是(特别是在云环境中)节点可能会死亡-如果唯一的磁盘节点死亡,集群会发生什么如果唯一的磁盘节点死亡,RabbitMQ集群会发生什么情况?,rabbitmq,amqp,Rabbitmq,Amqp,RabbitMQ群集需要至少有一个磁盘节点(不能将最后一个磁盘节点转换为ram节点) 但是(特别是在云环境中)节点可能会死亡-如果唯一的磁盘节点死亡,集群会发生什么 集群是否会自动指定一个新的磁盘节点,或者在没有磁盘节点的情况下继续工作。简短回答:如果所有磁盘节点都已死亡,并且您至少有一个RAM节点,您将获得仅RAM的集群。在只剩下一个RAM节点的情况下,它会先下降然后上升,只有持久的实体会驻留在它上面 长答案: 如果使用队列中所述的群集,则仅驻留在一个节点上: RabbitMQ代理操作所需的所
集群是否会自动指定一个新的磁盘节点,或者在没有磁盘节点的情况下继续工作。简短回答:如果所有磁盘节点都已死亡,并且您至少有一个RAM节点,您将获得仅RAM的集群。在只剩下一个RAM节点的情况下,它会先下降然后上升,只有持久的实体会驻留在它上面 长答案: 如果使用队列中所述的群集,则仅驻留在一个节点上: RabbitMQ代理操作所需的所有数据/状态均为 跨所有节点复制,以实现可靠性和可扩展性,并具有完整的 酸性质例外情况是消息队列,它通过 默认值位于创建它们的节点上,尽管它们是可见的 并且可以从所有节点访问。在网络中跨节点复制队列 群集,请参阅有关高可用性的文档(请注意 首先需要一个工作集群) 所以,当节点死亡时(不仅是磁盘一,它也应用于RAM),您将丢失驻留在该节点上的队列(包含内容) 如果您使用跨多个节点镜像队列(实际上,这取决于您如何设置队列,请参阅
ha模式
和ha策略
策略键的详细说明-all
,确切地说是和节点
)
对于HA,如果队列设置了一些HA策略,并且它所驻留的节点已死亡,则该队列将尝试镜像到其他节点,包括仅一个RAM(当然,这取决于您如何设置HA模式
,例如,如果它设置为节点
,并且列表中的所有节点均已死亡,则会丢失队列)
那么在这样的介绍之后,
如果关闭所有磁盘节点,并且只有RAM节点和符合内存要求的队列,那么一切都将正常工作。如果队列不适合内存,则应用内存限制,如集群文档中所述(在e结尾:
应至少有一个磁盘节点始终运行,以防止数据丢失
丢失。RabbitMQ将在许多情况下阻止创建仅限RAM的群集
情况,但它仍然不会阻止你停止和强制
重置所有磁盘节点,这将导致只使用RAM的群集。
这样做是不可取的,而且很容易丢失数据
还有一点来自:
节点可以是磁盘节点或RAM节点。(注意:磁盘和磁盘是
可互换使用。配置语法或状态消息通常
使用光盘。)RAM节点仅在内存中保持其状态(使用
队列内容异常,如果队列不可用,则可以驻留在光盘上
持久或太大,无法放入内存)。磁盘节点保持状态
内存和磁盘上。由于RAM节点不必向磁盘写入那么多数据
作为磁盘节点,它们可以执行得更好
队列数据始终存储在光盘上,性能改进将
仅影响资源管理(例如添加/删除队列,
交换,或vhost),但不发布或消耗速度。因为
如果在集群中的所有节点上复制状态,就足够了
(但不推荐)要在群集中只有一个磁盘节点,请执行以下操作:
安全地存储群集的状态
所以,如果你不直接添加任何磁盘节点,你将得到一个只有RAM的集群。在某些情况下,它可能很快,但如果所有节点都宕机,你将永远失去所有包含It内容的队列,除了持久队列,而任何节点都会在磁盘上转储持久队列和消息
但不要依赖于RAM节点在磁盘上转储持久实体,而在某些情况下,它可能根本不会转储或不是所有实体(尤其是消息)
有一些旧的邮件列表线程可能会带来一些额外的情况: