AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

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

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

关注

评论

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

解决流水线瓶颈、提升编码效率的五个方法(下篇)

龙智—DevSecOps解决方案

ci cicd 持续集成 CI/CD

共铸国云智领未来| 智慧医疗乘“云”而上!

天翼云开发者社区

微服务 - 搭建Consul集群服务,Consul配置中心

Java你猿哥

Java 架构 微服务 ssm

看了这份《算法中文手册》笔记,就再也不怕字节了

Java你猿哥

Java 算法 ssm 字节 左程云

无惧百万级并发,GaussDB(for Cassandra)让华为推送服务更快触达

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

从热爱到深耕,全国Top10开源软件出品人手把手教你如何做开源

华为云开发者联盟

开源 华为云 华为云开发者联盟 企业号 4 月 PK 榜

太牛了,这是我见过把微服务讲的最全最好的SpringCloud架构进阶

Java你猿哥

Java 架构 微服务 微服务架构 Spring Cloud

《挪威的森林》

后台技术汇

三周年连更

mysql 8.0 安装区别

追赶者

MySQL

太强了!京东架构师独家微服务笔记,啃完直入字节

Java 架构 微服务 Spring Cloud

CV 领域的 ChatGPT?MetaAI 推出“最强”大视觉模型 SAM

Zilliz

计算机视觉 ChatGPT metaai 大视觉模型

Java最佳实践

码语者

Java

当推荐和搜索遇上大模型,会碰撞出什么样的火花

小红书技术REDtech

推荐 搜索 小红书

一文读懂火山引擎数智平台VeDI新品——管理驾驶舱Plus

字节跳动数据平台

企业管理 实时决策 企业号 4 月 PK 榜

硬件工程师常见问题与答疑

华秋PCB

科普 工程师 电子信息 基础知识 电子

数字先锋| 乘“云”之势,天翼云助力长春市妇产医院步入智慧医疗新时代!

天翼云开发者社区

博睿数据蝉联中国APM市场份额第一,Bonree ONE春季正式版重磅发布

博睿数据

可观测性 智能运维 博睿数据 ONE有引力

玩转云端| 算力基础设施升级,看天翼云紫金DPU显身手!

天翼云开发者社区

玩转云端| 真实模拟,即压即测,天翼云息壤性能测试PTS实践大揭秘!

天翼云开发者社区

Spring Boot定时任务@Scheduled的多线程使用

Java Spring Boot 多线程 Scheduled

小红书高时效推荐系统背后的技术升级

小红书技术REDtech

推荐 小红书

演示视频:Jira企业微信插件邀您一起迈入移动办公时代,高效处理Jira Issue

龙智—DevSecOps解决方案

Jira 企业微信

css-文字充电效果

格斗家不爱在外太空沉思

CSS css动画 三周年连更

Git推出大文件储存工具Git LFS,但它真的好用吗?

龙智—DevSecOps解决方案

git 版本控制 版本控制系统

小米集团Jira实战:如何在高负载状态下保持Jira性能与运行稳定

龙智—DevSecOps解决方案

非常全面的 SpringBoot 保姆级笔记,面面俱到,太牛了

Java Spring Boot

日志服务运维观测能力,助力新零售容器化部署升级

云布道师

存储

Arctic 自动优化湖仓原理解析

网易数帆

数据湖 iceberg Arctic 湖仓一体

开启新时代,承接新使命,开放原子开源大赛OpenHarmony创新赛正式启航!

OpenHarmony开发者

OpenHarmony

深入理解 Go 语言中的封装机制

宇宙之一粟

Go 封装 三周年连更

云智慧助力MLOps加速落地

云智慧AIOps社区

人工智能 机器学习 智能运维 自动化运维 算法模型

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