RabbitMQ 仲裁队列 - 让节点自动重新加入

RabbitMQ 仲裁队列 - 让节点自动重新加入

我正在探索RabbitMQ 仲裁队列以提高 Kubernetes 集群中某些服务的 HA。据我所知,它们的设计充分考虑了数据安全。

但是,那“管理副本”一章状态:

仲裁队列的副本由操作员明确管理。当新节点添加到集群时,它将不托管仲裁队列副本,除非操作员明确将其添加到仲裁队列或仲裁队列集的成员(副本)列表中。

因此,在中断(尤其是非自愿的),可能会出现以下情况(对于 3 节点集群):

  1. 中断后,一个节点将会瘫痪:另外两个节点仍然占多数,并将“保持队列活跃”,并可能选出新的领导者;
  2. kubernetes 会提供一个新的节点(pod)来替代失败的节点;新节点会自动重新加入 RabbitMQ 集群,但是
  3. 除非运营商手动干预,新节点将不是为现有的仲裁队列做出贡献;
  4. 对于 3 节点集群,这意味着不再有 HA:如果将来某个时候,其他节点之一出现故障,则队列实际上会丢失;

有什么方法可以缓解这种情况吗?例如,是否有可能让节点自动重新加入所有现有的仲裁队列集群?也许可以通过维护一个“启动命令”列表(在 RabbitMQ 启动后运行),我们可以将重新加入命令

答案1

RabbitMQ 团队强烈建议使用官方的 Kubernetes 操作员 -https://www.rabbitmq.com/kubernetes/operator/operator-overview.html

除此之外,以下是当地 k8s 专家的看法:

Kubernetes 不会随机删除持久卷 - 如果节点因某种原因发生故障,它将以相同的名称和相同的数据启动

只要使用相同的名称和数据,“新”节点就会像旧节点一样加入。

可能存在需要人工干预的情况,但这种情况并不像您想象的那么频繁。


笔记:RabbitMQ 团队监控rabbitmq-users 邮件列表并且仅有时回答 StackOverflow 上的问题。

相关内容