第一步 编写Mongos的Dockerfile:
FROM mongo
EXPOSE 27017
ENTRYPOINT ["usr/bin/mongos"]
构建镜像:
sudo docker build -t askdog/mongos .
第二步 启动mongodb集群所需的Docker容器:
//创建副本集1
docker run --name rs1_srv1 -p 21117:27017 -d mongo --smallfiles --replSet rs1
docker run --name rs1_srv2 -p 21217:27017 -d mongo --smallfiles --replSet rs1
docker run --name rs1_srv3 -p 21317:27017 -d mongo --smallfiles --replSet rs1
-p 映射宿主机器和容器内部的端口。-d 表示deamon模式运行。--replSet 定义一个副本集名称
--smallfiles 减小初始化数据文件的大小,并限制数据文件最大为512M (reduces the initial size for data files and limits the maximum size to 512 megabytes).
//创建副本集2
docker run --name rs2_srv1 -p 22117:27017 -d mongo --smallfiles --replSet rs2
docker run --name rs2_srv2 -p 22217:27017 -d mongo --smallfiles --replSet rs2
docker run --name rs2_srv3 -p 22317:27017 -d mongo --smallfiles --replSet rs2
//创建配置容器
docker run --name cfg1 -p 20117:27017 -d mongo --smallfiles --configsvr --dbpath /data/db --port 27017
docker run --name cfg2 -p 20217:27017 -d mongo --smallfiles --configsvr --dbpath /data/db --port 27017
docker run --name cfg3 -p 20317:27017 -d mongo --smallfiles --configsvr --dbpath /data/db --port 27017
//创建mongo router
docker run --name mongos_router -p 27017:27017 -v /home/docker/volume/mongo/data:/data/db -d askdog/mongos --configdb 192.168.1.123:20117,192.168.1.123:20217,192.168.1.123:20317 --port 27017
第三步配置副本集与分片
//配置副本集1
//连接到rs1_svr1
mongo 192.168.1.123:21117
//配置副本集
rs.initiate();
rs.add("192.168.1.123:21217");
rs.add("192.168.1.123:21317");
rs.status();
#Fix hostname of primary.
cfg = rs.conf();
cfg.members[0].host = "192.168.1.123:21117";
rs.reconfig(cfg,{ force:true});
rs.status();
//配置副本集2
//连接到rs2_svr1
mongo 192.168.1.123:22117
//配置副本集
rs.initiate();
rs.add("192.168.1.123:22217");
rs.add("192.168.1.123:22317");
rs.status();
#Fix hostname of primary.
cfg = rs.conf();
cfg.members[0].host = "192.168.1.123:22117";
rs.reconfig(cfg,{ force:true});
rs.status();
//配置分片
//连接到路由服务器
mongo 192.168.1.123:27017
sh.addShard("rs1/192.168.1.123:21117");
sh.addShard("rs2/192.168.1.123:22117");
sh.status();