本文为您提供了从 Amazon DynamoDB 迁移数据至 Tair Serverless KV(DynamoDB 兼容版)的详尽操作步骤和最佳实践。
迁移流程概述
整个迁移过程通过 dynamo-shake 工具实现,分为三大阶段:全量数据同步、增量数据同步和业务切流。工具首先通过并行扫描(Scan)将源端表的存量数据完整迁移至目标端;随后,利用 DynamoDB Streams 功能实时捕获源端表的数据变更(增、删、改),并同步到目标端,确保数据最终一致。当两端数据同步延迟极低时,即可执行最后的业务切换。
准备工作
在开始迁移前,请确保您已完成以下准备工作:
-
获取迁移工具:下载迁移工具包dynamo-shake。
-
获取数据一致性校验工具:下载数据一致性校验工具包dynamo-full-check.tar.gz。压缩包包含校验工具二进制文件、差异报告分析脚本
analyze_report.py以及 README 文档。 -
目标端(Tair)准备:
-
实例创建:已创建 Tair Serverless KV(DynamoDB 兼容版)实例。
-
表结构创建:在目标 Tair 实例中,预先创建与源端 DynamoDB 表结构(包括主键、排序键等)完全一致的表。详情请参考创建 Tair DynamoDB 实例并新建表。
-
-
源端(AWS DynamoDB)准备:
-
获取访问凭证:获取用于访问 AWS DynamoDB 的 AccessKey ID 和 Secret Access Key。
-
开启 DynamoDB Streams:为需要迁移的源端表开启 DynamoDB Streams 功能。这是实现增量同步的关键。
重要Stream 视图类型:必须配置为 New image 或 New and old images。
生效时间:开启 Stream 后不会立即生效,通常需要等待几分钟。
-
-
运行环境准备:
-
准备一台服务器(推荐使用阿里云 ECS)用于运行迁移工具 dynamo-shake。
-
确保该服务器已配置好网络访问策略(如安全组),可以访问源端 AWS DynamoDB,并能通过 VPC 内网或公网访问目标端 Tair(DynamoDB 兼容版)实例。
-
迁移步骤
-
将下载的 dynamo-shake 工具包上传至准备好的 ECS 服务器并解压。
-
在工具包目录下,创建名为 shake.toml 的配置文件,并根据您的环境填入以下内容:
# 源端 AWS DynamoDB 配置 [dynamo_reader] # endpoint_url 为空时必须填写 region = "us-east-1" # AWS 官方端点可留空 endpoint_url = "" # 访问 AWS 的 AccessKey ID access_key_id = "YOUR_AWS_ACCESS_KEY_ID" # 访问 AWS 的 Secret Access Key secret_access_key = "YOUR_AWS_SECRET_ACCESS_KEY" # 需要迁移的源端表名 table = "MySourceTable" # 是否开启断点续传,建议保持 true checkpoint_enabled = true checkpoint_file_path = "checkpoint.json" # 拉取全量数据的并行度,提高此值可加速全量同步,但会增加源端读取开销 scan_segments = 4 # 目标端 Tair for DynamoDB 配置 [dynamo_writer] # 目标端 Tair 实例的连接地址 endpoint = "https://xxx.tairskvddb.rds.aliyuncs.com:443" # 目标端 Tair 实例的认证凭证,格式为 "账号:密码" access_key_id = "YOUR_TAIR_ACCOUNT:YOUR_TAIR_PASSWORD" # 固定填写 "dummy" secret_access_key = "dummy" # 目标端表名 table = "MyTargetTable"重要认证方式:请特别注意,Tair(DynamoDB 兼容版)的认证方式与 AWS 不同。
access_key_id字段需要填写为"账号:密码"的组合字符串。 -
启动迁移任务:执行以下命令启动工具,并观察运行日志。
./dynamo-shake shake.toml工具启动后,会首先进入 Scan 阶段(全量同步),完成后自动进入 Stream 阶段(增量同步)。
说明日志中显示的费用(cost)是工具基于 AWS DynamoDB 美国东部(弗吉尼亚北部)地域的定价,对 Scan 和 Stream 产生的资源消耗进行的预估,仅作为成本参考。
-
数据验证与业务切流:
-
监控同步状态:当日志显示 dynamo-shake 已进入并稳定运行在 Stream 增量同步阶段,且同步 QPS 与源端业务写入 QPS 大致持平时,表明增量数据已基本追平。
-
数据一致性校验:推荐使用 dynamo-full-check.tar.gz工具进行全量数据一致性校验。工具会依次执行表结构检查(验证主键、排序键及本地二级索引一致性)和数据校验(并行扫描源端表数据,逐条与目标端比对)。将工具包上传至 ECS 服务器并解压后,创建
full_check.toml配置文件:check_mode = "source" # 以源端数据为基准校验 [source] access_key_id = "AKIAxxxxxxxxxxxx" secret_access_key = "xxxxxxxxxxxxxxxxxxxxxxxx" region = "us-east-1" # endpoint_url 为空时必须填写 endpoint_url = "" # AWS 官方端点可留空 table = "source_table" [target] access_key_id = "username:password" # 格式:账号:密码 secret_access_key = "" # 阿里云可不填 region = "us-east-1" # endpoint_url 为空时必须填写 endpoint_url = "http://your-tair-endpoint:80" # 阿里云必须填写 table = "target_table"执行以下命令启动校验:
./dynamo-full-check -c full_check.toml校验开始后,工具会自动创建
dynamo-full-check-diff目录,并在该目录下生成差异报告文件report.json。校验结束后,可通过工具包中的analyze_report.py脚本生成 HTML 可视化报告:python analyze_report.py dynamo-full-check-diff/report.json说明当
check_mode设置为source时,仅校验源端数据在目标端是否存在且一致,无法检测目标端存在但源端不存在的数据。如需校验该类情况,请将check_mode设置为target并重新执行一次工具。 -
停止业务写入:在计划的业务切换窗口,暂停向源端 DynamoDB 表写入数据的所有应用服务。
-
确认同步完成:观察 dynamo-shake 的日志,等待增量同步的 QPS 下降并稳定为 0。这标志着所有在途数据均已同步完毕。
-
切换业务流量:将您的应用程序配置指向新的 Tair 实例,然后重新启动服务。至此,迁移完成。
-
常见问题(FAQ)
-
Q:启动任务时出现 Stream 相关报错。
A:这通常由以下两种情况导致:
-
场景一:刚为源表开启 Stream 功能就立即启动迁移任务。此时 AWS DynamoDB Stream 服务可能尚未完全就绪。
解决方案:等待几分钟后,重新尝试启动 dynamo-shake。 -
场景二:任务中断一段时间后,再次启动时出现 Stream Shard 过期或找不到的错误。
解决方案:这可能是由于断点信息已失效。您可以删除工具目录下的 checkpoint.json 文件,然后重新启动任务。警告删除 checkpoint.json 文件将导致工具从头开始进行全量数据同步。这会消耗更多的时间和源端读取资源。请仅在确认断点无法恢复时使用此方法。
-
-
Q:日志显示写入 Tair 失败。
A:请按以下步骤排查:
-
检查认证信息:确认 shake.toml 配置文件中 dynamo_writer 部分的 access_key_id 是否严格遵循
"账号:密码"的格式。 -
检查网络白名单:确保运行 dynamo-shake 工具的服务器的 IP 地址,已被添加到目标 Tair 实例的访问白名单中。
-
-
Q:如何提高迁移速度?
A:迁移速度主要受全量同步阶段影响。您可以通过调高 shake.toml 配置文件中的 scan_segments 参数来提高数据拉取的并行度。增加此值可以显著加快全量同步,但也会增加源端 DynamoDB 表的读取压力和成本(消耗更多 RCU)。请根据源表的 RCU 配置和业务负载情况,适当调整此参数。