windows下搭建mongo复制集(Replicate Set 模式)

时间:2023-01-02 02:37:35

环境:

操作系统:window 10(win7以上应该都可以)
MongoDB:version: 3.0.6
本机ip:192.168.0.114

配置要求:

主机节点 本次试验地址 作用
Primary节点 192.168.0.114:28010 对外提供读写服务
Secondary节点 192.168.0.114:28011 备用节点,数据与主节点的数据是完全同步的
Secondary节点2 192.168.0.114:28012 备用节点,数据与主节点的数据是完全同步的
仲裁节点( Arbiter) 192.168.0.114:28012 由 Secondary节点2 兼并。主节点挂掉,仲裁节点会投票选出新的主节点。

注:现在开发测试没要那么多主机节点,所以就在一台电脑上,用不同的端口替代不同主机进行试验。

节点结构如下图:D:\mongotest\replSet
windows下搭建mongo复制集(Replicate Set 模式)


设置配置文件启动

mongodb的启动方式有三种,本次采用配置文件的启动方式。

注:配置文件的地址在conf中的mongodb.conf。

windows下搭建mongo复制集(Replicate Set 模式)

启动方式:配置文件启动
编辑配置文件:

primary:

replSet = rs1
# 端口
port = 28010
# 日志
logpath = D:\mongotest\replSet\primary\logs\mongodb.log
# 数据库
dbpath = D:\mongotest\replSet\primary\data

secondary:

replSet = rs1
# 端口
port = 28011
# 日志
logpath = D:\mongotest\replSet\secondary\logs\mongodb.log
# 数据库
dbpath = D:\mongotest\replSet\secondary\data

secondary2:

replSet = rs1
# 端口
port = 28012
# 日志
logpath = D:\mongotest\replSet\secondary2\logs\mongodb.log
# 数据库
dbpath = D:\mongotest\replSet\secondary2\data

注:路径都是绝对路径,只要你高兴,也可以都放到一个文件夹。

启动节点

进入到相应节点的bin目录

一:启动各个节点

primary:

mongod --config D:\mongotest\replSet\primary\conf\mongodb.conf

windows下搭建mongo复制集(Replicate Set 模式)

这就是启动成功了,这个提示是我已经存在了mongodb.log文件了,它帮我把之前的移动到另一个地方了,没什么大碍不影响。
在log文件中可以看到启动确实成功了,没有错误提示。

windows下搭建mongo复制集(Replicate Set 模式)

其他节点同理:
分别打开cmd窗口执行语句:

mongod --config D:\mongotest\replSet\secondary\conf\mongodb.conf
mongod --config D:\mongotest\replSet\secondary2\conf\mongodb.conf

二:配置 Primary 节点
进入 primary 节点的 bin 目录打开控制台通过命令:mongo –port 28010 连接到 primary 节点。

windows下搭建mongo复制集(Replicate Set 模式)

输入这条命令配置:

config_rs = {_id : "rs1",members : [ { _id:0, host:"192.168.0.114:28010", priority:1 },{ _id:1, host:"192.168.0.114:28011", priority:1 },{ _id:2, host:"192.168.0.114:28012", priority:1, "arbiterOnly": true } ]}

注:如果分布在不同的机器,host为:”host:’ip:port’”,设置为仲裁节点:”arbiterOnly”: true

#初始化
rs.initiate(config_rs)

返回{ “ok” : 1 }说明成功。

windows下搭建mongo复制集(Replicate Set 模式)

rs.status() 查看下当前状态
出现”stateStr” : “PRIMARY”的为当前主节点,所有数据在这里读写

在主节点数据库插入的数据,会同步到”stateStr” : “SECONDARY”节点上.
当然,”stateStr” : “SECONDARY”节点上是不允许插入数据的….

重启复制集的话:
1. 逐个重启复制集里所有的Secondary节点
2. 对Primary发送stepDown命令,等待primary降级为Secondary
3. 重启降级后的Primary

注: 默认只可以从 primary 节点读写数据,secondary 节点不支持读写,在 secondary 节点执行 rs.slaveOk() 命令可让 secondary 节点支持读写。