热门标签 | 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了




推荐阅读
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • 本文详细记录了 MIT 6.824 课程中 MapReduce 实验的开发过程,包括环境搭建、实验步骤和具体实现方法。 ... [详细]
  • MySQL Administrator: 监控与管理工具
    本文介绍了 MySQL Administrator 的主要功能,包括图形化监控 MySQL 服务器的实时状态、连接健康度、内存健康度以及如何创建自定义的健康图表。此外,还详细解释了状态变量和系统变量的管理。 ... [详细]
  • Ubuntu 14.04 系统安装后网卡名称修改方法
    本文介绍了在安装 Ubuntu 14.04 Server 版本后,如何将默认的网卡名称从非 eth 格式修改为传统的 eth 格式,并提供了详细的步骤和示例。 ... [详细]
  • 1.创建目录mkdir-phomerocketmqnamesvr1data&&mkdir-phomerocketmqnamesvr1log&&mkdir-phomerocketm ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • Vue CLI 基础入门指南
    本文详细介绍了 Vue CLI 的基础使用方法,包括环境搭建、项目创建、常见配置及路由管理等内容,适合初学者快速掌握 Vue 开发环境。 ... [详细]
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社区 版权所有