使用升级您的亚马逊文档数据库集群 Amazon Database Migration Service - Amazon DocumentDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用升级您的亚马逊文档数据库集群 Amazon Database Migration Service

重要

亚马逊 DocumentDB 的支持生命周期与 MongoDB 不同,MongoDB 的时间表不适用于亚马逊 Docum end-of-life entDB。目前没有亚马逊 DocumentDB 3.6 的计划,您现有的 MongoDB 3.6 驱动程序、应用程序和工具将继续与亚马逊 DocumentDB 配合使用。 end-of-life

您可以使用将您的 Amazon DocumentDB 集群升级到更高的版本,同时最大限度地减少停机时间。 Amazon DMS Amazon DMS 是一项完全托管的服务,可以轻松地从较旧的 Amazon DocumentDB 版本、关系数据库和非关系数据库迁移到您的目标 Amazon DocumentDB 集群。

步骤 1:启用更改流

要最大限度地缩短停机时间迁移, Amazon DMS 需要访问集群的变更流。 Amazon DocumentDB 更改流 提供在集群的集合和数据库中发生的按时间顺序排列的更新事件序列。通过从变更流中读取,可以 Amazon DMS 执行变更数据捕获 (CDC),并将增量更新应用于目标 Amazon DocumentDB 集群。

要为特定数据库上的所有集合启用更改流,请使用 mongo Shell 对您的 Amazon DocumentDB 集群进行身份验证并执行以下命令:

db.adminCommand({modifyChangeStreams: 1, database: "db_name", collection: "", enable: true});

步骤 2:修改更改流日志保留期限的步骤

接下来,根据您希望在更改流中保留变更事件的时长来修改更改流保留期。例如,如果您预计使用 Amazon DMS 的 Amazon DocumentDB 集群迁移需要 12 个小时,则应将更改流保留时间设置为大于 12 小时的值。Amazon DocumentDB 集群的默认保留期为三小时。您可以使用 Amazon Web Services Management Console 或将 Amazon DocumentDB 集群的更改流日志保留期限修改为一小时到七天之间。 Amazon CLI有关更多详细信息,请参阅修改更改流日志保留期。

步骤 3:迁移您的索引

在您的目标 Amazon DocumentDB 集群上创建与源 Amazon DocumentDB 集群相同的索引。尽管它 Amazon DMS 可以处理数据的迁移,但它不迁移索引。要迁移索引,请使用 Amazon DocumentDB 索引工具从源 Amazon DocumentDB 集群中导出索引。您可以通过创建 Amazon DocumentDB 工具 GitHub 存储库的克隆版并按照中的说明进行操作来获取该工具。README.md您可以从亚马逊 EC2 实例或与您的亚马逊文档数据库集群运行在同一 Amazon VPC 中的 Amazon Cloud9 环境中运行该工具。

在以下示例中,将每个用户输入占位符替换为您自己的信息。

以下代码从您的源 Amazon DocumentDB 集群中转储索引:

python migrationtools/documentdb_index_tool.py --dump-indexes --uri mongodb://sample-user:user-password@sample-source-cluster.node.us-east 1.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false' --dir ~/index.js/ 2020-02-11 21:51:23,245: Successfully authenticated to database: admin2020-02-11 21:46:50,432: Successfully connected to instance docdb-40-xx.cluster-xxxxxxxx.us-east-1.docdb.amazonaws.com:27017 2020-02-11 21:46:50,432: Retrieving indexes from server...2020-02-11 21:46:50,440: Completed writing index metadata to local folder: /home/ec2-user/index.js/

成功导出索引后,即可在目标 Amazon DocumentDB 集群中还原这些索引。要还原您在上一步中所导出的索引,请使用 Amazon DocumentDB 索引工具。以下命令将从指定目录还原目标 Amazon DocumentDB 集群中的索引。

python migrationtools/documentdb_index_tool.py --restore-indexes --uri mongodb://sample-user:user-password@sample-destination-cluster.node.us-east 1.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false' --dir ~/index.js/ 2020-02-11 21:51:23,245: Successfully authenticated to database: admin2020-02-11 21:51:23,245: Successfully connected to instance docdb-50-xx.cluster-xxxxxxxx.us-east-1.docdb.amazonaws.com:27017 2020-02-11 21:51:23,264: testdb.coll: added index: _id

要确认您已正确还原索引,请使用 mongo Shell 连接到您的目标 Amazon DocumentDB 集群,并列出给定集合的索引。参见以下代码:

mongo --ssl --host docdb-xx-xx.cluster-xxxxxxxx.us-east-1.docdb.amazonaws.com:27017 --sslCAFile rds-ca-2019-root.pem --username documentdb --password documentdb db.coll.getIndexes()

步骤 4:创建 Amazon DMS 复制实例

Amazon DMS 复制实例连接您的源 Amazon DocumentDB 集群并从中读取数据,然后将其写入您的目标 Amazon DocumentDB 集群。 Amazon DMS 复制实例可以执行批量加载和 CDC 操作。大部分这种处理发生在内存中。但是,大型事务可能需要部分缓冲到磁盘上。缓存事务和日志文件也会写入磁盘。迁移数据后,复制实例还将流式传输所有更改事件,以确保源和目标保持同步。

要创建 Amazon DMS 复制实例,请执行以下操作:

  1. 打开控制 Amazon DMS

  2. 在导航窗格中,选择复制实例

  3. 选择 Create replication instance (创建复制实例),并输入以下信息:

    • 对于 Name(名称),输入您选定的名称。例如,docdb36todocdb40

    • 对于 Description (描述),输入事件的描述。对于 listitem,Amazon DocumentDB 3.6 至 Amazon DocumentDB 4.0 的复制实例。

    • 对于实例类,请根据需要选择大小。

    • 对于引擎版本,请选择3.4.1.

    • 对于 Amazon VPC,请选择存放源集群和目标 Amazon DocumentDB 集群的 Amazon VPC。

    • 对于已分配存储(GiB),请使用默认值 50 GiB。如果工作负载的写入吞吐量较高,请增加此值以匹配您的工作负载。

    • 对于多可用区,如果您需要高可用性和失效转移支持,请选择

    • 对于 Publicly accessible (公开访问),请启用此选项。

  4. 选择创建复制实例

步骤 5:创建 Amazon DMS 源端点

源终端点用于源 Amazon DocumentDB 集群。

创建源端点

  1. 打开控制 Amazon DMS

  2. 在导航窗格中,选择端点

  3. 选择 Create endpoint 并输入以下信息:

    • 对于 Endpoint type (端点类型),请选择 Source (源)

    • 对于 Endpoint identifier (端点标识符),请输入容易记住的名称,例如 docdb-source

    • 对于源引擎,请选择 docdb

    • 对于 Server name (服务器名称),请输入您的 Amazon DocumentDB 集群的 DNS 名称。

    • 对于 Port (端口),请输入您的 Amazon DocumentDB 集群的端口号。

    • 对于 SSL mode (SSL 模式),请选择 verify-full

    • 对于 CA 证书,请选择添加新 CA 证书。下载、新 CA 证书以创建 TLS 连接捆绑。然后,对于 Certificate identifier (证书标识符),输入 rds-combined-ca-cn-bundle。对于 Import certificate file (导入证书文件),选择 Choose file (选择文件),然后导航到之前下载的 .pem 文件。选择并打开此文件。选择导入证书,然后rds-combined-ca-bundle选择证书下拉列表中选择

    • 用户名中,输入您的源 Amazon DocumentDB 集群的主用户名。

    • 对于密码,请输入您的源 Amazon DocumentDB 集群的主密码。

    • 对于数据库名称,请输入要升级的数据库名称。

  4. 测试您的连接以验证其已成功设置。

  5. 选择创建端点

注意

Amazon DMS 一次只能迁移一个数据库。

步骤 6:创建 Amazon DMS 目标终端节点

目标端点用于您的目标 Amazon DocumentDB 集群。

创建目标端点:

  1. 打开Amazon DMS 控制台

  2. 在导航窗格中,选择端点

  3. 选择 Create endpoint (创建端点),然后输入以下信息:

    • 对于 Endpoint type (端点类型),请选择 Target (目标)

    • 对于 Endpoint identifier (端点标识符),请输入容易记住的名称,例如 docdb-target

    • 对于源引擎,请选择 docdb

    • 对于 Server name (服务器名称),请输入您的 Amazon DocumentDB 集群的 DNS 名称。

    • 对于 Port (端口),请输入您的 Amazon DocumentDB 集群的端口号。

    • 对于 SSL mode (SSL 模式),请选择 verify-full

    • 对于 CA 证书,请从选择证书下拉列表中选择现有 rds-combined-ca-cn-bundle证书。

    • 用户名中,输入您的目标 Amazon DocumentDB 集群的主用户名。

    • 密码中,输入您的目标 Amazon DocumentDB 集群的主密码。

    • 对于数据库名称,请输入与源端点设置相同的数据库名称。

  4. 测试您的连接以验证其已成功设置。

  5. 选择创建端点

步骤 7:创建并运行迁移任务

Amazon DMS 任务会将复制实例与您的源实例和目标实例绑定。创建迁移任务时,需要指定源终结点、目标终结点、复制实例和任何所需的迁移设置。可以用三种不同的迁移类型创建 Amazon DMS 任务:迁移现有数据、迁移现有数据、复制正在进行的更改或仅复制数据更改。由于本演练的目的是在最短停机时间内升级 Amazon DocumentDB 集群,因此这些步骤利用该选项来迁移现有数据和复制正在进行的更改。使用此选项,可以在迁移现有数据时 Amazon DMS 捕获更改。 Amazon DMS 即使加载了批量数据,仍会继续捕获和应用更改。最终,源数据库和目标数据库将保持同步,从而实现停机时间最少的迁移。

以下是创建迁移任务以实现最短停机时间迁移的步骤:

  1. 打开控制 Amazon DMS

  2. 在导航窗格中,选择任务

  3. 选择 Create task (创建任务),然后输入以下信息:

  4. “任务设置” 部分,启用CloudWatch 日志

  5. 表映射部分,选择不执行任何操作。这将确保在步骤 3 中创建的索引不会被删除。

  6. 对于迁移任务启动配置,请选择创建时自动启动。创建迁移任务后,将自动启动迁移任务。

  7. 选择创建任务

Amazon DMS 现在开始将数据从您的源 Amazon DocumentDB 集群迁移到您的目标 Amazon DocumentDB 集群。任务状态从 Starting (正在启动) 更改为 Running (正在运行)。您可以通过在 Amazon DMS 控制台中选择 “任务” 来监控进度。几分钟/小时后(取决于迁移的大小),状态应从 变为加载完成,复制正在进行中。这意味着 Amazon DMS 已完成从您的源 Amazon DocumentDB 集群到目标 Amazon DocumentDB 集群的满负荷迁移,现在正在复制更改事件。

最终,您的源和目标将保持同步。您可以通过对集合运行 count() 操作来验证所有更改事件是否已迁移,从而验证其是否处于同步状态。

步骤 8:将应用程序端点更改为目标 Amazon DocumentDB 集群

完成完全加载并且 CDC 流程持续复制后,您即可将应用程序的数据库连接端点从源 Amazon DocumentDB 集群更改为目标 Amazon DocumentDB 集群。