大咖专栏 | 数据库迁移服务DMS——手把手教你玩转MongoDB到DynamoDB之间数据库迁移
大咖专栏
大咖专栏主要刊登亚马逊AWS诸位大咖亲自撰写的Blog,内容涉猎广泛,话题讨论前沿,且与实战紧密相连。我们非常欢迎小伙伴们在评论区留言,与大咖互动交流!
今天为大家撰文的大咖,是我们的AWS解决方案架构师——王友升老师。
王友升
AWS解决方案架构师
王友升拥有超过13年的IT从业经验,负责基于AWS的云计算方案架构咨询和设计,推广AWS云平台技术和各种解决方案。在加入AWS之前,王友升曾在中地数码,浪潮,惠普等公司担任软件开发工程师、DBA和解决方案架构师。他在服务器、存储、数据库优化方面拥有多年的经验,同时对大数据、Openstack及AI方面也进行一定的研究和积累。
AWS最近刚刚宣布了一项关于数据库迁移的新Feature,支持MongoDB数据库作为源端,迁移到目标端Dynamodb中,这样可以使MongoDB的用户充分利用DynamoDB数据库提供的技术优势,譬如完全托管服务、高性能低延迟(毫秒级)、精细化粒度控制等等。由于最近项目中涉及很多数据库迁移的事情,同时也对NoSQL数据库异构平台迁移非常感兴趣,写了这篇文档供大家参考。
DMS服务介绍
DMS作为数据迁移服务支持下面三种迁移类型:
· 迁移源库中存在的数据到目标库
· 迁移源库中存在的数据并且复制新增加的数据到目 标库
· 只复制新增加的数据库
数据迁移时源端和目标端设置
· MongoDB作为源端
AWS DMS支持MongoDB作为源端的版本为2.6.x和3.0.x,MongoDB 作为一个基于文档存储的数据库,数据模式非常灵活,支持JSON和BJSON格式进行存储。当前AWS DMS 支持MongoDB作为源端以两种模式进行迁移,它们分别是文档模式和表模式。在文档模式中,需要设置参数extractDocID=true和nestingLevel=none,在复制时不支持collection的重命名。在表模式中需要启用表模式需要设置nestingLevel=one,另外在选择CDC时它不支持添加新的collection和重名collection。
· DynamoDB作为目标端
使用Dynamodb作为目标端时需要配置partion key和Object mapping。
具体注意事项请参考官方文档链接:
http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html
配置步骤
1.安装MongoDB
安装MongoDB的方式有多种方法,可以选择Marketplace或者AWS提供的cloudformation以及手动下载MongoDB软件进行安装,我选择手动安装MongoDB 2.6.12版本。
a. 登录EC2,获取如下软件:
ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org_2.6.12_amd64.deb
ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org-mongos_2.6.12_amd64.deb
ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org-tools_2.6.12_amd64.deb
ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org-server_2.6.12_amd64.deb
ubuntu@ip-172-31-60-214:~$ wget http://downloads-distro.mongodb.org/repo/ubuntu-upstart/dists/dist/10gen/binary-amd64/mongodb-org-shell_2.6.12_amd64.deb
b. 安装软件包:
ubuntu@ip-172-31-60-214:~$ sudo dpkg -i mongodb-org*
c. 创建数据目录和日志目录:
ubuntu@ip-172-31-60-214:~$ sudo mkdir /data /log
d. 启动MongoDB数据库服务:
ubuntu@ip-172-31-60-214:~$ sudo mongod –dbpath /data –logpath /log/mongodb.log –smallfiles –oplogSize 50 –fork
打开mongodb的shell, 验证服务启动成功。
ubuntu@ip-172-31-60-214:~$ mongo
MongoDB shell version: 2.6.12
connecting to: test
如下图所示:
2.通过脚本生成数据
for (var i = 1; i <= 793308; i++) {
db.testData.insert( { x : i , name: "MACLEAN" , name1:"MACLEAN", name2:"MACLEAN", name3:"MACLEAN"} )
db.contacts.insert( { name: "Amanda", status:
"Updated" } )
db.contacts.insert( { name: "tom", status: "Updated" } )
db.contacts.insert( { name: "jack", status: "Updated" } )
db.contacts.insert( { name: "jack1", status: "Updated" } )
db.contacts.insert( { name: "steph", status: "Updated" } )
3.验证数据生成
运行如下命令:
4.配置MongoDB的副本集
a. 启动MongoDB数据库数据库
ubuntu@ip-172-31-60-214:~$ sudo mongod –dbpath /data –replSet rs0 –logpath /log/mongodb.log –smallfiles –oplogSize 50 -fork
如下图:
b. 登录到MongoDB中,进行副本的初始化
ubuntu@ip-172-31-60-214:~$ mongo localhost
MongoDB shell version: 2.6.12
connecting to: localhost
>
rs.initiate()
如下图所示:
c. 验证部署配置
> rs.conf()
d.创建管理员角色
rs0:PRIMARY> use admin
switched to db admin
rs0:PRIMARY> db.createUser(
… {
… user: “root”,
… pwd: “rootpass”,
… roles: [ { role: “root”, db: “admin” } ]
… }
… )
如下图所示:
e. 停止MongoDB,然后重启MongoDB
ubuntu@ip-172-31-60-214:~$ sudo mongod –dbpath /data –replSet rs0 –logpath /log/mongodb.log –smallfiles –oplogSize 50 -fork –auth
如下图所示:
至此,MongoDB的数据库准备工作完成。
在接下来的内容里,我们会介绍:
如何使用Global账号登录到DMS服务
请感兴趣的小伙伴点击“阅读原文”
或扫描/长按识别下方的二维码
阅读完整版文章