HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

发布了 1848 篇内容, 共 114.0 次阅读, 收获喜欢 78 次。

关注

评论

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

云智慧智能运维算法技术黑板报 | 内容合集

云智慧AIOps社区

机器学习 大数据 智能运维 算法实践 技术专题合集

前端架构师的 git 功力,你有几成火候?

杨成功

git 架构师 GitFlow git 规范 签约计划第二季

在中国如何打造一个有生命力的开源项目?

Jianmu

DevOps 持续集成 CI/CD 开源社区 持续部署

阿里巴巴、埃森哲、德勤三方圆桌对话——《与数字化先锋共绘创新蓝图》

大咖说

阿里巴巴 大咖说 数字经济 数智化

Linux之rm命令

入门小站

Linux

卧槽!Spring中竟然有12种定义Bean的方法?

北游学Java

Java、 SP【ring

前端开发之cypress的自动化实践

@零度

前端 Cypress

大数据开发之数仓工具Hive(一)

@零度

大数据 hive 数仓工具

13. 《重学 JAVA》-- 抽象类和接口

杨鹏Geek

Java 25 周年 28天写作 12月日更

我也想说说日志,但是我不想说漏洞。

why技术

基于JSX的全新BDD工具 - Crius

RingCentral铃盛

存储空间降为原来的1/7,TDengine在中移物联网轨迹数据存储中的应用

TDengine

数据库 tdengine 时序数据库

iOS 开发者福音:iOS 项目也能支持 MQTT 5.0 啦!

EMQ映云科技

ios mqtt emq tvos osx

源码超度:String、StringBuffer、StringBuilder

无心水

StringBuilder StringBuffer String字符串

拥抱开源,共建生态!观测云 DataFlux-Func 代码全部开源

观测云

Linux一学就会之LVM管理和SSM存储管理器使用

学神来啦

Linux centos 运维 lvm linux云计算

在线JSON转flow工具

入门小站

工具

解析WeNet云端推理部署代码

华为云开发者联盟

gRPC 语音 PyTorch ASR WeNet

30个类手写Spring核心原理之AOP代码织入(5)

Tom弹架构

Java spring 源码

龙蜥社区一周动态 | 12.06-12.10

OpenAnolis小助手

龙蜥社区

【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

洛神灬殇

Spring Cloud api 网关 SpringCloud Gateway API Gateway 12月日更

观测云高分通过等保三级认证,信息安全体系建设领先行业

观测云

「可观测产品首发」观测云免费版正式上线!开箱即用,观测无限

观测云

深入浅出 Java 中枚举的实现原理

恒生LIGHT云社区

Java 编程语言 枚举

纯 Git 实现前端 CI/CD

杨成功

架构 前端 CI/CD 签约计划第二季

华为云消息队列服务荣获首个双擎可信云稳定性最高级认证

华为云开发者联盟

开源 安全 消息队列 可信云 DMS Kafka版

使用 scipy.fft 进行Fourier Transform:Python 信号处理

华为云开发者联盟

Python 音频 信号处理 傅立叶变换 Fourier transform

云原生时代,领域驱动设计思想(DDD)如何落地?

华为云开发者联盟

软件架构 架构设计 建模 领域驱动设计思想 领域模型

Android C++系列:Linux Socket编程(二)网络套接字函数

轻口味

28天写作 Android; 12月日更

百度搜索中“鱼龙混杂”的加盟信息,如何靠AI 解决?

百度Geek说

架构 AI 后端 百度搜索

30个类手写Spring核心原理之MVC映射功能(4)

Tom弹架构

Java spring 源码

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