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

 手机用户2602917233 发布于 2023-01-03 01:17

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

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

群集是自动指定新的磁盘节点,还是继续使用无磁盘节点.

1 个回答
  • 简短回答:如果所有磁盘节点都死了并且您至少有一个RAM节点,那么您将获得仅限RAM的集群.如果只剩下一个RAM节点并且它向下然后向上,则只有持久实体驻留在它上面.

    答案很长:

    如果您按照" 群集指南"中的描述使用群集,则队列仅驻留在一个节点上:

    RabbitMQ代理操作所需的所有数据/状态都在所有节点上进行复制,以实现可靠性和扩展性,并具有完整的ACID属性.一个例外是消息队列,它们默认驻留在创建它们的节点上,尽管它们是可见的并且可以从所有节点访问.要跨群集中的节点复制队列,请参阅有关高可用性的文档(请注意,您需要首先使用工作群集).

    因此,当节点死亡(不仅是光盘1,它也应用于RAM)时,您丢失队列(带有内容)驻留在该节点上.

    如果使用高可用性跨多个节点镜像队列(实际上,这取决于你如何设置它,请参阅详细的解释ha-modeha-policy政策键- all,exactlynodes).

    使用HA,如果队列有一些ha策略集并且它所驻留的节点死亡,那么该队列将被尝试镜像到其他节点,包括仅有一个节点(当然,这取决于你如何设置ha-mode,例如,如果它设置了to nodes和list中的所有节点都会丢失队列).

    所以在这样的介绍之后,

    如果您关闭所有磁盘节点并且只有RAM节点和队列适合内存,一切都将正常工作.如果队列不适合内存,则应用流控制内存限制,在重新启动部分的集群文档中解释(在e结尾处:

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

    以及来自群集文档的更多内容:

    节点可以是磁盘节点或RAM节点.(注意:磁盘和磁盘可互换使用.配置语法或状态消息通常使用光盘.)RAM节点仅将其状态保留在内存中(队列内容除外,如果队列持久或太大而无法驻留在磁盘上)适合记忆).磁盘节点将状态保持在内存和磁盘上.由于RAM节点不必像磁盘节点那样写入磁盘,因此它们可以更好地执行.但请注意,由于队列数据始终存储在磁盘上,因此性能改进将仅影响资源管理(例如,添加/删除队列,交换或虚拟主机),但不会影响发布或消耗速度.由于状态是在群集中的所有节点之间复制的,因此在群集中只有一个磁盘节点就足够了(但不建议这样做),以便安全地存储群集的状态.

    因此,如果您没有真正添加任何光盘节点,您将获得仅限RAM的群集.在某些情况下它可能会很快,但是如果所有节点都关闭,您将永远丢失所有队列的内容,除了持久的队列,而任何节点都会在盘上转储持久队列和消息.

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

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

    具有所有内存节点的集群

    群集磁盘节点与Ram节点说明

    2023-01-03 02:02 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有