

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

# 使用升级您的亚马逊文档数据库集群 AWS Database Migration Service
<a name="docdb-migration.versions"></a>

**重要**  
亚马逊 DocumentDB 的支持生命周期与 MongoDB 不同，MongoDB 的时间表不适用于亚马逊 Docum end-of-life entDB。

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

**Topics**
+ [步骤 1：启用变更流](#docdb-migration.versions-step1)
+ [步骤 2：修改变更流保留期限](#docdb-migration.versions-step2)
+ [步骤 3：迁移您的索引](#docdb-migration.versions-step3)
+ [步骤 4：创建 AWS DMS 复制实例](#docdb-migration.versions-step4)
+ [步骤 5：创建 AWS DMS 源终端节点](#docdb-migration.versions-step5)
+ [步骤 6：创建 AWS DMS 目标终端节点](#docdb-migration.versions-step6)
+ [步骤 7：创建并运行迁移任务](#docdb-migration.versions-step7)
+ [步骤 8：将应用程序端点更改为目标 Amazon DocumentDB 集群](#docdb-migration.versions-step8)

## 步骤 1：启用变更流
<a name="docdb-migration.versions-step1"></a>

要最大限度地缩短停机时间迁移， AWS DMS 需要访问集群的变更流。[ Amazon DocumentDB 变更流 ](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html#change_streams-enabling) 提供在集群的集合和数据库中发生的按时间顺序排列的更新事件序列。通过从变更流中读取，可以 AWS DMS 执行变更数据捕获 (CDC)，并将增量更新应用于目标 Amazon DocumentDB 集群。

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

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

## 步骤 2：修改变更流保留期限
<a name="docdb-migration.versions-step2"></a>

接下来，根据您希望在变更流中保留变更事件的时长来修改变更流保留期。例如，如果您预计使用 AWS DMS 的 Amazon DocumentDB 集群迁移需要 12 个小时，则应将更改流保留时间设置为大于 12 小时的值。Amazon DocumentDB 集群的默认保留期为三小时。您可以使用 AWS 管理控制台 或将 Amazon DocumentDB 集群的更改流日志保留期限修改为一小时到七天之间。 AWS CLI有关更多详细信息，请参阅[修改变更流日志保留期。](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html#change_streams-modifying_log_retention)

## 步骤 3：迁移您的索引
<a name="docdb-migration.versions-step3"></a>

在您的目标 Amazon DocumentDB 集群上创建与源 Amazon DocumentDB 集群相同的索引。尽管它 AWS DMS 可以处理数据的迁移，但它不迁移索引。要迁移索引，请使用 Amazon DocumentDB 索引工具从源 Amazon DocumentDB 集群中导出索引。您可以通过创建 Amazon DocumentDB 工具 GitHub 存储库的克隆版并按照中的说明进行操作来获取该工具。[https://github.com/awslabs/amazon-documentdb-tools/blob/master/index-tool/README.md](https://github.com/awslabs/amazon-documentdb-tools/blob/master/index-tool/README.md)您可以从亚马逊 EC2 实例或与您的亚马逊文档数据库集群运行在同一 Amazon VPC 中的 AWS Cloud9 环境中运行该工具。

在以下示例中，将每个 *user input placeholder* 替换为您自己的信息。

以下代码从您的源 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 复制实例
<a name="docdb-migration.versions-step4"></a>

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

**要创建 AWS DMS 复制实例，请执行以下操作：**

1. 打开控制 AWS DMS [台](https://console.aws.amazon.com/dms/v2)。

1. 在导航窗格中，选择**复制实例**。

1. 选择 **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 个可配置字段和按钮。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/replication-instance-config.png)

1. 选择**创建复制实例**。

## 步骤 5：创建 AWS DMS 源终端节点
<a name="docdb-migration.versions-step5"></a>

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

**创建源端点**

1. 打开控制 AWS DMS [台](https://console.aws.amazon.com/dms/v2)。

1. 在导航窗格中，选择**端点**。

1. 选择 `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 证书](https://truststore.pki.rds.amazonaws.com/global/global-bundle.p7b)、以创建 TLS 连接捆绑。然后，对于 **Certificate identifier (证书标识符)**，输入 `rds-combined-ca-bundle` 。对于 **Import certificate file (导入证书文件)**，选择 **Choose file (选择文件)**，然后导航到之前下载的 `.pem` 文件。选择并打开此文件。选择**导入证书**，然后`rds-combined-ca-bundle`从**选择证书**下拉列表中选择
   + 对于**用户名**，请输入您的源 Amazon DocumentDB 集群的主用户名。
   + 对于**密码**，请输入您的源 Amazon DocumentDB 集群的主密码。
   + 对于**数据库名称**，请输入要升级的数据库名称。  
![\[图片：显示九个可配置字段和下拉菜单的 AWS DMS 源端点配置对话框。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/endpoint-config.png)

1. 测试您的连接以验证其已成功设置。  
![\[图片： AWS DMS 源的 “测试端点连接” 对话框显示两个下拉菜单、一个测试按钮和已执行测试的列表。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/test-endpoint-config.png)

1. 选择**创建端点**。

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

## 步骤 6：创建 AWS DMS 目标终端节点
<a name="docdb-migration.versions-step6"></a>

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

**创建目标端点：**

1. 打开 [AWS DMS 控制台](https://console.aws.amazon.com/dms/v2)。

1. 在导航窗格中，选择**端点**。

1. 选择 **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 目标端点配置对话框显示九个可配置字段和下拉菜单。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/target-endpoint-config.png)

1. 测试您的连接以验证其已成功设置。  
![\[图片： AWS DMS 目标的 “测试端点连接” 对话框显示两个下拉菜单、一个测试按钮和已执行测试的列表。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/test-target-endpoint.png)

1. 选择**创建端点**。

## 步骤 7：创建并运行迁移任务
<a name="docdb-migration.versions-step7"></a>

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

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

1. 打开控制 AWS DMS [台](https://console.aws.amazon.com/dms/v2)。

1. 在导航窗格中，选择**数据库迁移任务**。

1. 选择**创建数据库迁移任务**，然后在**任务配置**部分中输入以下信息：
   + 对于**端点标识符**，请输入容易记住的名称，例如 `my-dms-upgrade-task`。
   + 对于**描述性 Amazon 资源名称（ARN）**，输入一个用户友好名称以覆盖默认 DMS ARN。
   + 对于 **Replication instance (复制实例)**，请选择您在 [步骤 4：创建 AWS DMS 复制实例](#docdb-migration.versions-step4) 中创建的复制实例。
   + 对于**源数据库端点**，选择您在 [步骤 5：创建 AWS DMS 源终端节点](#docdb-migration.versions-step5) 中创建的源端点。
   + 对于**目标端点**，选择您在 [步骤 6：创建 AWS DMS 目标终端节点](#docdb-migration.versions-step6) 中创建的目标端点。
   + 对于**迁移类型**，选择**迁移和复制**。  
![\[图片：迁移任务的任务配置对话框。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/task-config.png)

1. 在**任务设置**部分中输入以下信息：
   + 对于**目标表准备模式**部分，选择**不执行任何操作**。这将确保在步骤 3 中创建的索引不会被删除。
   + 在 “**任务日志**” 子部分中，选择 “**开启日 CloudWatch 志**”。
   + 对于**迁移任务启动配置**，选择**创建时自动启动**。创建迁移任务后，将自动启动迁移任务。
   + 选择**创建数据库迁移任务**。

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

![\[图片：迁移摘要对话框。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/migration-load-complete.png)


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

## 步骤 8：将应用程序端点更改为目标 Amazon DocumentDB 集群
<a name="docdb-migration.versions-step8"></a>

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