Docker部署MongoDB副本集
1.创建docker桥接网络
sudo docker network create mongo-rs
2.启动3个MongoDB实例,注意要指定上一步创建的桥接网络
sudo docker run --name mongo1 --net mongo-rs -p 27011:27017 -v /data/db/mongo1:/data/db -d mongo:4.0.4 --replSet "rs0"
sudo docker run --name mongo2 --net mongo-rs -p 27012:27017 -v /data/db/mongo2:/data/db -d mongo:4.0.4 --replSet "rs0"
sudo docker run --name mongo3 --net mongo-rs -p 27013:27017 -v /data/db/mongo3:/data/db -d mongo:4.0.4 --replSet "rs0"
更多参数说明参考docker hub
3.通过docker进入其中一个容器
sudo docker exec -it mongo1 /bin/bash
4.然后使用容器中的mongo客户端连接MongoDB服务,再执行副本集初始化命令
rs.initiate({
_id:"rs0",
members:[
{_id:1,host:"mongo1:27017"},
{_id:2,host:"mongo2:27017"},
{_id:3,host:"mongo3:27017"}
]
})
如果副本集希望给宿主机外部环境使用,请使用宿主机ip及相应实例的映射端口作为host,如:
rs.initiate({
_id:"rs0",
members:[
{_id:1,host:"172.18.20.35:27011"},
{_id:2,host:"172.18.20.35:27012"},
{_id:3,host:"172.18.20.35:27013"}
]
})
5.初始化成功以后,会显示以下结果
{
"ok" : 1,
"operationTime" : Timestamp(1541000706, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1541000706, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
这一步完成以后,MongoDB副本集就完成初始化了。另外,命令行提示也变成了rs0:SECONDARY>
。
特别需要注意的是SECONDARY节点默认情况下不能读写,每次连接到SECONDARY节点都需要设定slaveOk为true。
rs0:SECONDARY> rs.slaveOk()
rs0:SECONDARY> rs.slaveOk()
rs0:PRIMARY>
副本集初始化完成以后,可以使用rs.conf()
查看配置,rs.status()
查看状态。
更多的副本集相关命令可以通过rs.help()
查看。