编写Mongos的Dockerfile:
FROM robin/mongod:masterEXPOSE 27017ENTRYPOINT ["usr/bin/mongos"]
构建镜像:
sudo docker build -t robin/mongos:master .
第二步 启动mongodb集群所需的Docker容器:
创建副本集1
docker run --name rs1_srv1 -p 21117:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1docker run --name rs1_srv2 -p 21217:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1docker run --name rs1_srv3 -p 21317:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1
-p 映射宿主机器和容器内部的端口。-d 表示deamon模式运行。
--smallfile 减小初始化数据文件的大小,并限制数据文件最大为512M (reduces the initial size for data files and limits the maximum size to 512 megabytes).
--noprealloc主要是为了节省硬盘,禁掉预先分配硬盘。生产环境不要用该选项,会导致性能下降,产生磁盘碎片。
创建副本集2
docker run --name rs2_srv1 -p 22117:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2docker run --name rs2_srv2 -p 22217:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2docker run --name rs2_srv3 -p 22317:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2
创建配置容器
docker run --name cfg1 -p 20117:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr --dbpath /data/db --port 27017docker run --name cfg2 -p 20217:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr --dbpath /data/db --port 27017docker run --name cfg3 -p 20317:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr --dbpath /data/db --port 27017
创建mongo router
找到配置容器对应的ip 和port
使用mac boot2docker +VirtualBox 一定要注意宿主机的ip是VirtualBox 而不是本机的
运行下边的命令得到容器宿主机器ip
boot2docker ip
docker run --name mongos_router -p 27017:27017 -d robin/mongos:master --configdb <宿主ip>:20117,<宿主ip>:20217,<宿主ip>:20317 --port 27017
这里只创建一台路由服务,这样会存在单点故障问题,可以创建三台来解决问题。
第三步配置副本集与分片
配置副本集1
//连接到rs1_svr1mongo <宿主ip>:21117//配置副本集rs.initiate();rs.add("<宿主ip>:21217");rs.add("<宿主ip>:21317");rs.status();Fix hostname of primary.cfg = rs.conf();cfg.members[0].host = "<宿主ip>:21117";rs.reconfig(cfg);rs.status();//以上命令一个一个执行
配置副本集2
//连接到rs2_svr1mongo <宿主ip>:22117//配置副本集rs.initiate();rs.add("<宿主ip>:22217");rs.add("<宿主ip>:22317");rs.status();Fix hostname of primary.cfg = rs.conf();cfg.members[0].host = "<宿主ip>:22117";rs.reconfig(cfg);rs.status();//以上命令一个一个执行
配置分片
//连接到路由服务器mongo <宿主ip>:27017sh.addShard("rs1/<宿主ip>:27017");sh.addShard("rs2/<宿主ip>:27017");sh.status();
然后测试OK
如果用mac VirtualBox搭建docker 可能会遇到mongo分配文件空间不足的问题,调下磁盘大小就OK了
转发标注来源:http://my.oschina.net/robinyao/blog/469431
利用Docker部署mongodb集群--分片与副本集
标签:
小编还为您整理了以下内容,可能对您也有帮助:
mongodb副本集的功能
功能如下:
1、数据冗余:副本集可以确保副本结点与主结点数据的更新,以防止单个数据库的服务宕机造成数据丢失的问题。
动故障转移:副本集没有固定的主结点,整个集群会选举出一个主结点,当这个主结点不会正常工作时,会选举一个副本结点切换为主结点。
mongodb副本集的功能
功能如下:
1、数据冗余:副本集可以确保副本结点与主结点数据的更新,以防止单个数据库的服务宕机造成数据丢失的问题。
动故障转移:副本集没有固定的主结点,整个集群会选举出一个主结点,当这个主结点不会正常工作时,会选举一个副本结点切换为主结点。
搭建MongoDB单节点副本集服务
mongo普通单节点不支持事务,需要使用副本集或者mongos才行,原因如下
参考官方文档
使用docker只需要三步即可启动一个副本集节点用于开发测试