拉取镜像
`docker pull mongo:3.6.6`
创建网络
~~~
docker network create mongo-cluster
~~~
![Image](https://box.kancloud.cn/f91ccecd704dac361dc230d6f07d6cdb_465x119.png)
创建3个容器
~~~
docker run -d -p 30001:27017 --name mongo1 --net 网络ID mongo:3.6.6 mongod --replSet mongo-repliset
docker run -d -p 30002:27017 --name mongo2 --net 网络ID mongo:3.6.6 mongod --replSet mongo-repliset
docker run -d -p 30003:27017 --name mongo3 --net 网络ID mongo:3.6.6 mongod --replSet mongo-repliset
~~~
> 说明:
> docker run
> 从镜像启动一个容器
> -p 30001:27017
> 端口映射,容器内的端口 27017 映射到本机的端口 30001
> \--name mongo1
> 给这个容器起个名字 “mongo1”
> \--net mongo-cluster
> 把这个容器添加到网络 “mongo-cluster”
> mongo
> 要使用的镜像名
> mongod --replSet mongo-repliset
> 容器启动后要运行的命令,执行 mongod 命令,并通过参数指定这个示例加入名为 “mongo-repliset” 的复制集
![Image](https://box.kancloud.cn/e3878f65cfa8c4af5d2db7e7e85370e9_957x97.png)
初始化配置
随意进入一个容器:
~~~
docker exec -it mongo1 mongo
> db = (new Mongo('localhost:27017')).getDB('test')
test
> config = { "_id" : "mongo-repliset", "members" : [ { "_id" : 0, "host" : "192.168.0.145:30001" }, { "_id" : 1, "host" : "192.168.0.145:30002" }, { "_id" : 2, "host" : "192.168.0.145:30003" } ] }
注意:host必须是外部IP+端口,否则Java(其他的我不知道)下连接集群会失败!
> rs.initiate(config)
~~~
![Image](https://box.kancloud.cn/f7690d878ad6d34734bdf88c1dc186c0_1142x472.png)
![Image](https://box.kancloud.cn/53ad2a2af9172804a91ad22090d8a95c_194x25.png)这个代表次
![Image](https://box.kancloud.cn/d8804a04ba8ea58efed6bdb1302d9531_171x28.png) 这个代表主
* * * * *
**常用命令**
添加副本集
`PRIMARY>rs.add( { host: "ip:port", priority: 10 } )`
添加/删除节点
~~~
rs.add(“ip:port”);
rs.remove(“ip:port”);
~~~
添加冲裁节点
~~~
rs.add(‘mongodb3.example.net:27017‘, true)
~~~
修改优先级
~~~
Config=rs.conf()
Config.members[2].priority=10
Rs.reconfig(config)
~~~