LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 数据库 >

利用Docker部署mongodb集群--分片与副本集

时间:2015-06-23 09:18来源:未知 编辑:linuxeye 点击:
环境 Docker version 1.6.2 mongodb 3.0.4 第一步 编写Dockerfile并生成镜像 主意包含两个Dockerfile镜像,一个mongod的,一个mongos(在集群中负责路由) 编写Mongod的Dockerfile: FROM ubuntu:14.04 RUN apt-key ad
环境 Docker version 1.6.2  mongodb 3.0.4

第一步  编写Dockerfile并生成镜像
主意包含两个Dockerfile镜像,一个mongod的,一个mongos(在集群中负责路由)
编写Mongod的Dockerfile:
FROM ubuntu:14.04
 
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
 
ENV MONGO_MAJOR 3.0
RUN echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list
 
# Install MongoDB
RUN apt-get update
RUN sudo apt-get install -y mongodb-org=3.0.4 mongodb-org-server=3.0.4 mongodb-org-shell=3.0.4 mongodb-org-mongos=3.0.4 mongodb-org-tools=3.0.4
 
# Create the MongoDB data directory
RUN mkdir -p /data/db
 
EXPOSE 27017
ENTRYPOINT ["usr/bin/mongod"]

构建上面的Dockerfile 生成镜像:
sudo docker build -t robin/mongod:master .
-t 指定要放的 仓库地址,冒号后面master代表tag,  后面那个点 代表当前目录(含有刚刚编写好的Dockerfile的目录)

编写Mongos的Dockerfile:
FROM  robin/mongod:master
EXPOSE 27017
ENTRYPOINT ["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 rs1
 
docker run --name rs1_srv2 -p 21217:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1
 
docker 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 rs2
 
docker run --name rs2_srv2 -p 22217:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2
 
docker 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 27017
 
docker run --name cfg2 -p 20217:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr  --dbpath /data/db --port 27017
 
docker 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_svr1
mongo <宿主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_svr1
mongo <宿主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>:27017
 
sh.addShard("rs1/<宿主ip>:27017");
sh.addShard("rs2/<宿主ip>:27017");
sh.status();
然后测试OK

如果用mac VirtualBox搭建docker 可能会遇到mongo分配文件空间不足的问题,调下磁盘大小就OK了
via:http://my.oschina.net/robinyao/blog/469431

转载请保留固定链接: https://linuxeye.com/database/2642.html

------分隔线----------------------------
标签:mongodbdocker
栏目列表
推荐内容