4.9.3. 在缩减时迁移消息

要在扩展代理部署时迁移消息,请使用主代理自定义资源(CR)来启用消息迁移。AMQ Broker Operator 自动运行专用缩减控制器,在缩减集群代理部署时执行消息迁移。

启用消息迁移后,Operator 中的 scaledown 控制器会检测到代理 Pod 的关闭,并启动一个排空 Pod 来执行消息迁移。drainer Pod 连接到集群中的另一个 live 代理 Pod,并将信息迁移到该 live 代理 Pod。迁移完成后,扩展控制器将关闭。

注意
  • 扩展控制器仅在单个 OpenShift 项目中运行。控制器无法在单独的项目中的代理之间迁移消息。
  • 如果您将代理部署缩减为 0(零),则不会进行消息迁移,因为没有正在运行的代理 Pod 可以迁移到消息传递数据。但是,如果您将部署缩减到零代理,然后只备份到原始部署中的一部分代理,则为保持关闭的代理启动排空 Pod。

以下示例步骤演示了 scaledown 控制器的行为。

先决条件

流程

  1. 在您最初下载并提取的 Operator 存储库的 deploy/crs 目录中,打开主代理 CR broker_activemqartemis_cr.yaml
  2. 在主代理 CR 中,将 messageMigrationpersistenceEnabled 设置为 true

    这些设置意味着,当您稍后缩减集群代理部署的大小时,Operator 会自动启动扩展控制器,并将信息迁移到仍在运行的代理 Pod 中。

  3. 在现有的代理部署中,验证哪些 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 本身,另一个用于部署中每个代理。

  4. 登录到每个 Pod 并向每个代理发送一些信息。

    1. 使 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
    2. 使 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 消息。

  5. 将集群从两个代理缩减到一个代理。

    1. 打开 main broker CR broker_activemqartemis_cr.yaml
    2. 在 CR 中,将 deploymentPlan.size 设置为 1
    3. 在命令行中应用更改:

      $ oc apply -f deploy/crs/broker_activemqartemis_cr.yaml

      您会看到 Pod ex-aao-ss-1 开始关闭。scaledown 控制器启动名称相同的新 drainer Pod。此排空 Pod 在将所有消息从代理 Pod ex-aao-ss-1 迁移到集群中的其他代理 Pod ex-aao-ss-0 后也会关闭。

  6. 关闭 drainer Pod 时,检查代理 Pod ex-aao-ss-0TEST 队列中的消息数。您会看到队列中的消息数量是 2000,这表示 drainer Pod 成功从已关闭的代理 Pod 中迁移了 1000 条信息。