跳到主要内容
版本:4.1

蓝绿部署

蓝绿部署是一种迁移技术,也可用作升级策略。主要思想是建立一个新的环境(“绿色”环境),并在准备就绪后切换到该环境。“升级”不是“就地”执行的,应用程序只是切换到不同的环境,该环境可能使用不同的版本,但也可能在其他方面有所不同。

相同的方法可以用于迁移到新的操作系统或新的硬件,同时保持相同版本的 RabbitMQ,或者从无法直接升级到目标系列的旧版本进行升级,例如,从 3.12.x 升级到 4.0.x,或者从启用了 Khepri 的 3.13.x 集群升级到 4.0.x。

当迁移完成后,旧的(“蓝色”)集群将被停用(关闭、删除)。为了简化切换,可以使用联邦队列将排队的消息从“蓝色”集群传输到“绿色”集群。

准备“绿色”集群

在部署全新的“绿色”集群后,需要遵循两个步骤

  • 导入定义,例如交换器、队列、绑定;
  • 配置联邦以便稍后耗尽消息。

导入定义

定义导出/导入的步骤在备份指南中进行了介绍。“蓝色”集群是源集群,“绿色”集群是目标集群。

配置队列联邦

RabbitMQ 联邦插件可以轻松地将消费者从“蓝色”集群移动到“绿色”集群,而不会中断消息消费或丢失消息。联邦队列的原理是,连接到“绿色”集群的消费者将获得发布到“蓝色”集群的消息,只要“蓝色”集群中没有消费者(本地消费者优先)。

以下是一个联邦所有队列的示例。在本示例中,“蓝色”集群是上游集群,“绿色”集群是下游集群。

首先在“绿色”集群上定义上游,并将其指向“蓝色”集群

rabbitmqctl set_parameter federation-upstream blue \
'{"uri":"amqp://node-in-blue-cluster"}'

然后定义一个策略,匹配所有将 blue 配置为上游的队列

rabbitmqctl set_policy --apply-to queues blue-green-migration ".*" \
'{"federation-upstream":"blue"}'

请阅读上面链接的指南和联邦参考以获取更多详细信息。

迁移消费者

现在您可以切换您的消费者以使用新的“绿色”集群。为此,请根据您的设置重新配置您的负载均衡器或您的消费者应用程序。升级指南涵盖了一些客户端功能,这些功能使它们能够在节点之间切换

此时,您的生产者仍在向“蓝色”集群发布消息,但由于联邦插件,消息将被传输到连接到“绿色”集群的消费者。

耗尽消息

下一步是将生产者也切换到“绿色”集群。但是,您的“蓝色”集群中可能仍然有消息积压。联邦插件在这里没有帮助,因为它不移动消息,它只允许远程消费者出队消息。

如果积压量很大,请在“绿色”集群上使用 Shovel 插件来真正耗尽“蓝色”集群中的消息。这需要对每个有积压的队列执行以下操作

rabbitmqctl set_parameter shovel drain-blue \
'{"src-protocol": "amqp091", "src-uri": "amqp://node-in-blue-cluster", \
"src-queue": "queue1", "dest-protocol": "amqp091", \
"dest-uri": "amqp://", "dest-queue": "queue1"}'

迁移生产者

一旦“蓝色”集群中的队列几乎为空,您可以停止生产者。如果消息顺序对您很重要,您应该仍然多等待一会儿,以便联邦或 Shovel 插件完成耗尽“蓝色”集群上的队列。

当队列为空时,像您对消费者所做的那样重新配置您的生产者,然后重新启动它们。此时,一切都已迁移到“绿色”集群。

停用“蓝色”集群

现在您可以自由关闭“蓝色”集群中的节点。

真实世界示例

Pivotal 的 Dan Baskette、Gareth Smith 和 Claude Devarenne 发表了一篇文章,介绍了这种方法,其中生产者和消费者是 CloudFoundry 应用程序。这篇文章非常详细,并使用图表来描述该过程。他们还制作了一个视频来展示其运行过程

本指南的灵感来自他们的杰出工作。

© . All rights reserved.