技术

Docker部署MongoDB并配置副本集(复制集)

July 12, 2018

拉取镜像

docker pull mongo:3.6.6

创建网络

docker network create mongo-cluster
docker network ls 

t1.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” 的复制集
t2.png
初始化配置
随意进入一个容器:

docker exec -it mongo1 mongo
>db = (new Mongo('localhost:27017')).getDB('test') 
test
> config = { "_id" : "mongo-repliset", "members" : [ { "_id" : 0, "host" : "外部IP:30001" }, { "_id" : 1, "host" : "外部IP:30002" }, { "_id" : 2, "host" : "外部IP:30003" } ] }
>rs.initiate(config)

tt3.png

代表主:
zhu.png
代表次:
ci.png

注意:默认情况下次节点是没有选举权的,所以如果挂了超过1台那么就不会再有主节点!需要根据下面命令到主节点进行优先级配置

Config=rs.conf()
Config.members[1].priority=10
Rs.reconfig(config)

常用命令:

添加副本集

PRIMARY>rs.add( { host: "ip:port", priority: 10 } )

删除节点

rs.remove(“ip:port”);

修改优先级

PRIMARY> config=rs.conf()
PRIMARY>config.members[2].priority = 10
PRIMARY> rs.reconfig(config)

添加新评论