热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【每日一博】利用Docker部署MongoDB集群

环境Dockerversion1.6.2 mongodb3.0.4第一步 编写Dockerfile并生成镜像主意包含两个Dockerfile镜像,一个mongod的,一个mongo


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




推荐阅读
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
author-avatar
mobiledu2502860117
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有