mongodb主从备份

来源:互联网 发布:程序员的职业发展 编辑:程序博客网 时间:2024/05/22 13:17

http://www.dev-club.net/xiangxixinxi/1087122010072906124317/201107260532452.html


这里在简单的介绍一下Master Slave/ Replica Sets 备份机制,这两种模式都是基于主服务器的oplog来实现所有从服务器的同步。

oplog记录了增删改操作的记录信息(不包含查询的操作),但是oplog有大小限制,当超过指定大小,oplog会清空之前的记录,重新开始记录。(太坑爹了!!!)
Master Slave 方式 主服备器会产生 oplog.$main 的日志集合
Replica Sets 
方式 所有服务器都会产生oplog.rs 日志集合
两种机制下,所有从服务器都会去轮询主服务器oplog日志,若主服务器的日志较新,就会同步这些新的操作记录。但是这里有个很重要的问题,从服务器由于网络阻塞,死机等原因无法极时同步主服务器oplog记录
一种情况: 主服务器oplog不断刷新,这样从服务器永远无法追上主服务器。
另外一种情况:刚好主服务器oplog超出大小,清空了之前的oplog,这样从服务器就与主服务器数据就可能会不一致了,这第二种情况,我是推断的,没有证实。
另外要说明一下Replica Sets 备份的缺点,当主服务器发生故障时,一台从服务器被投票选为了主服务器,但是这台从服务的oplog如果晚于之前的主服务器oplog的话,那之前的主服务器恢复后,会回滚自己的oplog操作和新的主服务器oplog保持一致。由于这个过程是自动切换的,所以在无形之中就导致了部分数据丢失。

这里看主从备份的操作:
主上:
[root@mongodb2 data]# more master_configfile
dbpath=/data/db/
master=true
logpath=/data/db/mongodb_master.log
port=27017
logappend=true

删掉local.* 为了重建oplogSize
/usr/local/mongodb/bin/mongod --oplogSize=8038 --configmaster_configfile &
可以查看一下:
[root@mongodb3 db]# /usr/local/mongodb/bin/mongo
MongoDB shell version: 1.8.0
connecting to: test
> db.printReplicationInfo()
configured oplog size:  8038MB
log length start to end: 0secs (0hrs)
oplog first event time:  Wed Jul 27 2011 17:34:51GMT+0800 (CST)
oplog last event time:   Wed Jul27 2011 17:34:51 GMT+0800 (CST)
now:                    Wed Jul 27 2011 17:36:32 GMT+0800 (CST)


从上
[root@mongodb1 data]# more slave_configfile
dbpath=/data/db/
slave=true
source=192.168.1.41:27017
slavedelay=30
logpath=/data/db/mongodb_slave.log
port=27017
logappend=true

启动
/usr/local/mongodb/bin/mongod --configslave_configfile  --autoresync &

等待数据同步完成后,可以在两台机器上db.表名.count()一下,对比看看数据数量


当主down机后
salve提成为主:
$ rm /data/db/local.*
$ /usr/local/mongodb/bin/mongod --oplogSize=8038 --configmaster_configfile &

等主恢复后,让他变成从,可能还需要重新rsync一次数据
/usr/local/mongodb/bin/mongod --configslave_configfile  --autoresync &



一些问题
1,主上数据量很大,那么这时候来做主从同步,从上的数据是不是必须从主同步过来,而不能把主上dump下的数据 放到从上restore在做主从同步?(我测试了一下如果先dump,restore后在做主从同步的话,这段时期的数据从是不会再去同步的)
2,主从同步做好了,过了一段时间从down机了,等从恢复后,会自动的去同步主上的数据吗?(这个我测试是可以,但是数据量比较小,而且我模拟down机时间也比较短)
3,主down机后,是不是必须将从上的local.*文件删除,然后以主的方式启动?
   解答:
1.最好是全部rsync一次,其实也可以把主做成master后在dump数据,从restore数据完之后会从主的oplog位置在同步
2.会的,除非oplog设置得不够大,而偏偏主又把oplog清空了
3.也是必须的,因为默认的slave是只能读不能写,所以必须改成主的模式启动 
关于oplog的概念请参考
http://blog.163.com/digoal@126/blog/static/163877040201011654535891/
原创粉丝点击