windows上搭建mongodb Replica Set

下面尝试搭建一个包含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>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值