查看原文
其他

大咖专栏 | 数据库迁移服务DMS——手把手教你玩转MongoDB到DynamoDB之间数据库迁移

2017-05-22 AWS云计算


大咖专栏

大咖专栏主要刊登亚马逊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服务


请感兴趣的小伙伴点击“阅读原文

或扫描/长按识别下方的二维码

阅读完整版文章


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存