QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

利用 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:08854
用户头像

发布了 1856 篇内容, 共 128.8 次阅读, 收获喜欢 81 次。

关注

评论

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

语聊APP出海中东,Yalla、WePlay、YoYo、SoulChill、YoHo 中东语聊APP的关键成功因素

山东布谷科技胡月

语音厅平台搭建 语音厅源码 语音直播平台开发 语聊APP源码 语音聊天室APP

GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化

我再BUG界嘎嘎乱杀

Python 编程 数据分析 后端 开发语言

再升级!MoneyPrinterPlus集成GPT_SoVITS

程序那些事

工具 AIGC

深圳堡垒机生产经营公司哪家靠谱?选哪家好?

行云管家

网络安全 堡垒机 深圳

Python使用asyncio包实现异步编程方式

我再BUG界嘎嘎乱杀

Python 编程 后端 异步编程 开发语言

苹果apple音乐制作软件:Logic Pro X for Mac v10.8.1中文版

Rose

AI 机器人对家长培育孩子好性格有帮助吗?——数业智能心大陆给出答案

心大陆多智能体

育儿 智能体 AI大模型 心理健康 数字心理

Charles for Mac注册激活版:轻松地捕获分析修改HTTP、HTTPS和TCP流量

Rose

互联网主机监控与审计系统是堡垒机吗?两者有什么区别吗?

行云管家

网络安全 运维‘

Python数据分析:数据可视化(Matplotlib、Seaborn)

我再BUG界嘎嘎乱杀

Python 编程 数据分析 后端 数据可视化

淘宝商品描述API:深度解析HTML格式内容的策略与技巧

代码忍者

API 接口 API 测试

好用的 NTFS 磁盘管理器NTFS Disk by Omi NTFS for mac

Rose

SwitchResX for Mac 轻松调整苹果电脑显示器配置参数

Rose

Clicker for YouTube mac版 YouTube视频播放器客户端

Rose

高效的AirPods耳机管理工具 AirBuddy for Mac v2.6.3汉化版

Rose

Stata 15 for Mac(强大的数据分析计算软件)v15.1永久激活版

Rose

代理IP在跨境出海业务中的应用

IPIDEA全球HTTP

代理IP 跨境电商 出海

百万级超长序列大模型训练如何加速,硬核解读MindSpeed方案

华为云开发者联盟

大模型 #人工智能 企业号 8 月 PK 榜 企业号2024年8月PK榜

传智教育引通义灵码进课堂,为技术人才教育学习提效

阿里巴巴云原生

阿里云 云原生 通义灵码

Go语言中使用 sqlx 来操作 MySQL

左诗右码

Go 语言

mac触摸板增强工具BetterTouchTool下载 附BetterTouchTool注册码

Rose

【永久破解版】MAMP PRO (本地Web服务器开发环境) mac&win

Rose

Memecoin的火爆与AMM在Solana上的主导地位

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

重塑精准营销新纪元:深度解析拍立淘API与用户画像构建的融合之道

代码忍者

API Explorer API 接口 API 测试

中大型集团数字化转型常用软件,电子签章领域契约锁领先行业

Geek_2a38d5

万界星空科技服装行业MES系统解决方案

万界星空科技

工业互联网 制造业 服装行业 mes 万界星空科技

传智教育引通义灵码进课堂,为技术人才教育学习提效

阿里云云效

阿里云 云原生 通义灵码

通义灵码:AI 研发趋势与效果提升实践丨SDCon 全球软件技术大会演讲全文整理

阿里巴巴云原生

阿里云 AI 云原生 通义灵码

Wi-Fi 7 Technology IPQ5332 vs. IPQ9574: Comparison of Core Chips for Industrial Routers

wifi6-yiyi

WiFi7 ipq9574

智能搜索,Paste for Mac让你快速找到需要的剪切板内容!

Rose

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