准备:
3台安装好mongodb3.6的服务器
192.168.2.252:27017
192.168.2.179:27017
192.168.2.180:27017
各自放开防火墙端口,关闭selinux
配置文件
mongodb.conf
systemLog:
destination: file
logAppend: true
#log文件路径
path: db_path/mongodb.log
storage:
#db文件路径
dbPath: data_path
journal:
enabled: true
directoryPerDB: true
wiredTiger:
engineConfig:
#最大可使用内存
configString : cache_size=2G
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
#pid文件路径
pidFilePath: db_path/mongodb.pid
net:
#端口号
port: 27010
bindIp: 0.0.0.0
maxIncomingConnections: 20000
security:
javascriptEnabled: true
replication:
oplogSizeMB: 10240
#副本集名称
replSetName: repl1
启动
依次启动3台mongodb服务器
[root@localhost]# mongod -f mongodb.conf
配置成员(可在任意一台服务器进行)
登录mongodb
mongo --port 27010
一主双从
> cfg={_id:'repl1',members:[{_id:0,host:'192.168.2.252:27017'},{_id:1,host:'192.168.3.179:27017'},{_id:2,host:'192.168.3.180:27017'}]}
# 接下来,需要让配置生效:
> rs.initiate(cfg)
一主一从一仲裁
> cfg={_id:'repl1',members:[{_id:0,host:'192.168.2.252:27017'},{_id:1,host:'192.168.3.179:27017'}]}
# 接下来,需要让配置生效:
> rs.initiate(cfg)
# 然后执行下面命令,为集群添加仲裁节点:
> rs.addArb("192.168.3.180:27017");
这时候,再看看当前的状态:
rs.status()
我们在一开始,并没有强制设定哪个IP是primary节点,哪个是secondary节点。这完全由Mongodb集群来决定。这时在命令行下,提示符也发生了变化。
# Primary节点:
PRIMARY>
# Secondary节点:
SECONDARY>
# Arbiter节点()
ARBITER>
这是如果直接在secondary上操作,会发生如下错误:
SECONDARY> db.t.find()
error: { "$err" : "not master and slaveok=false", "code" : 13435 }
需要告知Mongodb集群,从哪台机器上进行读操作:
SECONDARY> rs.slaveOk()
not master and slaveok=false
这时就不会有刚才的错误了。
测试
# 在primary节点写入操作:
PRIMARY>; db.t.insert({uid:12345})
PRIMARY>; db.t.find()
{ "_id" : ObjectId("52848f782c6dd18b00fdf65d"), "uid" : 12345 }
# 在secondary节点读操作
SECONDARY>; db.t.find()
{ "_id" : ObjectId("52848f782c6dd18b00fdf65d"), "uid" : 12345 }
URI连接
使用URI格式连接mongo
# mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
mongodb://192.168.2.252:27017,192.168.2.179:27017,192.168.2.180:27017/?replicaSet=repl1
使用此方式连接,其中一个节点故障后会自动迁移,另外此方式还可通过readPreference
配置读写分离等相,其它参数详情请看官方文档