RabbitMQ 集群 - 更新负载均衡集群中节点的最佳实践?

RabbitMQ cluster - best practice for updating a node in a load balanced cluster?

总结:在负载均衡集群中更新节点的最佳实践是什么?

我们在 ha 代理负载均衡器后面使用 RabbitMQ 集群来为我们的客户端支持简单的集群,as suggested in the RabbitMQ docs

虽然文档中有这样的建议,但它们并未描述从集群中删除节点以进行升级并将其放回的最佳方法。

这是我认为我们应该使用的过程:

  1. 通过 运行 rabbitmqctl stop_app 在节点本身上从集群中删除节点,并等待它关闭
  2. 在 haproxy 中将节点置于维护模式
  3. 执行维护工作
  4. 将节点加入集群,确认它重新加入并同步。
  5. 从 haproxy 的维护模式中删除节点

但我已经建议我们应该先将其从 ha 代理中删除,基本上交换上面的步骤 1 和 2

这是另一位团队成员建议的流程:

  1. 在 haproxy 中将节点置于维护模式
  2. 通过 运行 rabbitmqctl stop_app 在节点本身上从集群中删除节点,并等待它关闭
  3. 执行维护工作
  4. 将节点加入集群,确认它重新加入并同步。
  5. 从 haproxy 的维护模式中删除节点

哪种方法最好?

对我来说,最明显的方法是告诉你 haproxy 你想停止向服务器发送请求,然后停止服务器本身,而不是相反。

我很好奇您为什么要先停止服务器,然后再将其放入 maint ?如果你这样做,一些请求会在你的节点知道它消失之前到达你的节点。我相信您可以设置 haproxy 来重新发送那些未接来电;所以最好的情况是你有一些请求有点慢,最坏的情况是你有一些错过的请求。

首先将其设置为维护模式并没有什么特别的缺点,所以我个人不会考虑其他选项。