从 MongoDB 迁移至 Amazon DocumentDB

简介

在本教程中,您将把自托管的 MongoDB 数据库迁移至 Amazon DocumentDB(兼容 MongoDB)上的全托管数据库。首先,您将了解使用 Amazon DocumentDB 作为非关系型数据库的优势。然后,您将按照步骤将现有的 MongoDB 数据库迁移至 Amazon DocumentDB。完成本教程后,您应能够自如地将现有数据库迁移至 Amazon DocumentDB。

 时长

30-45 分钟

为什么使用 Amazon DocumentDB?

Amazon DocumentDB 是一项全托管的文档数据库服务。它与开源的 MongoDB 3.6 API 兼容,使您能够轻松地从自托管数据库迁移。

通过 Amazon DocumentDB,AWS 将负责管理您的数据库运维工作,让您的团队能够全身心投入创新。Amazon DocumentDB 可以处理集群扩展、实例故障转移、数据备份和软件更新。依托 AWS Cloud 的高效性,您可以使用速度更快、成本更低、可靠性更高的数据库服务。

教程内容

在本教程中,您将学习如何将自托管的 MongoDB 数据库迁移至 Amazon DocumentDB 上的全托管数据库。本教程分为五个步骤。

1. 创建 Amazon DocumentDB 数据库集群

在本模块中,您将创建一个 Amazon DocumentDB 数据库集群。使用 AWS DMS 将数据复制到此集群后,它将成为您的主数据库。

首先,请登录 DocumentDB 控制台。在 Clusters(集群)页面上,点击 Create(创建)创建一个新集群。

此操作将启动集群创建向导。在 Configuration(配置)部分,为集群指定一个名称。然后,选择集群的实例类型和实例数量。实例类型定义了实例的虚拟 CPU (vCPU) 数量和 RAM 容量。正确选择实例类型取决于多个因素,包括数据库所需的工作集内存量。选择与现有 MongoDB 部署资源相符的实例规格类型是个不错的切入点。

Amazon DocumentDB 集群需要至少一个实例作为主实例。主实例负责将数据写入集群,也可以处理读请求。额外的实例作为副本,可以处理读请求并充当故障转移目标。最佳做法是在生产环境的 Amazon DocumentDB 集群中部署至少三个实例(服务会自动将它们部署在三个可用区),因此在本练习中您可以保留三个实例的默认选择。

在当前的自托管 MongoDB 数据库中,您可能已经使用过分片功能将数据拆分到不同的分片中。MongoDB 分片通常用于在数据量增长时扩展存储。Amazon DocumentDB 使用不同的机制来扩展存储,所以您无需担心数据分片问题。您可以使用 AWS DMS 将现有的分片 MongoDB 数据库集群迁移至 Amazon DocumentDB 集群。

在 Authentication(身份验证)部分,输入 Amazon DocumentDB 集群的主账户用户名和密码。请务必保存此信息,以便对数据库集群进行身份验证。

您还需要为数据库集群配置一些其他设置,所以请选择向导底部附近的 Show advanced settings(显示高级设置)。

在高级设置中,有一个 Network settings(网络设置)部分。为 Amazon DocumentDB 集群选择 Amazon Virtual Private Cloud (Amazon VPC) 子网组和安全组。

如果您是从 Amazon Elastic Compute Cloud (Amazon EC2) 上的自托管 MongoDB 数据库进行迁移,则可沿用与现有 MongoDB 部署相同的 Amazon VPC 和安全组配置。

如果您要迁移的数据库没有托管在 AWS 上,而应用程序部署在 AWS 上,那么请选择应用程序所在的那个 Amazon VPC,然后再为数据库实例选择一个安全组。

如果您的实例没有安全组,可以创建一个。前往 Amazon EC2 控制台,进入 Security Groups(安全组)部分。点击 Create security group(创建安全组)以创建新的安全组。

为安全组指定名称和描述,然后选择要将安全组分配至的 VPC。

我们将在下一个模块中为安全组设置入站和出站规则。现在,您可以点击 Create security group(创建安全组)创建安全组。

为 Amazon DocumentDB 数据库集群配置网络设置后,点击 Create cluster(创建集群)创建您的 Amazon DocumentDB 数据库集群。

Amazon DocumentDB 开始预配您的数据库集群。集群现在的 Status(状态)应显示为 creating(创建中)。

当 Amazon DocumentDB 集群的存储卷准备就绪时,其状态将变为 available(可用)。

在导航窗格中点击 Instances(实例),将显示集群实例的状态。

当集群的 Writer(写入器)实例显示状态为 available(可用)时,您就可以进入下一个模块了(Reader(读取器)实例此时也可能变为可用)。

在本模块中,您创建了一个与 MongoDB 兼容的全托管 Amazon DocumentDB 数据库集群,可以立即用于生产环境。在下一个模块中,您将在 AWS Database Migration Service (AWS DMS) 中创建一个复制实例。

2. 在 AWS Database Migration Service (AWS DMS) 中创建复制实例

在本模块中,您将在 AWS DMS 中创建一个复制实例。

AWS DMS 可以将数据从多个不同的源数据库迁移至多个 AWS 托管数据库服务。AWS DMS 使用称为复制实例的 Amazon EC2 实例来托管负责迁移数据的复制任务。在下一个模块中,您将在此复制实例上设置复制任务。

要创建复制实例,首先前往 AWS DMS 控制台的 Replication instances(复制实例)界面。点击 Create replication instance(创建复制实例)以启动复制实例创建向导。

在 Replication instance configuration(复制实例配置)框中,输入复制实例的名称和描述,然后选择 Instance class(实例规格类型)。复制实例的规格类型需要根据现有数据库的大小和实例的数据传输量来决定。

然后选择 AWS DMS 的 Engine version(引擎版本)。最后,选择复制实例的 Allocated storage(分配的存储)容量。

在 Replication instance configuration(复制实例配置)界面中继续操作时,为复制实例选择一个 VPC。选择您预配 Amazon DocumentDB 数据库的同一个 VPC。

为了提高可用性,您可以考虑为复制实例设置 Multi-AZ(多可用区)部署。如果您计划长期使用 AWS DMS 保持两个数据库的同步,那么建议启用多可用区部署。但如果只是将现有数据库一次性迁移到 Amazon DocumentDB 全托管数据库中,则可以选择不使用多可用区设置以降低成本。

最后,选择您的复制实例是否需要启用 Publicly accessible(可公开访问)。如果现有数据库与 Amazon DocumentDB 集群和复制实例都位于同一 VPC 中,就不应开放复制实例的公共访问权限。如果源数据库位于 Amazon DocumentDB 集群的 VPC 之外,就需要开放复制实例的公共访问权限。

接下来,展开 Advanced security and network configuration(高级安全和网络配置)界面。对于 VPC security group(s)(VPC 安全组)配置,请选择您附加至 Amazon DocumentDB 数据库的相同安全组。这样做可以允许复制实例访问 Amazon DocumentDB 数据库。

此外,您还可以编辑 Maintenance(维护)和 Tags(标签)设置。

设置完成后,点击 Create(创建),在 AWS DMS 中创建复制实例。

点击 Create(创建)后,AWS 将预配复制实例。在 AWS 预配和初始化实例期间,复制实例的 Status(状态)会显示为 Creating(创建中)。

复制实例准备就绪后,其 Status(状态)会变为 Available(可用)。

在等待复制实例变为可用期间,前往 Amazon EC2 控制台中的 Security Groups(安全组)界面。您需要向安全组添加一条规则,以允许复制实例访问数据库。

在 Security Groups(安全组)界面中,找到并选中附加至 Amazon DocumentDB 数据库实例和复制实例的安全组。

点击 Edit inbound rules(编辑入站规则),编辑安全组的入站规则。

添加一条入站规则,以允许 27017 端口上来自安全组的 TCP 流量。

此时的操作界面应与以下截图类似。

点击 Save rules(保存规则),保存对安全组所做的规则更改。

当复制实例创建完成并且安全组规则也修改完毕后,我们就可以开始学习下一模块的内容了。

在本模块中,您在 AWS DMS 中创建了一个复制实例。该复制实例的作用是运行复制任务,把数据从现有的数据库迁移到 Amazon DocumentDB 的全托管数据库中。此外,您还更新了安全组,以允许从复制实例访问 Amazon DocumentDB 数据库集群。

在下一个模块中,您将学习如何为源数据库和目标数据库分别创建端点。

3. 在 AWS DMS 中创建端点

在本模块中,您将学习如何在 AWS DMS 中为复制任务分别创建源端点和目标端点。

所谓复制任务,就是使用 AWS DMS 把数据从一个数据库迁移到另一个数据库的作业。在创建复制任务前,必须先为源数据库和目标数据库分别注册端点。端点中定义了连接数据库所需的信息,包括连接地址、登录凭证等。

我们先来为目标数据库创建端点。目标数据库是您在 Amazon DocumentDB 中创建的数据库。前往 AWS DMS 控制台,点击左侧菜单的 Endpoints(端点)。点击 Create endpoint(创建端点),创建新的端点。

在端点创建向导中,点击 Target endpoint(目标端点)。

在 Endpoint configuration(端点配置)界面中,输入 Amazon DocumentDB 数据库集群的详细信息。您可以在 Amazon DocumentDB 控制台的 Clusters(集群)部分找到 Amazon DocumentDB 集群的连接信息。

如果在您的 Amazon DocumentDB 数据库集群上启用了传输层安全性 (TLS)(这是默认设置),则需要将 Secure Socket Layer (SSL) mode(安全套接字层 (SSL) 模式)设置为 verify-full。然后,下载 rds-combined-ca-bundle 文件。点击 Add new CA certificate(添加新 CA 证书),上传所下载的文件。有关此文件的更多信息,请参阅加密传输中的数据

Endpoint configuration(端点配置)界面应该如以下截图所示。

在保存端点设置前,最好先测试一下连接,以确保配置正确无误。要测试端点连接,展开 Test endpoint connection(测试端点连接)界面。

选择要进行测试的 Replication instance(复制实例),然后点击 Run test(运行测试)。几秒钟后,您应该能看到测试的 Status(状态)会变为 successful(成功)。这说明您的安全组和端点配置是正确的。点击 Create endpoint(创建端点)保存端点设置。

接着,重复上述步骤,为源数据库也创建一个端点。与目标数据库端点不同的是,源数据库端点的连接地址、端口号和登录凭证需要您自己填写。

此外,还要确保复制实例能够访问源数据库。如果您的源数据库托管在 Amazon EC2 上,请确保允许复制实例的安全组与源数据库的安全组之间进行网络通信。如果您的源数据库未托管在 Amazon EC2 上,则需要根据源数据库的位置来调整网络设置。

在继续学习下一个模块之前,应确保您已经成功配置了两个端点,分别用于源数据库和目标数据库。同时,务必测试这两个端点的连通性,确保它们都能成功连接到对应的数据库。完成这些步骤后,您可以继续学习下一个模块。

在本模块中,您创建了用于连接源、目标数据库所需的端点。在下一个模块中,您将使用这些端点创建一个复制任务,将数据从源数据库复制到目标数据库。

4. 在 AWS DMS 中创建复制任务

在本模块中,您将在 AWS DMS 中创建一个复制任务。

复制任务负责将数据从源数据库迁移至目标数据库。在本示例中,您要将数据从现有数据库迁移至新创建的 Amazon DocumentDB 集群中的数据库。

首先,前往 AWS DMS 控制台,点击左侧菜单的 Database migration tasks(数据库迁移任务)。然后点击 Create task(创建任务),创建新的复制任务。

在 Task configuration(任务配置)界面中,设置复制任务的各项参数。为任务命名,并选择在前一个模块中创建的复制实例。然后为现有 MongoDB 数据库选择源端点,并为 Amazon DocumentDB 中的全托管数据库选择目标端点。

此外还需要选择 Migration type(迁移类型)。AWS DMS 提供两种迁移类型:

1.Migrate existing data(迁移现有数据),用于执行一次性的全量数据复制,将源数据库中的所有数据复制到目标数据库。

2.Replicate ongoing changes(复制持续更改),用于捕获源数据库的所有后续变更,并将其同步到目标数据库。

如果要将应用程序从自托管数据库迁移至全托管数据库,则需要同时使用这两种类型。第一种类型会复制数据库中的所有现有数据,第二种类型可确保后续的增量变更同步到新的数据库,直到应用程序最终切换到新数据库。

对于 Migration type(迁移类型),选择 Migrate existing data and replicate ongoing changes(迁移现有数据并复制持续更改)。

在 Table mappings(表映射)界面中,配置要复制的数据库表。输入要复制的 Schema name(模式名)和 Table name(表名)。使用 MongoDB 时,Schema 属性是指要复制的 MongoDB 数据库,表属性是指要复制的 MongoDB 集合。您可以使用 % 作为通配符来匹配多个 Schema(模式)。

设置完成后,点击 Create task(创建任务),启动迁移任务。

创建完成后,该任务会显示在 Database migration tasks(数据库迁移任务)界面中,其 Status(状态)显示为 Creating(创建中)。

任务初始化后,其 Status(状态)会变为 Starting(正在启动)。

当现有数据迁移完成后,任务的 Status(状态)会变为 Load complete, replication ongoing(全量加载完成,增量复制进行中)。此时,源数据库的任何变更都会被实时同步到目标数据库。

在本模块中,您在 AWS DMS 中创建了一个复制任务,用于将现有数据从原有数据库迁移到 Amazon DocumentDB 的新数据库中,并持续同步源数据库之后的增量变更。

在下一个模块中,您将学习如何完成迁移并清理教程中创建的各种资源。

5. 完成迁移并清理资源

如果您遵循了本教程中的所有步骤,那么您已经创建了一个新的全托管 Amazon DocumentDB 集群,并创建了一个迁移任务,将数据从源数据库复制到新集群。在最后一个模块中,您将学习如何完成迁移,以及如何清理 AWS DMS 资源。

完成初始的全量迁移并将所有数据同步至新的数据库后,即可将新的数据库用作主数据库。

您可以采取以下两种方式:

  1. 如果您对迁移的效果很有信心,可以直接修改应用程序的数据库连接配置,让其连接到新的数据库。如此一来,所有的读写操作都会直接作用在新的数据库上。
  2. 如果您想更谨慎一些,也可以选择在一段时间内对新旧两个数据库同时进行读写操作。这种方式既可以在现有数据库中持续维护数据的准确性,也能让您比对两个数据库的查询结果,以验证数据的一致性。

无论您选择哪种切换方式,在新数据库正式成为主数据库之前,都应对其进行充分的测试。当应用程序完全切换到新的主数据库,并且您对迁移结果也完全满意后,就可以考虑删除 AWS DMS 的相关基础设施了。

首先,停止并删除用于复制数据的数据库迁移任务。前往 AWS DMS 控制台,点击左侧菜单的 Database migration tasks(数据库迁移任务)。选中要移除的任务,然后点击 Stop(停止)。

停止任务需要一些时间。任务停止后,再次将其选中,然后点击 Delete(删除)。

接下来,前往 AWS DMS 控制台,点击 Endpoints(端点)。同时选中源端点和目标端点,然后点击 Delete(删除)。

再点击左侧菜单的 Replication instances(复制实例)。如果复制实例未被用于任何其他复制任务,将其选中,然后点击 Delete(删除)。

最后,由于源数据库已经不再使用,您可能还需要将其终止。如果源数据库运行在 Amazon EC2 实例上,则可终止该 Amazon EC2 实例。如果您的源数据库在其他地方运行,请遵循适当的终止程序来操作。

在本模块中,您掌握了如何将应用程序迁移到新的数据库上。此外,您还掌握了如何在使用完 AWS DMS 资源后清理这些资源。

总结

总的来说,在本教程中,您使用 AWS DMS 成功地将一个现有的 MongoDB 数据库迁移至了 Amazon DocumentDB 中的全托管文档数据库。Amazon DocumentDB 可以让开发人员从繁琐的数据库运维工作中解放出来,全身心投入到业务创新中。另外,AWS DMS 可以帮您自动化执行将数据迁移到新数据库这个复杂的任务。

从 Apache Cassandra 迁移至 Amazon Keyspaces