MongoDB 数据同步、升级及迁移
mongosync简单讲,主要用于Mongodb数据同步及迁移。
通过mongosync可以完成以下任务:
1、数据迁移。无需开启oplog,无需停主库,功能类似mongodump,mongorestore。
mongosync -h 172.16.57.26:1002
--to 172.16.57.27:1111
2、数据库升级迁移。可以将老版本的数据,通过mongosync同步至新版本的库中,基本实现零停机升级迁移,功能类似OGG。
3、数据同步备份
具体mongosync使用说明:
1、前提条件
1)源库必须为Primary状态(否者不能增量同步);
2)源库必须是2.6版本及以下
附:目标库版本不限,经测试,目前3.2.4版本的库也可以使用
2、操作步骤
1)如果源库有slave备库,请跳过该步骤。
A)如果源库是单点,并且config文件中没有加入replSet参数:
在config文件中添加replSet参数
vi mongodb-m.conf
replSet = rs1
B) 重启源库
C)配置源库,开启OPLOG
> use local
switched to db local
> rs.initiate()
{
"info2" : "no configuration
explicitly specified -- making one",
"me" : "n1:1002",
"info" : "Config now saved
locally. Should come online in about a
minute.",
"ok" : 1
}
> db.oplog.rs.find()
{ "ts" : Timestamp(1459842450,
1), "h" : NumberLong(0), "v" : 2, "op" : "n", "ns" : "", "o" : {
"msg" : "initiating set" } }
rs1:PRIMARY>
rs1:PRIMARY>
rs.status()
{
"set" : "rs1",
"date" :
ISODate("2016-04-05T07:47:58Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "n1:1002",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 44,
"optime" :
Timestamp(1459842450, 1),
"optimeDate" :
ISODate("2016-04-05T07:47:30Z"),
"self" : true
}
],
"ok" : 1
}
此时可以看到源库的oplog已经开启,并有数据记录
2)配置同步
A)任意节点或者服务器上配置mongosync
B)开启实时同步
mongosync -h 172.16.57.26:1002
--to 172.16.57.27:1111 --oplog
C)如果因某种原因,需要断开同步,等再次开启同步时,需要指定OPtime,optime可以在主库执行rs.status()查看。
但是,这里只能通过日志查看。
根据mongosync后台日志,记录断开时的optime:1459850295,1
Tue Apr 5 18:01:48.243 [mongosync] synced up to
1459850295,1 (Apr 5 17:58:15 57038c37:1), source
has up to 1459850295,1 (Apr 5 17:58:15
57038c37:1), fully synced.
Tue Apr 5 18:01:48.244 [mongosync] waiting for
new data...
Tue Apr 5 18:01:58.266 [mongosync] synced up to
1459850295,1 (Apr 5 17:58:15 57038c37:1), source
has up to 1459850295,1 (Apr 5 17:58:15
57038c37:1), fully synced.
Tue Apr 5 18:01:58.266 [mongosync] waiting for
new data...
然后指定-s进行同步(部署时,最好将日志记录到文件中,方便查看optime)
vi mongosync.sh
LOG=/opt/mongodb/mongosync/sync.log
/opt/mongodb/mongosync/mongosync -h
172.16.57.26:1002 --to 172.16.57.27:1111 --oplog
-s 1459850295,1 --fork >>$LOG
./mongosync.sh
输出日志:
connected to: 172.16.57.26:1002
Tue Apr 5 18:04:02.778 [mongosync]
172.16.57.26:1002 connected ok
Tue Apr 5 18:04:02.778 [mongosync]
172.16.57.27:1111 connected ok
Tue Apr 5 18:04:02.779 [mongosync] lastOp
OpTime:1459850642,15357 (Apr 5 18:04:02
57038d92:3bfd)
Tue Apr 5 18:04:02.779 [mongosync] begin to apply
oplog...
Tue Apr 5 18:04:35.772 [mongosync] synced up to
1459850295,1 (Apr 5 17:58:15 57038c37:1), source
has up to 1459850675,11951 (Apr 5 18:04:35
57038db3:2eaf), 380 seconds behind source.
Tue Apr 5 18:04:45.773 [mongosync] synced up to
1459850589,21588 (Apr 5 18:03:09 57038d5d:5454),
source has up to 1459850685,23645 (Apr 5 18:04:45
57038dbd:5c5d), 96 seconds behind source.
Tue Apr 5 18:04:55.792 [mongosync] synced up to
1459850611,33574 (Apr 5 18:03:31 57038d73:8326),
source has up to 1459850695,25704 (Apr 5 18:04:55
57038dc7:6468), 84 seconds behind source.
Tue Apr 5 18:05:05.815 [mongosync] synced up to
1459850632,37386 (Apr 5 18:03:52 57038d88:920a),
source has up to 1459850705,24739 (Apr 5 18:05:05
57038dd1:60a3), 73 seconds behind source.
Tue Apr 5 18:05:15.851 [mongosync] synced up to
1459850672,14641 (Apr 5 18:04:32 57038db0:3931),
source has up to 1459850715,26318 (Apr 5 18:05:15
57038ddb:66ce), 43 seconds behind source.
加载中,请稍候......