MongoDB1.6的版本中,向Replica Set中增加成員很簡單,如下:
#增加新的成員
rs.add("192.168.95.210:10000");
#增加新的選舉成員
rs.addArb("192.168.95.216:10001");
這樣配置好,Mongo會自動把資料同步到新的成員上
1.6版本中沒有提供remove成員的命令,據說在1.7版本中有這個命令
不過,我們可以通過replSetReconfig來完成此操作
下面我們去掉set中一個成員,並增加一個新的成員,操作如下:
#在remove的成員上停掉MongoDB服務
kill -2 `cat /opt/mongodb_data/mongod.lock`
#將老成員的資料data檔案scp到新伺服器上,為了加快rs_sync的過程
scp suv.* 10.11.15.39:/pvdata/
#在新成員上啟動MongoDB服務
/usr/local/mongodb/bin/mongod –fork –shardsvr –port 10000 –replSet set2 –dbpath /pvdata/mongodb_data –logpath /pvdata/mongodb_log/mongod.log –logappend
#在該set的Master成員上執行命令
config = {_id: 'set2', members: [
{_id: 0, host: '192.168.95.218:10000'},
{_id: 1, host: '10.11.15.39:10000'},
{_id: 2, host: '192.168.95.216:10001', arbiterOnly: true}
]}
use local
old_config = db.system.replset.findOne();
#注意需要設定新config的versin,否則會報錯version number wrong
config.version = old_config.version + 1;
use admin
db.runCommand({ replSetReconfig : config })
這樣就完成了對Replica Set的重新設定,移走了一台舊伺服器,並增加了15.39的新伺服器
我們查看新伺服器mongod.log,可以看到:
Wed Oct 27 14:24:19 done allocating datafile /pvdata/mongodb_data/local.ns, size: 16MB, took 0.049 secs
…
Wed Oct 27 17:55:12 [rs_sync] replSet initialSyncOplogApplication 66500000
Wed Oct 27 17:58:02 [rs_sync] replSet initial sync finishing up
Wed Oct 27 17:58:02 [rs_sync] replSet set minValid=4cc7f49a:7b
Wed Oct 27 17:58:02 [rs_sync] building new index on { _id: 1 } for local.replset.minvalid
Wed Oct 27 17:58:02 [rs_sync] done for 0 records 0.052secs
Wed Oct 27 17:58:02 [rs_sync] replSet initial sync done
Wed Oct 27 17:58:04 [rs_sync] replSet SECONDARY
最後,說明新的Server已經sync完成,並作為secondary成功啟動了
我們用rs.status()也能看到新的set的狀態:
{
"set" : "set2",
"date" : "Wed Oct 27 2010 17:57:39 GMT+0800 (CST)",
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "zjm-Hadoop-slave218:10000",
"health" : 1,
"state" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "10.11.15.39:10000",
"health" : 1,
"state" : 3,
"uptime" : 1231,
"lastHeartbeat" : "Wed Oct 27 2010 17:57:39 GMT+0800 (CST)"
},
{
"_id" : 2,
"name" : "192.168.95.216:10001",
"health" : 1,
"state" : 7,
"uptime" : 1237,
"lastHeartbeat" : "Wed Oct 27 2010 17:57:39 GMT+0800 (CST)"
}
],
"ok" : 1
}