4.8.2. 消息迁移
当集群部署中的代理因为部署失败或意图部署而关闭时,消息迁移是如何确保消息传递数据的完整性。也称为 Pod 排空功能,这个过程指的是从已关闭的代理 Pod 中删除和重新分配信息。
- 消息迁移 仅适用于 基于 AMQ Broker Operator 的部署。基于应用模板的部署 没有 消息迁移功能。
- 执行消息迁移的扩展控制器只能在单个 OpenShift 项目中运行。控制器无法在单独的项目中的代理之间迁移消息。
- 要使用消息迁移,您的部署中必须至少有两个代理。默认集群有两个或更多代理的代理。
对于基于 Operator 的代理部署,您可以在部署的主代理资源中将 messageMigration
设置为 true
来启用消息迁移。
消息迁移过程遵循以下步骤:
- 当因为部署中的代理 Pod 失败或意图缩减而关闭时,Operator 会自动启动一个缩减控制器来为消息迁移做准备。扩展控制器在与代理集群相同的 OpenShift 项目名称中运行。
- 缩减控制器自行注册并侦听与项目中的持久性卷声明(PVC)相关的 Kubernetes 事件。
要检查已孤立的持久性卷(PV),扩展控制器会查看卷声明中的孤立卷。控制器将卷声明中的 或dinal 与您项目中仍运行的代理 Pod(即代理集群)中的代理 Pod 进行比较。
如果卷声明中的 ordinal 高于代理集群中运行的任何代理 Pod 的 ordinal,则扩展控制器决定在那个或非插件关闭时代理 Pod,且消息传递数据必须迁移到另一个代理 Pod。
缩减控制器启动排空器 Pod。drainer Pod 运行代理并执行消息迁移。然后,drainer Pod 会标识一个替代的代理 Pod,可将孤立消息迁移到该 Pod。
注意部署中必须至少有一个代理 Pod 仍然在部署中运行,以便进行消息迁移。
下图显示了扩展控制器(也称为 drain控制器)如何将消息迁移到正在运行的代理 Pod。
当消息成功迁移到操作代理 Pod 后,排空程序 Pod 会关闭,扩展控制器会删除孤立 PV 的 PVC。PV 返回为 "Released" 状态。
如果您将代理部署缩减为 0(零),则不会发生消息迁移,因为没有正在运行的代理 Pod 可以迁移到哪些消息传递数据。但是,如果您将部署缩减为 0,然后备份到小于原始部署的大小,则会为保持关闭的代理启动排空 Pod。
其他资源
- 有关在缩减代理部署时的消息迁移示例,请参阅 扩展时迁移消息。