Replica Set 节点类型分为三种:
- standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为primary节点;
- passive:存储了完整的数据副本,参与投票,不能成为primary节点;
- arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为primary节点。
本文配置使用2个常规节点和一个arbiter节点,arbiter节点由于不同步数据,所以负载会很小,部署对硬件没有太大的要求。
假设192.168.1.211、192.168.1.212为常规节点,192.168.1.68为arbiter节点。三个节点上的mongodb都是用下面的配置文件,文件存放在/etc/mongodb.cnf:
dbpath = /data/db/ logpath = /data/log/m.log logappend = true port = 27017 fork = true directoryperdb = true journal = true replSet = test rest = true
其中replSet 的 Id 为 test,这个值对应initiate中的”_id”,使用rest参数后可以在web管理界面中显示Replica Set中其他mongodb实例的信息。
使用命令
/usr/local/mongodb/bin/mongod --config /etc/mongodb.cnf
分别启动三个机器上的mongodb实例,使用mongodb客户端登陆两个常规节点中的任何一个,执行如下命令:
rs.initiate( {"_id" : "test", "members" : [ {"_id" : 1, "host" : "192.168.1.211"}, {"_id" : 2, "host" : "192.168.1.212"}, {"_id" : 3, "host" : "192.168.1.68", "arbiterOnly" : true} ] }); 或 rs.initiate( {"_id" : "test", "members" : [ {"_id" : 1, "host" : "192.168.1.211"}, {"_id" : 2, "host" : "192.168.1.212"} ] }); rs.addArb('192.168.1.68');
可以使用rs.conf()查看配置情况,rs.status()查看各个节点的状态,经过一小段时间后,他们会选一台作为PRIMARY,其他的常规节点为SECONDARY,同时在js shell中看到提示符从“>”变为对应的 “PRIMARY>” 或 “SECONDARY>” 或 “ARBITER>”。可以在PRIMARY是通过rs.stepDown()来切换PRIMARY,执行此命令后会在剩余的常规节点选一个来充当PRIMARY。
关于初始化中配置members的其他可选参数,可以到官网上查看,地址:http://www.mongodb.org/display/DOCS/Replica+Set+Configuration