简单的replica set 模式的集群,可以直接使用全量物理备份+oplog持续增量备份的策略。
条件:
- 为了不影响mongodb的正常服务,在集群中添加hidden结点。该结点会自动同步mongodb的数据,参与选举,但是并不对外提供服务。
- 查看oplog的承载时间,时长一定要cover全量备份的时间
- lock hidden/sacondary结点(可选操作)
=>db.fsynclock()
- dump data文件
tar czvf data.tar.gz /data rsync -av testdb.tar.gz mongo-server-new01:/data/
##使用aws创建快照
mongodump --oplog - dump oplog库,作为计划任务持续拉取
mongodump -h mongoserver01 -uroot -proot --authenticationDatabase admin -d local -c oplog.rs -o /data/backup/oplog
- unlock hidden结点(可选操作)
=>db.fsyncUnclock()
数据恢复
- 恢复数据
mongorestore --oplogReplay
- 增量恢复
bsondump oplog.rs.bson mongorestore --oplogReplay /data/backup/oplog/oplog.bson
从hidden节点备份,每天全量备份一次
mongodump -h mongoserver01 -uroot -proot --authenticationDatabase admin --oplog -o /data/backup/fullMongo
500M:1min
持续拉取oplog增量备份
mongodump -h mongoserver01 -uroot -proot --authenticationDatabase admin -d local -c oplog.rs -o /data/backup/oplog
4G:3min
定期巡检备份有效性
cp -f /data/backup/oplog/oplog.rs.bson /data/backup/fullMongo/oplog.bson
mongorestore -h mongotest -uroot -proot --authenticationDatabase --oplogReplay /data/backup/fullMongo
数据恢复
各种角色权限对应如下:
hidden节点配置
rs.stepDown()
添加hidden节点
PRIMARY>rs.add({host:"192.168.0.1:27017",priority:0,hidden:true})
#设置为0,永远不会成为主节点
PRIMARY>rs.reconfig(config)
PRIMARY>rs.status();
全量备份dump的是全部的数据库?
不是的,local并不会dump下来,里面存储了集群信息。dump的是数据和帐号信息
为什么是每天一次
=>rs.printReplicationInfo()
configured oplog size: 4366MB
log length start to end :166920secs (46.37hrs)
oplog first event time:Tue May 14 2019 15:18:59 GMT+0800 (CST)
oplog last event time:Thu May 16 2019 13:40:59 GMT+0800 (CST)
now:Thu May 16 2019 13:48:03 GMT+0800 (CST)
修改oplog大小,重建oplog.rs
secondary>db.shutdownServer()
mongod --port 27018 --dbpath /srv/mongodb
mongodump --db local --collection 'oplog.rs' --port 27018
secondary>use local
secondary>db
什么是oplog
local:oplog.rs
sharded cluster备份与恢复
- 禁用balancer,connect to mongos
=>user config =>sh.stopBalancer()
- lock replica set secondary member
=>db.fsyncLock()
- lock config secondary server
=>db.fsynclock()
- dump config server
mongodump --oplog
- unlock secondary member
=>db.fsyncUnclock()
- dump replica set secondary member
mongodump --oplog
- unlock config secondary server
=>db.fsyncUnlock()
- 开启balancer
=>sh.setbalancerState(true)
restore
- 搭建集群,保持主机名一致,并关闭mongos
- restore shard data
mongorestore --drop --oplogReplay /data/backup/shardA
- restore config data
mongorestore --drop --oplogReplay /data/dump/configData
- 重启所有结点,验证集群可用性
=>db.printShardingStatus() =>show collections