4.9.3. 在缩减时迁移消息
要在扩展代理部署时迁移消息,请使用主代理自定义资源(CR)来启用消息迁移。AMQ Broker Operator 自动运行专用缩减控制器,在缩减集群代理部署时执行消息迁移。
启用消息迁移后,Operator 中的 scaledown 控制器会检测到代理 Pod 的关闭,并启动一个排空 Pod 来执行消息迁移。drainer Pod 连接到集群中的另一个 live 代理 Pod,并将信息迁移到该 live 代理 Pod。迁移完成后,扩展控制器将关闭。
- 扩展控制器仅在单个 OpenShift 项目中运行。控制器无法在单独的项目中的代理之间迁移消息。
- 如果您将代理部署缩减为 0(零),则不会进行消息迁移,因为没有正在运行的代理 Pod 可以迁移到消息传递数据。但是,如果您将部署缩减到零代理,然后只备份到原始部署中的一部分代理,则为保持关闭的代理启动排空 Pod。
以下示例步骤演示了 scaledown 控制器的行为。
先决条件
- 您已有基本的代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
- 您应了解消息迁移的工作方式。如需更多信息,请参阅 第 4.9.2 节 “消息迁移”。
流程
-
在您最初下载并提取的 Operator 存储库的
deploy/crs目录中,打开主代理 CRbroker_activemqartemis_cr.yaml。 在主代理 CR 中,将
messageMigration和persistenceEnabled设置为true。这些设置意味着,当您稍后缩减集群代理部署的大小时,Operator 会自动启动扩展控制器,并将信息迁移到仍在运行的代理 Pod 中。
在现有的代理部署中,验证哪些 Pod 正在运行。
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您看到类似于如下的输出:
activemq-artemis-operator-8566d9bf58-9g25l 1/1 Running 0 3m38s ex-aao-ss-0 1/1 Running 0 112s ex-aao-ss-1 1/1 Running 0 8s
activemq-artemis-operator-8566d9bf58-9g25l 1/1 Running 0 3m38s ex-aao-ss-0 1/1 Running 0 112s ex-aao-ss-1 1/1 Running 0 8sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 前面的输出显示有三个 Pod 正在运行;一个用于 broker Operator 本身,另一个用于部署中每个代理。
登录到每个 Pod 并向每个代理发送一些信息。
使 Pod
ex-aao-s-0的集群 IP 地址为172.17.0.6,运行以下命令:/opt/amq-broker/bin/artemis producer --url tcp://172.17.0.6:61616 --user admin --password admin
$ /opt/amq-broker/bin/artemis producer --url tcp://172.17.0.6:61616 --user admin --password adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使 Pod
ex-aao-s-1的集群 IP 地址为172.17.0.7,运行以下命令:/opt/amq-broker/bin/artemis producer --url tcp://172.17.0.7:61616 --user admin --password admin
$ /opt/amq-broker/bin/artemis producer --url tcp://172.17.0.7:61616 --user admin --password adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上述命令在每个代理上创建一个名为
TEST的队列,并为每个队列添加 1000 消息。
将集群从两个代理缩减到一个代理。
-
打开 main broker CR
broker_activemqartemis_cr.yaml。 -
在 CR 中,将
deploymentPlan.size设置为1。 在命令行中应用更改:
oc apply -f deploy/crs/broker_activemqartemis_cr.yaml
$ oc apply -f deploy/crs/broker_activemqartemis_cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您会看到 Pod
ex-aao-ss-1开始关闭。scaledown 控制器启动名称相同的新 drainer Pod。此排空 Pod 在将所有消息从代理 Podex-aao-ss-1迁移到集群中的其他代理 Podex-aao-ss-0后也会关闭。
-
打开 main broker CR
-
关闭 drainer Pod 时,检查代理 Pod
ex-aao-ss-0的TEST队列中的消息数。您会看到队列中的消息数量是 2000,这表示 drainer Pod 成功从已关闭的代理 Pod 中迁移了 1000 条信息。