副本集有三类角色:master(primary),slave(secondary),仲裁服务器。
primary是主,只有primary能写入,secondary无法插入数据,且需要声明是slave才能查看数据
一般生产搞三个服务器做一个master和两个slave,再来一个服务器做仲裁节点服务器,说是有仲裁服务器才可以自动切换,但是我没有也可以的,要是不信,也可以自己试试,呵呵。
---副本集搭建,安装软件和单实例一模一样,下面是配置文件,三台服务器用不同的端口:
systemLog:
destination: file
logAppend: true
path: /data/mongodb-cluster/27017/mongodb.log
storage:
dbPath: /data/mongodb-cluster/27017
journal:
enabled: true
processManagement:
fork: true
net:
port: 27017
bindIp: 0.0.0.0
replication:
replSetName: zmh
另外两台的配置就省略了,只需要改path和端口信息就行。
---启动三个mongodb服务器,需要对应更改端口、数据目录、日志路径
/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27017/mongodb.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27018/mongodb.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27019/mongodb.conf
---在主节点写入所有节点的信息,注意了,conf文件的replSetName需要和config中 _id:"zmh"保持一致
config = { _id:"zmh", members:[
{_id:0,host:"192.167.100.181:27017"},
{_id:1,host:"192.167.100.182:27018"},
{_id:2,host:"192.167.100.183:27019"}]
}
---初始化副本集
use admin
rs.initiate(config)
---查看副本集状态
rs.status()
---完成初始化后,重启两个slave节点的mongo进程
----副本集同步测试
主节点插入数据:
use test
db.myuser.insert( {userid: 1} )
----从节点查看数据:
rs.slaveOk() //SECONDARY需要声明是slave才能查看数据
db.myuser.find()
{ "_id" : ObjectId("65406be329de1b2fafebfa56"), "userid" : 1 }
---查看slave的延时情况
rs.printSlaveReplicationInfo()
注意:优化参数要保持一致