windows上搭建mongodb Replica Set

本文介绍如何搭建一个包含一个PRIMARY节点和两个SECONDARY节点的MongoDB副本集。通过详细步骤展示了如何配置各节点并初始化副本集,最后验证了数据同步功能。
部署运行你感兴趣的模型镜像

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



您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值