使用 AWS Database Migration Service 升级您的 Amazon DocumentDB 集群 - Amazon DocumentDB

使用 AWS Database Migration Service 升级您的 Amazon DocumentDB 集群

重要

Amazon DocumentDB 的支持生命周期与 MongoDB 不同,MongoDB 的生命周期终止使用计划并不适用于 Amazon DocumentDB。Amazon DocumentDB 3.6 目前没有终止使用计划,您现有的 MongoDB 3.6 驱动程序、应用程序和工具将继续与 Amazon DocumentDB 配合使用。

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

步骤 1:启用变更流

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

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

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

步骤 2:修改变更流保留期限

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

步骤 3:迁移您的索引

在您的目标 Amazon DocumentDB 集群上创建与源 Amazon DocumentDB 集群相同的索引。尽管 AWS DMS 可以处理数据迁移,但其并不迁移索引。要迁移索引,请使用 Amazon DocumentDB 索引工具从源 Amazon DocumentDB 集群中导出索引。您可以通过创建 Amazon DocumentDB 工具 GitHub 存储库的克隆并按照README.md中的说明进行操作来获取该工具。您可以从 Amazon EC2 实例或与 Amazon DocumentDB 集群相同的 Amazon VPC 中的AWS 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:创建 AWS DMS 复制实例

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

创建 AWS DMS 复制实例:

  1. 打开 AWS 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 (公开访问),请启用此选项。

    图片:复制实例配置对话框显示 10 个可配置字段和按钮。
  4. 选择创建复制实例

步骤 5:创建一个 AWS DMS 源端点

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

创建源端点

  1. 打开 AWS 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-bundle 。对于 Import certificate file (导入证书文件),选择 Choose file (选择文件),然后导航到之前下载的 .pem 文件。选择并打开此文件。选择导入证书,然后rds-combined-ca-bundle选择证书下拉列表中选择

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

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

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

    图片:AWS DMS 源的端点配置对话框显示九个可配置字段和下拉菜单。
  4. 测试您的连接以验证其已成功设置。

    图片:AWS DMS 源的测试端点连接对话框显示两个下拉菜单、一个测试按钮和一列执行的测试。
  5. 选择 Create Endpoint(创建端点)。

注意

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

步骤 6:创建一个 AWS DMS 目标端点

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

创建目标端点:

  1. 打开 AWS 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-bundle 证书。

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

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

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

    图片:AWS DMS 目标的端点配置对话框显示九个可配置字段和下拉菜单。
  4. 测试您的连接以验证其已成功设置。

    图片:AWS DMS 目标的测试端点连接对话框显示两个下拉菜单、一个测试按钮和一列执行的测试。
  5. 选择 Create Endpoint(创建端点)。

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

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

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

  1. 打开 AWS DMS 管理控制台

  2. 在导航窗格中,选择数据库迁移任务

  3. 选择创建数据库迁移任务,然后在任务配置部分中输入以下信息:

    图片:迁移任务的任务配置对话框。
  4. 任务设置部分中输入以下信息:

    • 对于目标表准备模式部分,选择不执行任何操作。这将确保在步骤 3 中创建的索引不会被删除。

    • 任务日志子部分,选择打开 CloudWatch 日志

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

    • 选择创建数据库迁移任务

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

图片:迁移摘要对话框。

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

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

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