4.8.3. 在缩减时迁移信息
要在缩减代理部署时迁移消息,请使用主代理自定义资源(CR)启用消息迁移。在缩减集群代理部署时,AMQ Broker Operator 会自动运行专用的扩展控制器来执行消息迁移。
启用消息迁移后,Operator 中的扩展控制器检测到代理 Pod 关闭,并启动 drainer Pod 以执行消息迁移。drainer Pod 连接到集群中的其他实时代理 Pod 之一,并将消息迁移到该 live 代理 Pod。迁移完成后,缩减控制器将关闭。
- 缩减控制器只在单一 OpenShift 项目中运行。控制器无法在单独的项目中的代理之间迁移消息。
- 如果您将代理部署缩减为 0(零),则不会发生消息迁移信息,因为没有正在运行的代理 Pod 可以迁移到消息传递数据。但是,如果您将部署缩减到零代理,然后备份到原始部署中的一些代理,则会为继续关闭的代理启动排空 Pod。
以下示例显示了扩展控制器的行为。
先决条件
- 您已有一个基本的代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
- 您应该了解消息迁移如何工作。如需更多信息,请参阅 第 4.8.2 节 “消息迁移”。
步骤
-
在最初下载并提取的 Operator 存储库的
deploy/crs目录中,打开主代理 CR,broker_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 正在运行:一个用于代理 Operator 本身,以及部署中每个代理的独立 Pod。
登录到每个 Pod,并将一些信息发送到每个代理。
Pod
ex-ao-ss-0有集群 IP 地址172.17.0.6,运行以下命令:$ /opt/amq-broker/bin/artemis producer --url tcp://172.17.0.6:61616 --user admin --password adminPod
ex-aao-ss-1具有172.17.0.7的集群 IP 地址,运行以下命令:$ /opt/amq-broker/bin/artemis producer --url tcp://172.17.0.7:61616 --user admin --password admin前面的命令在每个代理上创建一个名为
TEST的队列,并将 1000 个消息添加到每个队列。
将集群从两个代理缩减到一。
-
打开主代理 CR,
broker_activemqartemis_cr.yaml。 -
在 CR 中,将
deploymentPlan.size设置为1。 在命令行中应用更改:
$ oc apply -f deploy/crs/broker_activemqartemis_cr.yaml您会看到 Pod
ex-ao-ss-1开始关闭。扩展控制器启动相同名称的新排空器 Pod。这个 drainer Pod 还会在将代理 Podex-ao-ss-1的所有消息迁移到集群中的其他代理 Pod 后关闭,即ex-aao-ss-0。
-
打开主代理 CR,
-
关闭 drainer Pod 时,检查代理 Pod
ex-aao-ss-0上测试队列的消息数。您会看到队列中的消息数量为 2000,这表示排空 Pod 成功从关闭的代理 Pod 中迁移了 1000 信息。