文档章节

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

robin-yao
 robin-yao
发布于 2015/06/22 17:52
字数 850
阅读 6337
收藏 118

环境 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了

转发标注来源:http://my.oschina.net/robinyao/blog/469431

© 著作权归作者所有

robin-yao
粉丝 167
博文 54
码字总数 61436
作品 0
杭州
私信 提问
加载中

评论(7)

C
CAOFEI123
您好!这只是单台服务器吧?三台如何搭建呀?
菜屌算不算
菜屌算不算
sh.addShard("rs1/<宿主ip>:27017");
sh.addShard("rs2/<宿主ip>:27017");
这个地方应该是副本集的端口吧?
星辰大海88
星辰大海88
http://git.oschina.net/supermy/hadoop-docker-nn
利用 docker 安装 hadoop/hive/hbase 集群,支持 snapp+rcfile,一键安装,一键初始化。
robin-yao
robin-yao 博主

引用来自“jamesmo”的评论

懒人镜像包,一键安装,一键初始化。
https://github.com/supermy/mytools/tree/master/mymongodb
星辰大海88
星辰大海88
懒人镜像包,一键安装,一键初始化。
https://github.com/supermy/mytools/tree/master/mymongodb
robin-yao
robin-yao 博主

引用来自“红薯”的评论

可以试试把代码放到 git.oschina.net ,然后一键部署到灵雀云上,跑 Docker 项目太方便:)

OK,可是试试13
红薯
红薯
可以试试把代码放到 git.oschina.net ,然后一键部署到灵雀云上,跑 Docker 项目太方便:)
MongoDB集群部署 - 带访问控制的分片副本集

1. 前言   Ceilometer将meter、event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘,而想删除旧数据,...

Sai18
2018/08/16
0
0
MongoDB trouble shoot sharded clusters

MongoDB trouble shoot sharded clusters 前言 Part1:写在最前 在MongoDB sharding环境中,我们会遇到一些常见的错误,本文就MongoDB官网列出的错误进行翻译。 Part2:整体环境 MongoDB 3.4....

dbapower
2018/07/04
0
0
TiDB和MongoDB分片集群架构比较

此文已由作者温正湖授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比。 首先展示TiDB的整体架构...

网易云
2018/10/19
0
0
Docker MongoDB v4.0.0 集群搭建

Docker MongoDB v4.0.0 集群搭建 2018年07月21日 16:17:41 vincerom 阅读数 3611 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:...

linjin200
09/18
41
0
搭建高可用mongodb集群(四)—— 分片

按照上一节中《搭建高可用mongodb集群(三)—— 深入副本集》搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大?数据压力大到机器支撑不了的...

观澜而索源
2014/03/29
349
0

没有更多内容

加载失败,请刷新页面

加载更多

cesium调用天地图服务

本文转载于:专业的前端网站➧cesium调用天地图服务 全球矢量地图服务 var viewer = new Cesium.Viewer("cesiumContainer", { animation: false, //是否显示动画控件 baseLayerPi...

前端老手
32分钟前
4
0
Docker常用命令

场景一:镜像下载、运行及删除 COMMAND DESC 查看 docker images 列出所有镜像(images) docker ps 列出正在运行的容器(containers) docker ps -a 列出所有的容器 docker pull centos 下载cen...

_Change_
33分钟前
5
0
Spark ML使用DataFrame进行K-Means

1.前言 前一篇文章使用了RDD的方式,进行了K-Means聚类. 从Spark 2.0开始,程序包中基于RDD的API spark.mllib已进入维护模式.现在,用于Spark的主要机器学习API是软件包中基于DataFrame的API...

一位不知名的帅气网友
35分钟前
4
0
当遇到美女面试官之如何理解Redis的Expire Key(过期键)

  在面试中遇到美女面试官时,我们以为面试会比较容易过,也能好好表现自己技术的时候了。然而却出现以下这一幕,当美女面试官听说你使用过Redis时,那么问题来了。 👩面试官:Q1,你知道...

ccww_
39分钟前
5
0
干货来袭!游戏背景音乐的角色创建和主界面

角色创建/选择 在一些大型的游戏中,例如多人在线的游戏玩家必须创建一个游戏的虚拟人物进行扮演游戏。初次玩这款游戏的人都会进行创建,选择职业起名字性别选择编辑人设样式等等的操作,通常...

奇亿音乐
43分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部