何小伟向Mongodb集群添加新的成员节点.docx
《何小伟向Mongodb集群添加新的成员节点.docx》由会员分享,可在线阅读,更多相关《何小伟向Mongodb集群添加新的成员节点.docx(9页珍藏版)》请在冰豆网上搜索。
何小伟向Mongodb集群添加新的成员节点
向Mongodb集群添加新的成员节点
向集群添加新节点有两种方法:
方法
第一种方法
拷贝其他节点的数据文件到新的节点
第二种方法
向已有的replicaset添加新成员
一.第一种方法(拷贝其他节点的数据文件到新的节点)
我们在启动mongod服务之前一定要拷贝数据文件到本机。
下面是空库添加到一个replicaset中的日志记录:
第一步:
####连接Primary库
TueNov114:
22:
57[initandlisten]connectionacceptedfrom10.250.7.220:
54235#2
TueNov114:
22:
57[initandlisten]connectionacceptedfrom10.250.7.220:
54236#3
TueNov114:
22:
57[initandlisten]connectionacceptedfrom10.250.7.220:
54237#4
TueNov114:
22:
57[rsStart]tryingtocontact10.250.7.220:
27018
TueNov114:
22:
57[rsStart]tryingtocontact10.250.7.220:
27019
TueNov114:
22:
57[rsStart]tryingtocontact10.250.7.220:
27020
第二步:
####从primary库复制replicaset的配置信息,并保存到本地-dbpath指定的文件目录####
TueNov114:
22:
57[rsStart]replSetgotconfigversion2fromaremote,savinglocally
TueNov114:
22:
57[rsStart]replSetinfosavinganewerconfigversiontolocal.system.replset
TueNov114:
22:
57[FileAllocator]allocatingnewdatafile/opt/mongodata/r1/local.ns,fillingwithzeroes...
TueNov114:
22:
57[FileAllocator]creatingdirectory/opt/mongodata/r1/_tmp
TueNov114:
22:
57[FileAllocator]doneallocatingdatafile/opt/mongodata/r1/local.ns,size:
16MB,took0.118secs
TueNov114:
22:
57[FileAllocator]allocatingnewdatafile/opt/mongodata/r1/local.0,fillingwithzeroes...
TueNov114:
23:
01[FileAllocator]doneallocatingdatafile/opt/mongodata/r1/local.0,size:
64MB,took3.807secs
TueNov114:
23:
01[FileAllocator]allocatingnewdatafile/opt/mongodata/r1/local.1,fillingwithzeroes...
TueNov114:
23:
02[rsStart]replSetsaveConfigLocallydone
TueNov114:
23:
02[FileAllocator]doneallocatingdatafile/opt/mongodata/r1/local.1,size:
128MB,took1.068secs
TueNov114:
23:
02[rsStart]replSetSTARTUP2
TueNov114:
23:
02[rsMgr]replSettotalnumberofvotesiseven-addarbiterorgiveonememberanextravote
TueNov114:
23:
02[rsSync]******
第三步:
####创建oplog日志文件####
TueNov114:
23:
02[rsSync]creatingreplicationoplogofsize:
944MB...
TueNov114:
23:
02[FileAllocator]allocatingnewdatafile/opt/mongodata/r1/local.2,fillingwithzeroes...
TueNov114:
23:
04[rsHealthPoll]replSetinfomember10.250.7.220:
27018isup
TueNov114:
23:
04[rsHealthPoll]replSetmember10.250.7.220:
27018isnowinstateSECONDARY
TueNov114:
23:
04[rsHealthPoll]replSetinfomember10.250.7.220:
27019isup
TueNov114:
23:
04[rsHealthPoll]replSetmember10.250.7.220:
27019isnowinstateSECONDARY
TueNov114:
23:
04[rsHealthPoll]replSetinfomember10.250.7.220:
27020isup
TueNov114:
23:
04[rsHealthPoll]replSetmember10.250.7.220:
27020isnowinstatePRIMARY
TueNov114:
23:
49[FileAllocator]doneallocatingdatafile/opt/mongodata/r1/local.2,size:
1024MB,took46.28secs
TueNov114:
23:
50[rsSync]******
第四步:
####应用主库的日志,复制数据文件####
TueNov114:
23:
50[rsSync]replSetinitialsyncpending
TueNov114:
23:
50[rsSync]replSetsyncingto:
10.250.7.220:
27020
TueNov114:
23:
50[rsSync]buildindexlocal.me{_id:
1}
TueNov114:
23:
50[rsSync]buildindexdone0records0.003secs
TueNov114:
23:
50[rsSync]replSetinitialsyncdropalldatabases
TueNov114:
23:
50[rsSync]dropAllDatabasesExceptLocal1
TueNov114:
23:
50[rsSync]replSetinitialsyncclonealldatabases
TueNov114:
23:
50[rsSync]replSetinitialsynccloningdb:
test
TueNov114:
23:
50[FileAllocator]allocatingnewdatafile/opt/mongodata/r1/test.ns,fillingwithzeroes...
TueNov114:
23:
51[FileAllocator]doneallocatingdatafile/opt/mongodata/r1/test.ns,size:
16MB,took0.8secs
TueNov114:
23:
51[FileAllocator]allocatingnewdatafile/opt/mongodata/r1/test.0,fillingwithzeroes...
TueNov114:
23:
55[FileAllocator]doneallocatingdatafile/opt/mongodata/r1/test.0,size:
64MB,took3.643secs
TueNov114:
23:
55[FileAllocator]allocatingnewdatafile/opt/mongodata/r1/test.1,fillingwithzeroes...
TueNov114:
23:
55[rsSync]buildindextest.yql{_id:
1}
TueNov114:
23:
56[rsSync]buildindexdone1records0.006secs
TueNov114:
23:
56[rsSync]replSetinitialsyncqueryminValid
TueNov114:
23:
56[rsSync]replSetinitialoplogapplicationfrom10.250.7.220:
27020startingatNov114:
14:
05:
1toNov114:
14:
05:
1
TueNov114:
23:
57[rsSync]replSetinitialsyncfinishingup
TueNov114:
23:
57[rsSync]replSetsetminValid=4eaf8e2d:
1
TueNov114:
23:
57[rsSync]buildindexlocal.replset.minvalid{_id:
1}
TueNov114:
23:
57[rsSync]buildindexdone0records0.023secs
TueNov114:
23:
57[rsSync]replSetinitialsyncdone
TueNov114:
23:
58[rsSync]replSetsyncingto:
10.250.7.220:
27020
TueNov114:
23:
58[rsSync]replSetSECONDARY
TueNov114:
24:
02[FileAllocator]doneallocatingdatafile/opt/mongodata/r1/test.1,size:
128MB,took7.428secs
TueNov114:
24:
16[clientcursormon]mem(MB)res:
16virt:
2848mapped:
1312
TueNov114:
24:
42[initandlisten]connectionacceptedfrom127.0.0.1:
21141#5
TueNov114:
29:
16[clientcursormon]mem(MB)res:
16virt:
2849mapped:
1312
TueNov114:
34:
16[clientcursormon]mem(MB)res:
16virt:
2913mapped:
1312
TueNov114:
39:
16[clientcursormon]mem(MB)res:
16virt:
2913mapped:
1312
第五步:
===下面是删除节点以后的日志==
TueNov114:
39:
28[conn2]endconnection10.250.7.220:
54235
TueNov114:
39:
29[rsMgr]replsetmsgReceivedNewConfigversion:
version:
3
TueNov114:
39:
29[rsMgr]replSetinfosavinganewerconfigversiontolocal.system.replset
TueNov114:
39:
29[rsMgr]replSetsaveConfigLocallydone
TueNov114:
39:
29[rsMgr]replSeterrorselfnotpresentinthereplsetconfiguration:
TueNov114:
39:
29[rsMgr]{_id:
"myset",version:
3,members:
[{_id:
0,host:
"10.250.7.220:
27018"},{_id:
1,host:
"10.250.7.220:
27019"},{_id:
2,host:
"10.
250.7.220:
27020"}]}
-------------------------------------------------------------------------
这是拷贝replicasetmyset中其他节点的数据文件!
(记住是数据文件,一定不要mongod.lock,每个mongod进程都需要自己的数据目录,如果你要运行3个mongod的实例,那么就需要3个独自的目录。
mongod启动的时候会在数据目录创建一个mongod.lock文件,阻止其他进程使用此目录.)
第六步:
####连接primary库
TueNov115:
53:
24[initandlisten]connectionacceptedfrom10.250.7.220:
54761#2
TueNov115:
53:
28[initandlisten]connectionacceptedfrom10.250.7.220:
54763#3
TueNov115:
53:
28[initandlisten]connectionacceptedfrom10.250.7.220:
54764#4
TueNov115:
53:
34[clientcursormon]mem(MB)res:
31virt:
2606mapped:
1232
TueNov115:
53:
34[rsStart]tryingtocontact10.250.7.220:
27018
TueNov115:
53:
34[rsStart]tryingtocontact10.250.7.220:
27019
TueNov115:
53:
34[rsStart]tryingtocontact10.250.7.220:
27020
第七步:
####拷贝配置文件,并保存。
TueNov115:
53:
34[rsStart]replSetgotconfigversion6fromaremote,savinglocally
TueNov115:
53:
34[rsStart]replSetinfosavinganewerconfigversiontolocal.system.replset
TueNov115:
53:
34[rsStart]replSetsaveConfigLocallydone
TueNov115:
53:
34[rsStart]replSetSTARTUP2
TueNov115:
53:
34[rsMgr]replSettotalnumberofvotesiseven-addarbiterorgiveonememberanextravote
TueNov115:
53:
34[rsSync]replSetSECONDARY
TueNov115:
53:
34[rsHealthPoll]replSetinfomember10.250.7.220:
27018isup
TueNov115:
53:
34[rsHealthPoll]replSetmember10.250.7.220:
27018isnowinstateSECONDARY
TueNov115:
53:
34[rsHealthPoll]replSetinfomember10.250.7.220:
27019isup
TueNov115:
53:
34[rsHealthPoll]replSetmember10.250.7.220:
27019isnowinstateSECONDARY
TueNov115:
53:
34[rsHealthPoll]replSetinfomember10.250.7.220:
27020isup
TueNov115:
53:
34[rsHealthPoll]replSetmember10.250.7.220:
27020isnowinstatePRIMARY
TueNov115:
53:
34[rsMgr]replSetcan'tseeamajority,willnottrytoelectself
TueNov115:
53:
38[rsSync]replSetsyncingto:
10.250.7.220:
27020
从上面的日志来看,这种方法初始化的速度比较快。
当然考虑拷贝数据文件的时间,在大量数据的时候,我们可以选择里面一种方案!
二.第二种方法(向已有的replicaset添加新成员)
向已有的replicaset添加新成员是很简单的,新加的成员可以是空的。
下面介绍一下如何添加新成员:
添加新成员时,必须在新的机器上先起来一个mongodb服务,必须指出要加入的replicaset集群的名字基本语法如下(其他是默认的),然后再在replicaset的master库上执行添加操作:
./mongod-dbpath=/opt/mongodata/r1-port27017-replSetmyset
当然也可以使用下面的命令,将输出日志记录到/opt/mongodata/r1/rac3.27017.log里面!
[mongodb@rac3bin]$./mongod-dbpath=/opt/mongodata/r1-port27017-replSetmyset-logpath=/opt/mongodata/r1/rac3.27017.log-logappend&
第一步:
在主节点上执行添加操作
[mongodb@rac4bin]$./mongo127.0.0.1:
27020
MongoDBshellversion:
2.0.1
connectingto:
127.0.0.1:
27020/test
PRIMARY>rs.status();
{
"set":
"myset",
"date":
ISODate("2011-11-01T06:
13:
01Z"),
"myState":
1,
"syncingTo":
"10.250.7.220:
27018",
"members":
[
{
"_id":
0,
"name":
"10.250.7.220:
27018",
"health":
1,
"state":
2,
"stateStr":
"SECONDARY",
"uptime":
62668,
"optime":
{
"t":
1320066230000,
"i":
1
},
"optimeDate":
ISODate("2011-10-31T13:
03:
50Z"),
"lastHeartbeat":
ISODate("2011-11-01T06:
13:
01Z"),
"pingMs":
0
},
{
"_id":
1,
"name":
"10.250.7.220:
27019",
"health":
1,
"state":
2,
"stateStr":
"SECONDARY",
"uptime":
63887,
"optime":
{
"t":
1320066230000,
"i":
1
},
"optimeDate":
ISODate("2011-10-31T13:
03:
50Z"),
"lastHeartbeat":
ISODate("2011-11-01T06:
13:
01Z"),
"pingMs":
0
},
{
"_id":
2,
"name":
"10.250.7.220:
27020",
"health":
1,
"state":
1,
"stateStr":
"PRIMARY",
"optime":
{
"t":
1320066230000,
"i":
1
},
"optimeDate":
ISODate("2011-10-31T13:
03:
50Z"),
"self":
true
}
],
"ok":
1
}
PRIMARY>rs.add("10.250.7.241:
27017");
{"ok":
1}--添加成功
添加之后,mongodb会自动执行新加节点的恢复操作,所以第一次查询rs.status()时候,新加节点的信息为空,等待恢复完成之后再次查询就有了基本信息了。
PRIMARY>rs.status();
{
....省略....
{
"_id":
2,
"name":
"10.250.7.220:
27020",
"health":
1,
"state":
1,
"stateStr":
"PRIMARY",
"optime":
{
"t":
1320128045000,
"i":
1
},
"optimeDate":
ISODate("2011-11-01T06:
14:
05Z"),
"self":
true
},
{
"_id":
3,
"name":
"10.250.7.241:
27017",
"health":
0,
"state":
8,
"stateStr":
"(notreachable/healthy)",
"uptime":
0,
"optime":
{
"t":
0,
"i":
0
},