1.安装三节点linux环境:196.168.1.111,196.168.1.112,192.168.1.113(三节点可彼此ping通)
2.三节点安装mongodb,参考https://blog.csdn.net/yezhenxu1992/article/details/51375123 安装3.2.20 版本mongodb
3.设置/etc/mongodb.conf
#数据路径 dbpath=/var/data #日志路径 logpath=/var/log/mongodb/mongodb.log #追加保存日志 logappend=true #监听端口 port=27017 fork=true # 未认证 noauth=true # 保存mongodb pid文件 pidfilepath=/var/run/mongodb/mongod.pid # 监听mongodb ip bind_ip=196.168.1.111 # 副本集名称 replSet=spock
启动mongodb,可以使用如下脚本:
#!/bin/bash pid_file=/var/run/mongodb/mongod.pid pid_dir=/var/run/mongodb data_dir=/var/data if [ ! -e "$pid_dir" ] then mkdir -p $pid_dir touch $pid_file else if [ ! -e "$pid_file" ] then touch $pid_file fi fi if [ ! -e $data_dir ] then mkdir -p $data_dir fi mongod -f /etc/mongodb.conf
4.配置副本集:
mongodb连接到任一mongodb 比如:mongo 196.168.1.111/test,如下图:
config={"_id":"spock",
"members":[ {"_id":0,"host":"196.168.1.111:27017"}, {"_id":1,"host":"196.168.1.112:27017"}, {"_id":2,"host":"196.168.1.113:27017"} ]} { "_id" : "spock", "members" : [ { "_id" : 0, "host" : "196.168.1.111:27017" }, { "_id" : 1, "host" : "196.168.1.112:27017" }, { "_id" : 2, "host" : "196.168.1.113:27017" } ] }
rs.initiate(conf)
5.副本集初始化完成后,三个节点上mongodb会根据初始化的先后顺序分出PRIMARY和SECONDARY.
6.三个节点中,如果primary节点异常,两个secondary节点中会自动选出primary节点,不影响提供读写功能。但是当此时,primary节点挂点,只剩下secondary时,服务不再提供写入功能,只能读取数据。除非强制将secondary转为primary后,在一个节点上提供读写功能。
比如只剩下一个节点196.168.1.111节点,强制重新配置副本集。
config={"_id":"spock", "members":[ {"_id":0,"host":"196.168.1.111:27017"}, ]} { "_id" : "spock", "members" : [ { "_id" : 0, "host" : "196.168.1.111:27017" }, ] } rs.reconfig(conf,{'force':true})
rs.reconfig(conf,{'force':true})强制重新配置副本集,注意在config中_id需要与原来保持一致。