使用 AWS Database Migration Service 将 Amazon DocumentDB 集群从 3.6 升级到 4.0

您可以使用 Amazon DocumentDB 将 AWS DMS 3.6 集群升级到 4.0,同时最大程度地减少停机时间。AWS DMS 是一种完全托管的服务,让您能够轻松地将关系数据库和非关系数据库迁移到 Amazon DocumentDB。

步骤 1:启用变更流

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

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

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

步骤 2:修改变更流保留持续时间

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

步骤 3:迁移索引

在 Amazon DocumentDB 4.0 集群上创建与 Amazon DocumentDB 3.6 集群上相同的索引。虽然 AWS DMS 处理数据的迁移,但它不会迁移索引。要迁移索引,请使用 Amazon DocumentDB 索引工具从 Amazon DocumentDB 3.6 集群中导出索引。您可以通过创建 Amazon DocumentDB 工具 GitHub 存储库的克隆并按照README.md中的说明操作来获取该工具。 您可以从与您的 Amazon EC2 集群在相同 AWS Cloud9 中运行的 Amazon VPC 实例或 Amazon DocumentDB 环境运行该工具。

以下代码将转储 Amazon DocumentDB v3.6 集群中的索引:

  1. python migrationtools/documentdb_index_tool.py --dump-indexes
  2. --dir ~/index.js/
  3. --host docdb-36-xx.cluster-xxxxxxxx.us-west-2.docdb.amazonaws.com:27017
  4. --tls --tls-ca-file ~/rds-ca-2019-root.pem
  5. --username user
  6. --password <password>
  7. 2020-02-11 21:51:23,245: Successfully authenticated to database: admin
  8. 2020-02-11 21:46:50,432: Successfully connected to instance docdb-36-xx.cluster-xxxxxxxx.us-west-2.docdb.amazonaws.com:27017
  9. 2020-02-11 21:46:50,432: Retrieving indexes from server...
  10. 2020-02-11 21:46:50,440: Completed writing index metadata to local folder: /home/ec2-user/index.js/

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

  1. python migrationtools/documentdb_index_tool.py --restore-indexes
  2. --dir ~/index.js/
  3. --host docdb-40-xx.cluster-xxxxxxxx.us-west-2.docdb.amazonaws.com:27017
  4. --tls --tls-ca-file ~/rds-ca-2019-root.pem
  5. --username user
  6. --password <password>
  7. 2020-02-11 21:51:23,245: Successfully authenticated to database: admin
  8. 2020-02-11 21:51:23,245: Successfully connected to instance docdb-40-xx.cluster-xxxxxxxx.us-west-2.docdb.amazonaws.com:27017
  9. 2020-02-11 21:51:23,264: testdb.coll: added index: _id

要确认您正确地还原了索引,请使用 mongo shell 连接到 Amazon DocumentDB 4.0 集群,并列出给定集合的索引。请参阅以下代码:

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

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

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

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

  1. 打开 AWS DMS 控制台

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

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

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

    • 对于 Description (描述),请输入您选择的描述。对于列表项,为 Amazon DocumentDB 3.6 到 Amazon DocumentDB 4.0 复制实例。

    • 对于 Instance class (实例类),根据您的需求选择大小。

    • 对于 Engine version (引擎版本),选择 3.4.1.

    • 对于 Amazon VPC,选择包含 Amazon VPC 3.6 和 4.0 集群的 Amazon DocumentDB。

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

    • 对于 Multi-AZ (多可用区),如果您需要高可用性和故障转移支持,请选择 Yes (是)

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

    在版本之间迁移 - 图1

  4. 选择创建复制实例

步骤 5:创建 AWS DMS 源终端节点

源终端节点用于要升级到 4.0 的 Amazon DocumentDB 3.6 集群。

创建源终端节点

  1. 打开 AWS DMS 控制台

  2. 在导航窗格中,选择 Endpoints (Client VPN 终端节点)

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

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

    • &gt;对于 Endpoint identifier (终端节点标识符),输入一个容易记住的名称,例如 docdb-source

    • 对于 Source engine (源引擎),选择 docdb

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

    • 对于 Port (端口),输入 Amazon DocumentDB v3.6 集群的端口号。

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

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

    • 对于 Username (用户名),输入您的 Amazon DocumentDB v3.6 集群的主用户名。

    • 对于 Password (密码),输入 Amazon DocumentDB v3.6 集群的主密码。

    • 对于 Database name (数据库名称),输入您要升级的数据库名称。

    在版本之间迁移 - 图2

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

    在版本之间迁移 - 图3

  5. 选择 Create Endpoint

注意

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

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

目标终端节点适用于您的 Amazon DocumentDB 4.0 集群。

创建目标终端节点:

  1. 打开 AWS DMS 控制台

  2. 在导航窗格中,选择 Endpoints (Client VPN 终端节点)

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

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

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

    • 对于 Source engine (源引擎),选择 docdb

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

    • 对于 Port (端口),输入 Amazon DocumentDB v4.0 集群的端口号。

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

    • 对于 CA certificate (CA 证书),请从 rds-combined-ca-bundleChoose a certificate (选择证书) 下拉列表中选择现有 证书。

    • 对于 Username (用户名),输入您的 Amazon DocumentDB v4.0 集群的主用户名。

    • 对于 Password (密码),输入 Amazon DocumentDB v4.0 集群的主密码。

    • 对于 Database name (数据库名称),输入您用于设置源终端节点的相同数据库名称。

    在版本之间迁移 - 图4

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

    在版本之间迁移 - 图5

  5. 选择 Create Endpoint

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

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

以下是为停机时间最少的迁移创建迁移任务的步骤:

  1. 打开 AWS DMS 控制台

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

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

    在版本之间迁移 - 图6

  4. Task Settings (任务设置) 部分中,启用 CloudWatch logs (CloudWatch 日志)

  5. 对于 Table mappings (表映射) 部分,保留所有内容的默认设置。这将确保迁移数据库中的所有集合。

  6. 对于 Migration task startup (迁移任务启动) 配置,选择 utomaticly on create (创建时以编程方式)。这将在创建迁移任务后自动启动该任务。

  7. 选择创建任务

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

在版本之间迁移 - 图7

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

步骤 8:将应用程序终端节点更改为 Amazon DocumentDB 集群 4.0

在完全加载完成并且 CDC 过程持续复制后,您已准备好将应用程序的数据库连接终端节点从 Amazon DocumentDB 3.6 集群更改为 Amazon DocumentDB 集群 4.0 集群。