环境
- MongoDB 版本:2.6.5
- 操作系统:Windows 7 SP1 (因为只有一台机器,所以会采用多实例来记录)
- 在 C:\Windows\System32\drivers\etc\hosts 中添加如下配置:
127.0.0.1 replset
- 三个节点结构如下图:
要求
1 个 Primary 节点,2 个 Secondary 节点,其中 1 个 Secondary 节点作为 Arbiter(仲裁) 节点。
三个节点的配置文件
primary
replSet = rs1# 端口port = 29031# 日志logpath = F:\replSet\master\logFiles\mongodb.log# 数据库dbpath = F:\replSet\master\data
secondary-1
replSet = rs1# 端口port = 29032# 日志logpath = F:\replSet\slaver-1\logFiles\mongodb.log# 数据库dbpath = F:\replSet\slaver-1\data
secondary-2 —— 作为仲裁(Arbiter)节点
replSet = rs1# 端口port = 29033# 日志logpath = F:\replSet\slaver-2\logFiles\mongodb.log# 数据库dbpath = F:\replSet\slaver-2\data
其实三个配置文件除了端口号其他都一样。这里我选择了 29031 作为 Primary 节点 。
启动三个节点
分别进入三个 MongoDB 主程序的 bin 目录 然后对应分别执行下面的三句命令:
F:\replSet\primary\bin> mongod -f ../primary.iniF:\replSet\secondary-1\bin> mongod -f ../secondary-1.iniF:\replSet\secondary-2\bin> mongod -f ../secondary-2.ini
配置 Primary 节点
config_rs1 = {_id : "rs1",members : [ { _id:0, host:"replset:29031", priority:1 },{ _id:1, host:"replset:29032", priority:1 },{ _id:2, host:"replset:29033", priority:1, "arbiterOnly": true } ]}rs.initiate(config_rs1)
进入 primary 节点的 bin 目录打开控制台通过命令:mongo --port 29031 连接到 primary 节点。分别执行以上两行命令。看到如下图信息表示配置成功:
注意事项
默认只可以从 primary 节点读写数据,secondary 节点不支持读写,在 secondary 节点执行 rs.slaveOk() 命令可让 secondary 节点支持读写。
其他
- 生产环境中应该还有一个仲裁节点,它不接受复制的数据。当 primary 节点出现问题(如:宕机)之后,它会从新选出一个 secondary 节点作为 primary 节点,以保证生产线不会出问题。原来的 primary 节点修复后将做为 secondary 节点存在。
- 单机配置复制集时,MongoDB 添加仲裁节点时 host 不能用 localhost 这个主机名 ,否则会提示重复的主机名(Duplicate host names)错误。解决办法就是文章开头说的在 hosts 做个映射。
参考资料
http://docs.mongodb.org/manual/core/replication/
http://docs.mongodb.org/manual/tutorial/add-replica-set-arbiter/
http://docs.mongodb.org/manual/reference/method/db.createUser/
http://blog.csdn.net/irelandken/article/details/8003315
http://liyanblog.cn/articles/2013/01/15/1358217684805.html