本篇主要讲解副本集的创建过程,采用的副本集结构为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
从节点Mongod实例启动,端口号27112
仲裁节点Mongod实例启动,端口号27113
启动成功与否,请查询每个实例对应的日志文件显示。显示连接到对应端口表示启动成功。三个节点的归属副本集名字为mySet,所有mongod实例的日志记录方式为增加。
使用到的mongod的启动参数设置如下表:
参数 | 参数含义 |
---|---|
port | Mongodb的监听端口 |
dbpath | 数据文件存储路径 |
logpath | 系统日志存放路径 |
replSet | 副本集名称,我用的是mySet,其他的节点 必须使用这个名字做副本集名称 |
logappend | 日志的写入模式是追加,不是默认的覆盖模式 |
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)执行结果如下:
显示OK,表示副本集创建成功
4.查询副本集状态
使用rs.status指令查询副本集中各实例的状态,执行结果如下:
可以看到副本集中的各成员状态:
health:1 //1表明状态是正常,0表明异常
state:1 // 1表明是primary,2表明是slave,即做备份的机器
5. 停止其中一个节点无论主节点还是从节点假设我们停止了其中第一个从节点,即端口号为27112的节点后,再次查看副本集状态
发现第二个节点的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()结果如下:
看出从节点2的stateStr为ARBITER。至此,一主一丛一仲裁节点的副本集才创建完毕。