DynamoDB 数据迁移指南

更新时间:
复制为 MD 格式

本文为您提供了从 Amazon DynamoDB 迁移数据至 Tair Serverless KV(DynamoDB 兼容版)的详尽操作步骤和最佳实践。

迁移流程概述

整个迁移过程通过 dynamo-shake 工具实现,分为三大阶段:全量数据同步增量数据同步业务切流。工具首先通过并行扫描(Scan)将源端表的存量数据完整迁移至目标端;随后,利用 DynamoDB Streams 功能实时捕获源端表的数据变更(增、删、改),并同步到目标端,确保数据最终一致。当两端数据同步延迟极低时,即可执行最后的业务切换。

image

准备工作

在开始迁移前,请确保您已完成以下准备工作:

  1. 获取迁移工具:下载迁移工具包dynamo-shake

  2. 获取数据一致性校验工具:下载数据一致性校验工具包dynamo-full-check.tar.gz。压缩包包含校验工具二进制文件、差异报告分析脚本 analyze_report.py 以及 README 文档。

  3. 目标端(Tair)准备

    • 实例创建:已创建 Tair Serverless KV(DynamoDB 兼容版)实例。

    • 表结构创建:在目标 Tair 实例中,预先创建与源端 DynamoDB 表结构(包括主键、排序键等)完全一致的表。详情请参考创建 Tair DynamoDB 实例并新建表

  4. 源端(AWS DynamoDB)准备

    • 获取访问凭证:获取用于访问 AWS DynamoDB 的 AccessKey ID 和 Secret Access Key。

    • 开启 DynamoDB Streams:为需要迁移的源端表开启 DynamoDB Streams 功能。这是实现增量同步的关键。

      重要

      Stream 视图类型:必须配置为 New imageNew and old images
      生效时间:开启 Stream 后不会立即生效,通常需要等待几分钟。

  5. 运行环境准备

    • 准备一台服务器(推荐使用阿里云 ECS)用于运行迁移工具 dynamo-shake。

    • 确保该服务器已配置好网络访问策略(如安全组),可以访问源端 AWS DynamoDB,并能通过 VPC 内网或公网访问目标端 Tair(DynamoDB 兼容版)实例。

迁移步骤

  1. 将下载的 dynamo-shake 工具包上传至准备好的 ECS 服务器并解压。

  2. 在工具包目录下,创建名为 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 字段需要填写为 "账号:密码" 的组合字符串。

  3. 启动迁移任务:执行以下命令启动工具,并观察运行日志。

    ./dynamo-shake shake.toml

    工具启动后,会首先进入 Scan 阶段(全量同步),完成后自动进入 Stream 阶段(增量同步)。

    迁移工具运行日志示例

    说明

    日志中显示的费用(cost)是工具基于 AWS DynamoDB 美国东部(弗吉尼亚北部)地域的定价,对 Scan 和 Stream 产生的资源消耗进行的预估,仅作为成本参考。

  4. 数据验证与业务切流

    1. 监控同步状态:当日志显示 dynamo-shake 已进入并稳定运行在 Stream 增量同步阶段,且同步 QPS 与源端业务写入 QPS 大致持平时,表明增量数据已基本追平。

    2. 数据一致性校验:推荐使用 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 并重新执行一次工具。

    3. 停止业务写入:在计划的业务切换窗口,暂停向源端 DynamoDB 表写入数据的所有应用服务。

    4. 确认同步完成:观察 dynamo-shake 的日志,等待增量同步的 QPS 下降并稳定为 0。这标志着所有在途数据均已同步完毕。

    5. 切换业务流量:将您的应用程序配置指向新的 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 配置和业务负载情况,适当调整此参数。