我正在探索RabbitMQ quorum 队列,以改进 Kubernetes 集群中某些服务的 HA。在我阅读时,它们的设计考虑到了数据安全。
但是,“管理副本”一章指出:
仲裁队列的副本由操作员显式管理。当一个新节点被添加到集群中时,它不会托管任何仲裁队列副本,除非操作员明确地将其添加到仲裁队列或一组仲裁队列的成员(副本)列表中。
因此,如果发生中断(尤其是非自愿的),可能会出现以下情况(对于 3 节点集群):
- 中断后,一个节点会宕机:其他两个节点仍然占多数,并将“保持队列活动”,可能会选举一个新的领导者;
- kubernetes 会提供一个新的节点(pod)来替换失效的节点;新节点会自动重新加入 RabbitMQ 集群,但是
- 除非操作员手动干预,否则新节点不会对现有的仲裁队列做出贡献;
- 对于 3 节点集群,这意味着不再有 HA:如果将来某个时候,其他节点之一发生故障,则队列实际上会丢失;
有什么办法可以缓解这种情况吗?例如,是否可以让节点自动重新加入所有现有的仲裁队列集群?也许通过维护一个“启动命令”列表(在 RabbitMQ 启动后运行)我们可以添加重新加入命令?