MongoDB实战-如何在Windows环境下创建副本集

时间:2023-01-05 07:07:00

本篇主要讲解副本集的创建过程,采用的副本集结构为1个主节点,一个从节点一个仲裁节点。废话不多说,创建步骤如下:

1. 目录结构拷贝

    首先进入MongoDB的安装目录,如C:\Programme Files\MongoDB\Server。将该目录下的文件夹拷贝出三份复制,分别命名为master,slave和arbiter;

    然后拷贝出三份数据和日志文档的目录,数据路径如L:\MongoDb\matserdb,L:\MongoDb\slavedb,L:\MongoDb\arbiterdb;日志路径为L:\MongoDb\matserlog,

L:\MongoDb\slavelog,L:\MongoDb\arbiterlog.

    前期工作准备完毕,下面正式开始启动对应的主从mongod实例

2. mongod实例的启动

主节点Mongod实例启动,端口号27111

MongoDB实战-如何在Windows环境下创建副本集

从节点Mongod实例启动,端口号27112

MongoDB实战-如何在Windows环境下创建副本集

仲裁节点Mongod实例启动,端口号27113

MongoDB实战-如何在Windows环境下创建副本集

启动成功与否,请查询每个实例对应的日志文件显示。显示连接到对应端口表示启动成功。三个节点的归属副本集名字为mySet,所有mongod实例的日志记录方式为增加。

使用到的mongod的启动参数设置如下表:

参数 参数含义
port Mongodb的监听端口
dbpath 数据文件存储路径
logpath 系统日志存放路径
replSet  副本集名称,我用的是mySet,其他的节点
必须使用这个名字做副本集名称
logappend 日志的写入模式是追加,不是默认的覆盖模式
还有一些其它的参数设置,可以参考官网的文档。比如授权auth等。


3. 将三个Mongod实例连接在一起

成功启动了三个Mongod的实例后,下面的工作就是如何将这三个实例组成一个副本集。新开启一个cmd窗口,执行mongd 命令,跟上其中一个端口号27111,mongo数据库启动成功后,设置对应的副本集配置,配置代码如下:

congfig_set={"_id":"mySet",members:[{_id:0,host:"127.0.0.1:27111"},{_id:1,host:"127.0.0.1:27112"},{_id:2,host:"127.0.0.1:27113"}]}
然后通过下面的指令启动样本集
rs.initiate(config_set)
执行结果如下:

MongoDB实战-如何在Windows环境下创建副本集
显示OK,表示副本集创建成功

4.查询副本集状态

  使用rs.status指令查询副本集中各实例的状态,执行结果如下:

MongoDB实战-如何在Windows环境下创建副本集

MongoDB实战-如何在Windows环境下创建副本集

可以看到副本集中的各成员状态:

health:1   //1表明状态是正常,0表明异常

state:1     // 1表明是primary,2表明是slave,即做备份的机器

5. 停止其中一个节点无论主节点还是从节点

假设我们停止了其中第一个从节点,即端口号为27112的节点后,再次查看副本集状态

MongoDB实战-如何在Windows环境下创建副本集

MongoDB实战-如何在Windows环境下创建副本集

发现第二个节点的health为0,表示节点停止了。同样,若我们暂停的是第一个主节点,其中一个从节点会自动切换为主节点。

6. 将第两个个从节点设置为仲裁节点

也就是将127.0.0.1:27112,127.0.0.1:27113设置为仲裁节点,首先删除原始的第二个从节点:

rs.remove("127.0.0.1:27112")
 
rs.remove("127.0.0.1:27113")
 然后重新设置副本集的设置参数: 

config_set={"_id":"mySet",members:[{_id:0,host:"127.0.0.1:27111"},{_id:2,host:"127.0.0.1:27112"},{_id:3,host:"127.0.0.1:27113",aibiterOnly:true}]}
然后执行

rs.reconfig(config_set)
这时,才是将第二个从节点设置为了仲裁节点,再次执行rs.status()结果如下:

MongoDB实战-如何在Windows环境下创建副本集

MongoDB实战-如何在Windows环境下创建副本集

看出从节点2的stateStr为ARBITER。至此,一主一丛一仲裁节点的副本集才创建完毕。