MongoDB 4.0 副本集模式
MongoDB 4.0 副本集模式的配置方式
在Ali云新买了一个云服务器,尝试安装了MongoDB4.0,在准备试试主从同步模式时,中途提示
Master/slave replication is no longer supported
应该是MongoDB版本太高了,主从模式应该是在3.4以下版本支持。好吧,那就试试副本集模式咯
首先添加mongod的配置信息,由于需要配置多个副本集,避免下次启动时的麻烦,那就直接写脚本吧。
// vi start.sh
mongod --replSet shaw/127.0.0.1 --port 27011 --dbpath ./dataRepl1 --fork --logpath ./log1
mongod --replSet shaw/127.0.0.1 --port 27012 --dbpath ./dataRepl2 --fork --logpath ./log2
mongod --replSet shaw/127.0.0.1 --port 27013 --dbpath ./dataRepl3 --fork --logpath ./log3
这里需要客户端在后台运行,所以使用–fork,且同时需要配置日志logpath
本次是在单机的不同端口部署副本集,所以ip相同,port不同。shaw是副本集名称。
如果需要部署到不同机器,修改ip不同,端口可以都是27017。
bash start.sh
执行之后进入任意一个mongo客户端:
$:mongo 127.0.0.1:27011
定义一个配置:
config = {_id: 'shaw',
members: [
{_id: 0, host: '10.10.20.48:27017'},
{_id: 1, host: '10.10.20.48:27018'},
{_id: 2, host: '10.10.20.48:27019'}
]
}
初始化:
$:rs.initiate(config)
查看副本集状态:
好了,此时基本配置完成。接下来可以添加测试数据看看:
进入127.0.0.1:27011客户端(PRIMARY):
$:mongo 127.0.0.1:27011
添加测试数据:
$:db.mycollection.insert({name:'shaw wong'})
切换到127.0.0.1:27012(SECONDARY副本),在SECONDARY副本中insert数据时会报错,这是正常的,因为SECONDARY副本是不允许读写的:
$:db.mycollection.find({})
查询报错:
此时需要设置$:db.getMongo().setSlaveOk();
然后就可以查询PRIMARY中插入的数据了。
如果手动关闭或者宕机PRIMARY,mongo会自动再找一个SECONDARY副本升级为PRIMARY,并且老的PRIMARY再次重启之后变为SECONDARY副本,不会恢复成PRIMARY。
可以尝试执行ps -ef | grep mongo
查看启动的mongo客户端PID,然后手动杀掉PRIMARY,再进入任意一个正在运行的客户端使用$:rs.status()
查看详细信息
可以看到27011端口的客户端连接被拒绝,同时27013端口的客户端升级为PRIMARY。
之后再重新启动27011端口的客户端,查看状态
27011客户端变成了SECONDARY副本。