阅读完文档并RabbitMQ 实际应用,创建 RabbitMQ 集群看起来很简单,但升级或修补现有的 RabbitMQ 集群似乎需要重新启动整个集群。
有没有办法将集群、铲子、联合和负载平衡结合起来,以实现滚动升级而不会丢失队列或消息,或者我是否错过了一些更明显的东西?
答案1
假设您的 rabbitmq 客户端可以容忍连接断开,您可以考虑以下描述这里。
我们的集群位于 VIP 后面。当我们想要升级集群时,我们会启动一个备用集群并将 VIP 切换到备用集群。同时,我们有在集群之间移动消息的工具。当“主”集群的更新完成后,我们会逆转该过程。
答案2
当从 RabbitMQ 的一个主要版本或次要版本升级到另一个版本时(即从 3.0.x 升级到 3.1.x,或从 2.xx 升级到 3.xx),或者升级 Erlang 时,必须关闭整个集群才能进行升级(因为集群无法像这样运行混合版本)。当从一个补丁版本升级到另一个补丁版本时(即从 3.0.x 升级到 3.0.y),情况并非如此;这些版本可以在集群中混合使用(但 3.0.0 不能与 3.0.x 系列的后续版本混合使用)。
答案3
@terence 我也曾有过和你一样的经历。我认为你可以满足你的好奇心这里。PS我自己还没尝试过。