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
您看到类似于如下的输出:
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
前面的输出显示有三个 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
使 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
上述命令在每个代理上创建一个名为
TEST
的队列,并为每个队列添加 1000 消息。
将集群从两个代理缩减到一个代理。
-
打开 main broker CR
broker_activemqartemis_cr.yaml
。 -
在 CR 中,将
deploymentPlan.size
设置为1
。 在命令行中应用更改:
$ oc apply -f deploy/crs/broker_activemqartemis_cr.yaml
您会看到 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 条信息。