文档章节

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

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

环境 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
粉丝 155
博文 53
码字总数 60598
作品 0
杭州
加载中

评论(7)

C
CAOFEI123
您好!这只是单台服务器吧?三台如何搭建呀?
菜屌算不算
菜屌算不算
sh.addShard("rs1/<宿主ip>:27017");
sh.addShard("rs2/<宿主ip>:27017");
这个地方应该是副本集的端口吧?
瘦-马
瘦-马
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
瘦-马
瘦-马
懒人镜像包,一键安装,一键初始化。
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
08/16
0
0
MongoDB trouble shoot sharded clusters

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

dbapower
07/04
0
0
MongoDB之分片集群(Sharding)

MongoDB之分片集群(Sharding) 一、基本概念 分片(sharding)是一个通过多台机器分配数据的方法。MongoDB使用分片支持大数据集和高吞吐量的操作。大数据集和高吞吐量的数据库系统挑战着单一...

小忽悠
06/21
0
0
TiDB和MongoDB分片集群架构比较

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

网易云
昨天
0
0
搭建高可用mongodb集群(四)—— 分片

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

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

没有更多内容

加载失败,请刷新页面

加载更多

简易审计系统

1、有时候我们需要对线上用户的操作进行记录,可以进行追踪,出现问题追究责任,但是linux自带的history并不会实时的记录(仅仅在内存中,当用户正常退出(exit logout )时才会记录到history文件里...

芬野de博客
11分钟前
0
0
Qt那些事0.0.6

QML中使用Image,在设置source的后,通过Qt Quick2 Preview(qmlscene)遇到了图片找不到的问题: Image { id: success_img anchors.centerIn: parent ...

Ev4n
12分钟前
0
0
白话SpringCloud | 第十一章:路由网关(Zuul):利用swagger2聚合API文档

前言 通过之前的两篇文章,可以简单的搭建一个路由网关了。而我们知道,现在都奉行前后端分离开发,前后端开发的沟通成本就增加了,所以一般上我们都是通过swagger进行api文档生成的。现在由...

oKong
18分钟前
1
0
javah 生成jni文件的问题

命令:(on macbook for android) javah -d src/main/jni -jni -classpath /Users/Carlyle_Pro/Documents/android_adt/sdk/platforms/android-25/android.jar:build/intermediates/classes/......

Carlyle_Lee
20分钟前
0
0
Ubuntu 安装ssh服务以及开启root用户ssh登录

一、安装ssh服务 安装ssh服务 sudo apt-get update sudo apt-get install openssh-server 安装完成后启动ssh服务 sudo service ssh start 二、开启root用户ssh登录 解决root远程ssh不能登录,...

15834278076
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部