阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

利用 AWS DMS 在线迁移 MongoDB 到 Amazon Aurora

  • 2019-09-25
  • 本文字数:3248 字

    阅读完需:约 11 分钟

利用 AWS DMS 在线迁移 MongoDB 到 Amazon Aurora

将数据从一种数据库迁移到另一种数据库通常都非常具有挑战性,特别是考虑到数据一致性、应用停机时间、以及源和目标数据库在设计上的差异性等因素。这个过程中,运维人员通常都希望借助于专门的数据迁移(复制)工具来降低操作的复杂性和对业务的影响。AWS 数据迁移服务(AWS DMS)可帮助 AWS 用户快速、安全、无缝地将 MongoDB、Oracle、MySQL 和 Microsoft SQL Server 等数据库迁移到 AWS。 源数据库在迁移期间仍然可以运行,因此最大程度地减少了依赖于数据库的应用程序的停机时间。


MongoDB 是一个流行的跨平台的面向文档的 NoSQL 数据库,拥有非常多的应用场景和很大的用户群体。但是某些情况下用户需要将 MongoDB 迁移或者复制到关系数据库,比如将文档数据从 MongoDB 复制到 MySQL 来进行复杂关连分析处理,或者由于在数据库选型方面分析不够,错选了数据库类型而需要迁移到关系数据库。


在本文中,我们将讨论将 MongoDB 4.0 数据平滑迁移到 Amazon Aurora MySQL 兼容版的方法。Amazon Aurora 是一种与 MySQL 和 PostgreSQL 兼容的关系数据库,专为云而打造,既具有传统企业数据库的性能和可用性,又具有开源数据库的简单性和成本效益。本文中描述的方法使用 AWS DMS 转换源数据,近乎零停机时间来执行迁移。

设置 MongoDB 4.0 源数据库

安装并配置MongoDB 4.0,然后将 standalone 的 MongoDB 转换成 replica set(rs),因为我们要进行的是 full load + CDC 的复制,DMS 需要访问 MongoDB 的操作日志(oplog),为了创建 oplog,需要部署一个 rs。

1.配置 yum,创建/etc/yum.repos.d/mongodb-org-4.0.repo,以便直接使用 yum 安装 MongoDB:

[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
复制代码

2.安装 MongoDB 包

sudo yum install -y mongodb-org
复制代码

3.配置 bindIP,MongoDB server 默认只允许 loopback 连接,为了允许从 VPC 或者 internet 连接,做以下设置:

a.编辑/etc/mongod.conf 文件,找到以下行:


# network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
复制代码


b.修改 bindIP 为 ec2 实例的 public IP 或者 private IP:


bindIp: x.x.x.x
复制代码


c.保存/etc/mongod.conf 文件,重启 mongod:


sudo service mongod restart
复制代码

4.将standalone的MongoDB转成replica set:

a.关闭 mongod 服务


service mongod stop
复制代码


b.重启 mongod:


mongod --port 27017 --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost,<hostname(s)|ip address(es)>
复制代码


用 hostname 和 ip 地址替换以上参数


c.用 mongo shell 连接 mongod:


mongo --host rs0/x.x.x.x:27017
复制代码


d.用 initate()初始化新的 replica set

5.向 MongoDB 里导入数据:

a.使用 wget 命令下载包含样例数据的 Json 文件


wget http://media.mongodb.org/zips.json
复制代码


b.使用 mongoimport 命令导入数据到一个新的数据库(zipsdb)


mongoimport --host rs0/x.x.x.x:27017 --db zipsdb --file zips.json
复制代码


c.检查导入的数据:


mongo --host rs0/x.x.x.x:27017
show dbs
use zipsdb
db.zips.count()
复制代码


到此为止,我们成功安装了 MongoDB 4.0 社区版,设置了 replica set 为 CDC 做准备,并且导入了测试数据到 zipsdb 数据库,数据库中有一个名为 zips 的 collection。

在 AWS 账号下启动一个 Aurora 集群,作为目标数据库

通过 AWS 控制台 launch 一个 Aurora MySQL 集群,具体参考创建数据库集群

利用 DMS 进行 MongoDB 在线迁移

将 MongoDB 用作源时,AWS DMS 支持两种迁移模式。用 AWS 管理控制台通过 Metadata mode (元数据模式) 参数指定迁移模式,或在创建 MongoDB 终端节点时指定额外的连接属性 nestingLevel。所选的迁移模式将影响目标数据的结果格式,如下所述。

文档模式:

在文档模式下,MongoDB 文档按“原样”迁移,这意味着文档数据将并入目标表中一个名为 _doc 的列中。文档模式是您将 MongoDB 用作源终端节点时的默认设置。

表模式:

在表模式中,AWS DMS 将 MongoDB 文档中的每个顶级字段转换为目标表中的一个列。如果有嵌套字段,则 AWS DMS 会将嵌套值平展到单个列中。随后,AWS DMS 将关键字段和数据类型添加到目标表的列集。


本文中使用表模式进行迁移,架构示意如下:


创建复制实例

AWS DMS 使用复制实例连接到源数据存储,读取源数据并设置数据格式以供目标数据存储使用。复制实例还会将数据加载到目标数据存储中。


AWS DMS 始终在基于 Amazon Virtual Private Cloud (Amazon VPC) 的 VPC 中创建复制实例。您可以指定复制实例所在的 VPC。可以使用您账户和 AWS 区域的默认 VPC,也可以创建新的 VPC。源和目标终端节点连接到 VPC 或者位于 VPC 内部,以此来访问位于 VPC 内部的复制实例。本文中源、目标数据库和复制实例在一个 VPC 内部,因此可以使用 private IP 连接。实例配置如下,可以根据 task 的大小选择合适的实例类型,对于重要的任务也可以使用 Multi AZ 部署方式。


以下屏幕截图是创建复制实例的示例:


创建源 MongoDB endpoint

以下屏幕截图创建一个源 endpoint 指向前面创建的 replica set 中的 zipsdb,Metadata mode 设置为 table。


创建目标 Aurora endpoint

以下屏幕截图创建了一个 target 类型的 endpoint,指向 Aurora 集群的 writer 节点。


创建迁移任务

创建 DMS 迁移任务,指定源端点为前面创建的源 MongoDB 端点“mongo-rs”,任务类型为“migrating existing data and replicate ongoning changes”,打开 cloudwatch 日志便于诊断任务执行情况。


在 Table mappings 部分,选通过 selection rules 设置需要复制的 schema 和 table,在 transformation rules 里设置如何改变/转换 schema,table 或者 column。在下面任务设置截图里,通过 selection rules,选择将源 MongoDB 里的 zipsdb.zips 表箱目标 Aurora 库里复制。


跟踪任务运行情况

Full load


任务启动之后很快进入“Load complete,replication ongoing”状态,表示完成了 full load,进入持续复制阶段。



以上屏幕截图显示当前已经完成了 29353 行数据的 full load。让我们在源、目标端验证一下。


源端记录总数:



目标端复制后的 database 和 table,以及记录总数:



经过 full load 之后,目标端 Aurora 中已经复制了 MongoDB 的 database 和 collection 到相应的 database 和 table,一条 document 对应 zips 表里的一行。


CDC


在源 MongoDB 我们进行以下 CRUD 操作,然后在目标端 Aurora MySQL 确认同步情况。


1.新增一条记录到 zips 表:



在 Aurora 检查该文档复制情况:



2.在 MongoDB 更新该文档:



在目标端 Aurora MySQL 确认同步情况:



3.在源端 delete 该文档:



在目标端 MySQL 表中确认记录删除:



DMS 任务复制统计数据


可以发现,源端所做的 DML(2 Insert,2 Deletes,2 Updates)已经被实时捕获并复制到目标端。

总结

本文我们讨论了使用 AWS DMS 进行连续数据捕获(CDC)近乎实时的复制最新版本的 MongoDB 4.0 的文档数据到 Aurora MySQL 兼容版的表中。截至目前 AWS DMS 官方文档中虽然声明只支持 MongoDB 2.6.x 和 3.x,但是本文的演示证明 AWS DMS 对 MongoDB 4.0 也是完美支持的。如果有复杂的关连分析需求,使用 DMS 将 MongoDB 的文档实时复制到 Aurora MySQL 将使您可以借助关系数据库弥补 MongoDB 在这个方面的不足,亦或者您需要在 MongoDB 向关系数据库迁移的过程中保持业务系统在线,尽可能降低停机时间,DMS 的 CDC 功能可让您的迁移过程举重若轻。


作者介绍:


汪允璋


AWS 解决方案架构师。负责基于 AWS 的云计算方案架构的咨询和设计,致力于 AWS 云服务在国内和全球的应用和推广,目前主攻数据库和大数据方面的研究。在加入 AWS 前,拥有多年外企售前及运营商 IT 架构、运维经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/use-aws-dms-mongodb-amazon-aurora/


2019-09-25 17:08693
用户头像

发布了 1835 篇内容, 共 91.6 次阅读, 收获喜欢 73 次。

关注

评论

发布
暂无评论
发现更多内容

六年 Android 开发的涨薪之路,从15K涨到30K的面试解析

android 程序员 移动开发

删除calico换成flannel后,容器没有正常启动

ilinux

做了6年的Android,靠着这份900多页的PDF面试整理,薪资Double!

android 程序员 移动开发

加入 node 后 flannel 报错

ilinux

初探 Android 组件化,四个步骤把握组件化核心要领

android 程序员 移动开发

关于Android内存泄漏的那些事

android 程序员 移动开发

几年开发两茫茫,且看我给你分析ContentProvider

android 程序员 移动开发

删除/var/lib/cni更换网络插件但是kubernetes没有正常启动

ilinux

六年老Android开发,突遇公司搬离上海无赔偿,我该怎么办?

android 程序员 移动开发

动态加载 so 注意事项&案例

android 程序员 移动开发

前端开发:JS中 indexOf() 方法的使用

android 程序员 移动开发

副本 Kubernetes之POD、容器之间的网络通信

android 程序员 移动开发

再见!杭州!再见!阿里巴巴

android 程序员 移动开发

分分钟带你读懂-ButterKnife-的源码

android 程序员 移动开发

关于QPS高并发,你了解多少?

android 程序员 移动开发

图解Pandas的排名rank机制

Peter

Python 数据分析 pandas

全新Android-Material-组件你在用了吗?

android 程序员 移动开发

全网独家盘点Android热修复方案(含阿里巴巴、美团、腾讯等

android 程序员 移动开发

关于listView(列表)的各种使用方法

android 程序员 移动开发

关于内存泄漏和内存溢出的那些事!

android 程序员 移动开发

凭你的技术“你能做个淘宝、微信吗?

android 程序员 移动开发

加快APK构建速度,如何一步步把编译时间从130秒降到17秒以内

android 程序员 移动开发

使用协程优化你的业务

android 程序员 移动开发

像奥利奥一样的双重安全措施,尽在 Android Oreo

android 程序员 移动开发

勤勤恳恳做到30岁,3名百度 ,京东,腾讯的高级Android工程师被辞退了

android 程序员 移动开发

关于提高编程思维与工作效率的总结

android 程序员 移动开发

再见吧 buildSrc, 拥抱 Composing builds 提升 Android 编译速度

android 程序员 移动开发

凭借这938页Android面试题合集,拿下了滴滴、美团、携程

android 程序员 移动开发

分享十次Android面试经验总结,已收字节,阿里,小米等offer

android 程序员 移动开发

gitlab-runner出现too many connections

ilinux

全面解析Android进阶面试常客之Handler

android 程序员 移动开发

利用 AWS DMS 在线迁移 MongoDB 到 Amazon Aurora_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章