MongoDB - 副本集

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()查看。

你可能感兴趣的:(MongoDB - 副本集)