回滚至先前 KCL 版本 - Amazon DynamoDB

回滚至先前 KCL 版本

本主题介绍如何将使用者应用程序回滚到先前 KCL 版本。回滚过程由两个步骤组成:

  1. 运行 KCL Migration Tool

  2. 重新部署以前的 KCL 版本代码。

步骤 1:运行 KCL 迁移工具

当需要回滚到先前 KCL 版本时,必须运行 KCL 迁移工具。此工具可执行两个重要任务:

  • 它在 DynamoDB 中的租约表上移除一个名为工作线程指标表的元数据表和全局二级索引。这些构件由 KCL 3.x 创建,但在回滚到先前版本时并不需要。

  • 它使所有工作线程均在与 KCL 1.x 兼容的模式下运行,并开始使用先前 KCL 版本中使用的负载均衡算法。如果 KCL 3.x 中的新负载均衡算法存在问题,这将立即缓解问题。

重要

DynamoDB 中的协调器状态表必须存在,并且在迁移、回滚和前滚过程中不得删除。

注意

重要的是,使用者应用程序中的所有工作线程在给定时间均使用相同的负载均衡算法。KCL 迁移工具可确保 KCL 3.x 使用者应用程序中的所有工作线程都切换到 KCL 1.x 兼容模式,以便在应用程序回滚到先前 KCL 版本期间,所有工作线程都运行相同的负载均衡算法。

您可以在 KCL GitHub 存储库的 scripts 目录中下载 KCL Migration Tool。从具有相应权限的工作线程或主机运行脚本,以写入协调器状态表、工作线程指标表和租约表。确保为 KCL 使用者应用程序配置了适当的 IAM permissions。使用指定的命令对每个 KCL 应用程序仅运行一次脚本:

python3 ./KclMigrationTool.py --region region --mode rollback [--application_name applicationName] [--lease_table_name leaseTableName] [--coordinator_state_table_name coordinatorStateTableName] [--worker_metrics_table_name workerMetricsTableName]

参数

--region

区域替换为您的 AWS 区域。

--application_name

如果您为 DynamoDB 元数据表(租约表、协调器状态表和工作线程指标表)使用默认名称,则需要此参数。如果您为这些表指定了自定义名称,则可以忽略此参数。将 applicationName 替换为实际的 KCL 应用程序名称。如果未提供自定义名称,该工具将使用此名称来派生默认表名称。

--lease_table_name

如果您在 KCL 配置中为租约表设置了自定义名称,则需要此参数。如果您使用的是默认表名称,则可以忽略此参数。将 leaseTableName 替换为您为租约表指定的自定义表名称。

--coordinator_state_table_name

如果您在 KCL 配置中为协调器状态表设置了自定义名称,则需要此参数。如果您使用的是默认表名称,则可以忽略此参数。将 coordinatorStateTableName 替换为您为协调器状态表指定的自定义表名称。

--worker_metrics_table_name

如果您在 KCL 配置中为工作线程指标表设置了自定义名称,则需要此参数。如果您使用的是默认表名称,则可以忽略此参数。将 workerMetricsTableName 替换为您为工作线程指标表指定的自定义表名称。

步骤 2:使用先前 KCL 版本重新部署代码

重要

在 KCL 迁移工具生成的输出中提及版本 2.x 的任何内容都应解释为指的是 KCL 版本 1.x。运行该脚本不会执行完全回滚,它只会将负载均衡算法切换到 KCL 版本 1.x 中使用的算法。

运行 KCL 迁移工具来进行回滚后,您将看到以下消息之一:

消息 1

“回滚已完成。应用程序正在运行 2x 兼容功能。请使用先前 KCL 版本部署代码,以回滚到先前的应用程序二进制文件。”

所需操作:这意味着工作线程正在 KCL 1.x 兼容模式下运行。使用先前 KCL 版本将代码重新部署到工作线程。

消息 2

“回滚已完成。KCL 应用程序正在运行 3x 功能,并将回滚到 2x 兼容功能。如果您在短时间内看不到缓解,请使用先前 KCL 版本部署代码,回滚到先前的应用程序二进制文件。”

所需操作:这意味着工作线程正在 KCL 3.x 模式下运行,KCL 迁移工具已将所有工作线程切换到 KCL 1.x 兼容模式。使用先前 KCL 版本将代码重新部署到工作线程。

消息 3

“应用程序已经回滚。任何可以删除的 KCLv3 资源都被清理以免产生费用,直至应用程序可以通过迁移进行前滚。”

所需操作:这意味着工作线程已经回滚到在 KCL 1.x 兼容模式下运行。使用先前 KCL 版本将代码重新部署到工作线程。