下面尝试搭建一个包含3个节点的mongodb Replica Set。 其中一个为PRIMARY节点,其他两个为SECONDARY节点。
本机上mongodb解压的路径为C:\tools\Mongodb\bin\。
1. 分别创建三个data目录,作为不同节点的dbpath、
名字分别是
C:\mongodb\replica\data1
C:\mongodb\replica\data2
C:\mongodb\replica\data3
2. 在不同的命令行中分别执行下面的命令其中三个mongodb实例
C:\tools\Mongodb\bin\mongod.exe --dbpath C:\mongodb\replica\data1 --port 10001 --replSet set1 --logpath C:\mongodb\replica\log1.log
C:\tools\Mongodb\bin\mongod.exe --dbpath C:\mongodb\replica\data2 --port 10002 --replSet set1 --logpath C:\mongodb\replica\log2.log
C:\tools\Mongodb\bin\mongod.exe --dbpath C:\mongodb\replica\data3 --port 10003 --replSet set1 --logpath C:\mongodb\replica\log3.log
3. mongo客户端连接到127.0.0.1:10001 ,执行下面的语句。
config = {_id: 'set1', members: [
{_id: 0, host: '127.0.0.1:10001'},
{_id: 1, host: '127.0.0.1:10002'},
{_id: 2, host: '127.0.0.1:10003'}]
}
rs.initiate(config)
执行结果:
Replica Set已经搭建完成。查看状态执行rs.status()语句
set1:PRIMARY> rs.status()
{
"set" : "set1",
"date" : ISODate("2017-03-19T04:32:22.778Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "127.0.0.1:10001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 595,
"optime" : {
"ts" : Timestamp(1489897745, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-03-19T04:29:05Z"),
"electionTime" : Timestamp(1489897744, 1),
"electionDate" : ISODate("2017-03-19T04:29:04Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "127.0.0.1:10002",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 209,
"optime" : {
"ts" : Timestamp(1489897745, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-03-19T04:29:05Z"),
"lastHeartbeat" : ISODate("2017-03-19T04:32:20.953Z"),
"lastHeartbeatRecv" : ISODate("2017-03-19T04:32:21.395Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "127.0.0.1:10001",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "127.0.0.1:10003",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 209,
"optime" : {
"ts" : Timestamp(1489897745, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-03-19T04:29:05Z"),
"lastHeartbeat" : ISODate("2017-03-19T04:32:20.953Z"),
"lastHeartbeatRecv" : ISODate("2017-03-19T04:32:21.347Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "127.0.0.1:10001",
"configVersion" : 1
}
],
"ok" : 1
}
set1:PRIMARY>
主节点上插入数据,到两个从节点查看数据。
mongo连接到主节点127.0.0.1:10001,执行插入数据:
set1:PRIMARY> db.products.insertOne( { item: "card", qty: 15 } ); { "acknowledged" : true, "insertedId" : ObjectId("58ce0e803383e592139ea416") } set1:PRIMARY>
从节点127.0.0.1:10002查询数据:
set1:SECONDARY> db.products.find();
Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }
set1:SECONDARY>
默认情况下,写入和读取都是在主节点上。如果没有设置。在从节点上查询会报错。需要开启在从节点进行查询的功能。
set1:SECONDARY> rs.slaveOk();
然后再查询就可以查到数据了。
set1:SECONDARY> db.products.find();
{ "_id" : ObjectId("58ce0e803383e592139ea416"), "item" : "card", "qty" : 15 }
set1:SECONDARY>