本文介绍如何快速部署MongoDB Replica Set复制集,注意本文中的配置是不涉及授权验证的。
MongoDB版本为3.0.2 , 该部署全部在同一台服务器上完成,实际产品环境 Replica Set 中master和slave显然应当在不同的服务器上, 仅仅需要对本文中涉及IP的地方有所修改即可
我们假定用户已经成功安装mongoDB 3.0.2
启动 replica set的primary节点上的mongodb
sudo mkdir -p /m01/mongo1
sudo mkdir -p /m01/mongo2
sudo mkdir -p /m01/mongo3
mongod -dbpath /m01/mongo1 --replSet "rs_maclean" --port 35001 --storageEngine wiredTiger &
mongod -dbpath /m01/mongo2 --replSet "rs_maclean" --port 35002 --storageEngine wiredTiger &
mongod -dbpath /m01/mongo3 --replSet "rs_maclean" --port 35003 --storageEngine wiredTiger &
登陆到已经启动的primary mongodb
mongo localhost:35001
MongoDB shell version: 3.0.2
connecting to: localhost:35001/test
初始化 replica set 成员
rs.initiate()
获得 replica set配置信息
rs.conf()
rs_maclean:PRIMARY> rs.conf();
{
"_id" : "rs_maclean",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "shard0.dbdao.com:35001",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : 0,
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatTimeoutSecs" : 10,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
}
}
}
添加其他2个replica set member
rs.add("ip2:35002")
rs.add("ip3:35003")
检查 Replica set 状态
rs_maclean:PRIMARY> rs.status()
{
"set" : "rs_maclean",
"date" : ISODate("2015-05-12T14:34:57.205Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "shard0.dbdao.com:35001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 398,
"optime" : Timestamp(1431441212, 1),
"optimeDate" : ISODate("2015-05-12T14:33:32Z"),
"electionTime" : Timestamp(1431440950, 2),
"electionDate" : ISODate("2015-05-12T14:29:10Z"),
"configVersion" : 2,
"self" : true
},
{
"_id" : 1,
"name" : "shard1.dbdao.com:35002",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 85,
"optime" : Timestamp(1431441212, 1),
"optimeDate" : ISODate("2015-05-12T14:33:32Z"),
"lastHeartbeat" : ISODate("2015-05-12T14:34:56.044Z"),
"lastHeartbeatRecv" : ISODate("2015-05-12T14:34:56.061Z"),
"pingMs" : 0,
"configVersion" : 2
}
.......
],
"ok" : 1
}
此时我们触发 primary的mongod 进程被kill
root@shard0:~# ps -ef|grep mongod root 24591 24566 1 10:28 pts/1 00:00:12 mongod -dbpath /m01/mongo1 --replSet rs_maclean --port 35001 --storageEngine wiredTiger root 24970 24566 0 10:41 pts/1 00:00:00 grep --color=auto mongod root@shard0:~# root@shard0:~# kill -9 24591 此时触发 replSet possible election tie 2015-05-12T10:59:59.476-0400 E REPL [rsBackgroundSync] sync producer problem: 10278 dbclient error communicating with server: shard0.dbdao.com:35001 2015-05-12T10:59:59.478-0400 I REPL [ReplicationExecutor] could not find member to sync from 2015-05-12T11:00:00.382-0400 I NETWORK [ReplExecNetThread-1] DBClientCursor::init call() failed 2015-05-12T11:00:00.382-0400 I REPL [ReplicationExecutor] Standing for election 2015-05-12T11:00:00.384-0400 I REPL [ReplicationExecutor] replSet possible election tie; sleeping 961ms until 2015-05-12T11:00:01.345-0400 2015-05-12T11:00:01.345-0400 I REPL [ReplicationExecutor] Standing for election 2015-05-12T11:00:01.346-0400 I REPL [ReplicationExecutor] replSet info electSelf 2015-05-12T11:00:01.348-0400 I REPL [ReplicationExecutor] replSet election succeeded, assuming primary role 2015-05-12T11:00:01.348-0400 I REPL [ReplicationExecutor] transition to PRIMARY 2015-05-12T11:00:01.605-0400 I REPL [rsSync] transition to primary complete; database writes are now permitted 2015-05-12T11:00:04.853-0400 I NETWORK [conn15] end connection 127.0.0.1:34149 (3 connections now open) 2015-05-12T11:00:05.735-0400 I NETWORK [initandlisten] connection accepted from 127.0.0.1:34160 #18 (4 connections now open) 2015-05-12T11:00:08.011-0400 I NETWORK [conn18] end connection 127.0.0.1:34160 (3 connections now open) 2015-05-12T11:00:21.642-0400 I NETWORK [conn17] end connection 104.236.21.67:44231 (2 connections now open) 2015-05-12T11:00:21.643-0400 I NETWORK [initandlisten] connection accepted from 104.236.21.67:44264 #19 (3 connections now open) 2015-05-12T11:00:22.548-0400 I NETWORK [initandlisten] connection accepted from 127.0.0.1:34189 #20 (4 connections now open) 2015-05-12T11:00:23.932-0400 I NETWORK [conn20] end connection 127.0.0.1:34189 (3 connections now open) 2015-05-12T11:00:51.671-0400 I NETWORK [conn19] end connection 104.236.21.67:44264 (2 connections now open) 2015-05-12T11:00:51.671-0400 I NETWORK [initandlisten] connection accepted from 104.236.21.67:44310 #21 (3 connections now open) 2015-05-12T11:01:21.700-0400 I NETWORK [conn21] end connection 104.236.21.67:44310 (2 connections now open) 2015-05-12T11:01:21.701-0400 I NETWORK [initandlisten] connection accepted from 104.236.21.67:44356 #22 (3 connections now open) secondary 接管primary
当原primary节点重新启动会成为SECONDARY member
Leave a Reply