Home  >  Article  >  Database  >  MongoDB使用副本集备份添加新的辅助副本成员

MongoDB使用副本集备份添加新的辅助副本成员

WBOY
WBOYOriginal
2016-06-07 14:55:541287browse

问题描述: 在生产环境中,当辅助副本成员的读压力很大时,可通过添加新的辅助副本成员来缓解压力。 为了能实现主副本成员不停机,并减轻主副本成员的压力,可在辅助副本成员上mongodump备份数据; 为了实现新的辅助副本成员的快速恢复,可直接通过以NFS方式

问题描述:

 

在生产环境中,当辅助副本成员的读压力很大时,可通过添加新的辅助副本成员来缓解压力。

为了能实现主副本成员不停机,并减轻主副本成员的压力,可在辅助副本成员上mongodump备份数据;

为了实现新的辅助副本成员的快速恢复,可直接通过以NFS方式挂载辅助副本成员到做备份操作的辅助副本成员上;

为了保证数据的一致性,在mongodump数据的时候使用—oplog参数,mongorestore时使用—oplogReplay参数;

为了满足后期空间的扩容,通过—directoryperdb参数将数据库分目录存储。

 

解决方法:

 

步骤一:将新机器挂为NFS磁盘

 

参见:CentOS Linux上配置NFS网络文件系统以及客户端使用

 

步骤二:备份辅助副本成员

 

local数据库不会被备份,包括admin在内的其他库会被备份。

mongodump --host=192.168.11.1:27017 --oplog -o /mnt/mongo/mongodata -u xucy  –p Passw0rd --authenticationDatabase admin > mongodump.log 2>&1 &

 

可通过实时查看日志数据,观察备份进度。

 

tail –f mongodump.log

 

步骤三:在新实例上恢复数据库

 

mongorestore要在mongod未启动的情况下运行,它直接写入文件。

mongorestore --host=192.168.11.2:27017 --oplogReplay --dbpath /data/var/lib/mongodb --directoryperdb /nfspool/mongodata > mongorestore.log 2>&1 &

 

可通过实时查看日志数据,观察恢复进度。

 

tail –f mongorestore.log

 

步骤四:在新实例上重建oplog

 

1.查看主副本的维护窗口和oplog大小:

rs_main:PRIMARY> db.printReplicationInfo()    
configured oplog size:   23862.404296875MB    
log length start to end: 39405secs (10.95hrs)    
oplog first event time:  Sun Feb 08 2015 10:34:07 GMT-0600 (CST)    
oplog last event time:   Sun Feb 08 2015 21:30:52 GMT-0600 (CST)    
now:                     Sun Feb 08 2015 21:30:53 GMT-0600 (CST)

 

2.在新机器上重建oplog:

 

以standalone方式启动,执行如下删除和创建脚本:

> use local    
> db.oplog.rs.drop()    
> db.createCollection("oplog.rs", {"capped" : true, "size" : 23 * 1024 * 1024 * 1024})    
或    
> db.runCommand( { create: "oplog.rs", capped: true, size: (23 * 1024 * 1024 * 1024) } )


步骤五:在新实例上恢复oplog

 

此oplog是mongodump时导出的oplog.bson。

mongorestore -d local -c oplog.rs /nfspool/mongodata/oplog.bson

 

步骤六:新实例以副本集启动

 

新实例配置和源副本集添加相同的--replSet和--keyFile参数,以副本集启动

 

步骤七:将该节点添加到复制集集群中

 

>rs.add(“192.168.11.2:27017”)
{“ok”:1}



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn