简单地在Docker环境上搭建一个无认证的MongoDB集群。
1.本文使用的容器
集群角色  ContainerName     IP:port
Config Server   cfg_1        10.1.1.2:27019
Config Server   cfg_2        10.1.1.3:27019
Config Server   cfg_3        10.1.1.4:27019
Shard Server   shard1_1     10.1.1.5:27018
Shard Server   shard1_2     10.1.1.6:27018
Shard Server   shard1_3     10.1.1.7:27018
Shard Server   shard2_1     10.1.1.8:27018
Shard Server   shard2_2     10.1.1.9:27018
Shard Server   shard2_3     10.1.1.10:27018
Shard Server   shard3_1     10.1.1.11:27018
Shard Server   shard3_2     10.1.1.12:27018
Shard Server   shard3_3     10.1.1.13:27018
Mongos       mongos_1     10.1.1.14:27020
Mongos      mongos_2      10.1.1.15:27020
Mongos       mongos_3     10.1.1.16:27020

2. 从Docker Hub上拉取MongoDB镜像
docker pull mongo:4.0.0

3. Docker网络配置 为MongoDB集群创建独立的docker网桥
docker network create --subnet=10.1.1.0/24 mongodb0

4. 准备MongoDB集群配置文件
准备Docker挂载的目录
mkdir -p /home/dmc/configsvr
mkdir -p /home/dmc/shard1
mkdir -p /home/dmc/shard2
mkdir -p /home/dmc/shard3
mkdir -p /home/dmc/mongos

Config-Server 配置文件
路径:vim /home/dmc/configsvr/mongod.conf
说明:MongoDB v3.4 之后要求Config-Server也需要组成副本集形式
storage:
dbPath: /data/db
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
bindIp: 127.0.0.1
processManagement:
timeZoneInfo: /usr/share/zoneinfo
replication:
replSetName: cfg
sharding:
clusterRole: configsvr

Shard-Server 配置文件
路径:vim /home/dmc/shard1/mongod.conf
说明:此处配置3个分片为shard1,shard2,shard3;每个分片都需要组成副本集。
shard2,shard3目录下配置文件同名,修改replSetName字段的值分别为’shard2’和’shard3’
storage:
dbPath: /data/db
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
bindIp: 127.0.0.1
processManagement:
timeZoneInfo: /usr/share/zoneinfo
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr

Mongos 配置文件
路径:/home/dmc/mongos/mongos.conf
说明:mongos不需要存储因此去掉storage字段;可任意配置net.port字段,
需要指定processManagement.fork为true以–fork方式启动;
sharding.configDB字段用于指定Config-Server集群地址,
格式为[replSetName]/[config-server1:port],[config-server2:port],[config-server3:port]…
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongos.log
net:
port: 27020
bindIp: 127.0.0.1
processManagement:
fork: true
timeZoneInfo: /usr/share/zoneinfo
sharding:
configDB: cfg/10.1.1.2:27019,10.1.1.3:27019,10.1.1.4:27019

5. 启动Docker容器 启动3个Config-Server容器:
docker run -d --name=cfg_1 --network=mongodb0 --ip=10.1.1.2 -v /home/dmc/configsvr:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf
docker run -d --name=cfg_2 --network=mongodb0 --ip=10.1.1.3 -v /home/dmc/configsvr:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf
docker run -d --name=cfg_3 --network=mongodb0 --ip=10.1.1.4 -v /home/dmc/configsvr:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf

进入其中一个容器配置Config-Server副本集:
# 宿主机
docker exec -it cfg_1 bash
# 容器中
mongo --port 27019
# Mongo Shell中
rs.initiate({
"_id":"cfg",
"members":[
{
"_id":0,
"host":"10.1.1.2:27019"
},
{
"_id":1,
"host":"10.1.1.3:27019"
},
{
"_id":2,
"host":"10.1.1.4:27019"
}
]
})

启动3*3个Shard-Server容器:说明:分片服务器启动后默认是以27018作为端口。
# 启动第一个分片 - shard1
docker run -d --name=shard1_1 --network=mongodb0 --ip=10.1.1.5 -v /home/dmc/shard1:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf
docker run -d --name=shard1_2 --network=mongodb0 --ip=10.1.1.6 -v /home/dmc/shard1:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf
docker run -d --name=shard1_3 --network=mongodb0 --ip=10.1.1.7 -v /home/dmc/shard1:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf

进入其中一个容器配置Shard-Server副本集:
# 宿主机
docker exec -it shard1_1 bash
# 容器中
mongo --port 27018
# Mongo Shell中
rs.initiate({
"_id":"shard1",
"members":[
{
"_id":0,
"host":"10.1.1.5:27018"
},
{
"_id":1,
"host":"10.1.1.6:27018"
},
{
"_id":2,
"host":"10.1.1.7:27018"
}
]
})

# 启动第二个分片 - shard2
docker run -d --name=shard2_1 --network=mongodb0 --ip=10.1.1.8 -v /home/dmc/shard2:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf
docker run -d --name=shard2_2 --network=mongodb0 --ip=10.1.1.9 -v /home/dmc/shard2:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf
docker run -d --name=shard2_3 --network=mongodb0 --ip=10.1.1.10 -v /home/dmc/shard2:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf

进入其中一个容器配置Shard-Server副本集:
# 宿主机
docker exec -it shard2_1 bash
# 容器中
mongo --port 27018
# Mongo Shell中
rs.initiate({
"_id":"shard2",
"members":[
{
"_id":0,
"host":"10.1.1.8:27018"
},
{
"_id":1,
"host":"10.1.1.9:27018"
},
{
"_id":2,
"host":"10.1.1.10:27018"
}
]
})

# 启动第三个分片 - shard3
docker run -d --name=shard3_1 --network=mongodb0 --ip=10.1.1.11 -v /home/dmc/shard3:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf
docker run -d --name=shard3_2 --network=mongodb0 --ip=10.1.1.12 -v /home/dmc/shard3:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf
docker run -d --name=shard3_3 --network=mongodb0 --ip=10.1.1.13 -v /home/dmc/shard3:/etc/mongodb mongo:latest -f /etc/mongodb/mongod.conf

进入其中一个容器配置Shard-Server副本集:
# 宿主机
docker exec -it shard3_1 bash
# 容器中
mongo --port 27018
# Mongo Shell中
rs.initiate({
"_id":"shard3",
"members":[
{
"_id":0,
"host":"10.1.1.11:27018"
},
{
"_id":1,
"host":"10.1.1.12:27018"
},
{
"_id":2,
"host":"10.1.1.13:27018"
}
]
})

启动3个mongos服务器 说明:这里也使用了mongo镜像,但是需要开启mongos进程,mongod进程并不需要用到。
docker run -d --name=mongos_1 --network=mongodb0 --ip=10.1.1.14 -v /home/dmc/mongos:/etc/mongodb mongo:latest
docker run -d --name=mongos_2 --network=mongodb0 --ip=10.1.1.15 -v /home/dmc/mongos:/etc/mongodb mongo:latest
docker run -d --name=mongos_3 --network=mongodb0 --ip=10.1.1.16 -v /home/dmc/mongos:/etc/mongodb mongo:latest

进入每个容器中,启动mongos进程(此处可以改进一下,自动运行mongos进程)
# 宿主机
docker exec -it mongos_1 bash
# 容器中
mongos -f /etc/mongodb/mongos.conf

可以就在其中一个mongos容器中使用mongo shell连接mongos进程配置分片集群
# 连接mongos,端口号与mongos配置文件中设定一致
mongo -port 27020
# 将分片加入集群
sh.addShard("shard1/10.1.1.5:27018,10.1.1.6:27018,10.1.1.7:27018")
sh.addShard("shard2/10.1.1.8:27018,10.1.1.9:27018,10.1.1.10:27018")
sh.addShard("shard3/10.1.1.11:27018,10.1.1.12:27018,10.1.1.13:27018")

# 对数据库开启分片功能
sh.enableSharding("[dbName]")
# 对数据库中集合开启分片,并指定片键
sh.shardCollection("[dbName.collectionName]",{[keyName]:1})

6. 尝试写入数据观察数据分块
# 插入5百万个简单的文档,耐心等待插入结束
for(var i=1;i<=5000000;i++){
db.coll1.insert({
name:i,
age:Math.round(Math.random() * 100),
score1:Math.round(Math.random() * 100),
score2:Math.round(Math.random() * 100),
score3:Math.round(Math.random() * 100),
score4:Math.round(Math.random() * 100),
score5:Math.round(Math.random() * 100)
});
}

# 查看分片状态
sh.status()

Docker MongoDB 集群搭建的更多相关文章

  1. Mongodb集群搭建之 Replica Set

    Mongodb集群搭建之 Replica Set Replica Set 中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了, ...

  2. Mongodb 集群搭建以及常见错误

    Mongodb 集群搭建以及常见错误 1 关于Replica Sets +Sharding(主从复制加分片)搭建,不这详细去说,网上有很多,大部分的例子就三台服务器之间做主从复制,分2个shard,架 ...

  3. MongoDB集群搭建-副本集

    MongoDB集群搭建-副本集 概念性的知识,可以参考本人博客地址: 一.Master-Slave方案: 主从: 二.Replica Set方案: 副本集: 步骤:(只要按步骤操作,100%成功) 1 ...

  4. MongoDB集群搭建-分片

    MongoDB集群搭建-分片 一.场景: 1,机器的磁盘不够用了.使用分片解决磁盘空间的问题. 2,单个mongod已经不能满足写数据的性能要求.通过分片让写压力分散到各个分片上面,使用分片服务器自身 ...

  5. mongodb集群搭建过程记录

    mongodb集群搭建花费比较长的时间,在此记录下过程,方便以后使用 一 软件环境 系统:ubuntu 18.04,mongodb 社区版4.2 https://docs.mongodb.com/ma ...

  6. Mongodb集群搭建之 Sharding+ Replica Sets集群架构(2)

    参考http://blog.51cto.com/kaliarch/2047358 一.概述 1.1 背景 为解决mongodb在replica set每个从节点上面的数据库均是对数据库的全量拷贝,从节 ...

  7. Mongodb集群搭建的三种方式

    转自:http://blog.csdn.net/luonanqin/article/details/8497860 MongoDB是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key- ...

  8. Mongodb集群搭建

    搭建高可用Mongodb集群 http://www.lanceyan.com/category/tech/mongodb/page/2 再看MongoDB副本集  http://blog.itpub. ...

  9. windows下mongodb集群搭建

    本文介绍在windows环境下如何搭建一个高可用性的mongodb集群.系统环境为win7,mongodb版本为3.6.3. 本文采用的是分片+副本集的方式搭建集群,将分别介绍如何使用副本集和分片来提 ...

随机推荐

  1. Day 26:Dom4j修改xml

    Dom4j:Writing a document to a file import java.io.File; import java.io.FileOutputStream; import org. ...

  2. 实训30 延时中断组织块0B20仿真

    实训30 延时中断组织块的仿真试验   问题1 系统功能块SFC中提供了一些查询中断状态字的指令,举例说明 例如 SF34 "QRY_DINT" 用来查询 "延时中断&q ...

  3. windowsXP下 使用live555搭建视频服务器,并使用ffplay和VLC播放

    首先在官网下载live555:http://www.live555.com/mediaServer/#downloading当然是现在windows的版本了!!上官网下载FFmpeg:http://f ...

  4. .NET配置问题

    Ext.NET MVC 配置问题总结       随着VS版本和.NET MVC版本.EF的版本的不断更新,虽然很多功能随着版本的提升而更完善,但对于旧版本开发的软件就有点悲催了,或许很多开发者都遇到 ...

  5. python中的__code__

    简单总结几个常用的__code__的用法: (1)func.__code__.co_argcount:返回函数的参数个数,这里的参数个数不包含*args与**kwargs,具体来讲就是*args前的参 ...

  6. css渐变实现

    body{ width: 100%; height: 100%; overflow: hidden; } *{ margin: 0px; padding: 0px; font-size: 0px; } ...

  7. (排序)P1068 分数线划定

    题解: 需要注意的是,快排完之后并不是按照编号从小到大的顺序输出 #include<iostream>using namespace std;int r=0;void swap(int & ...

  8. SpringBoot+SpringSecurity之如何forword到登录页面

    当我们在项目中引入了SpringSecurity框架进行身份校验的时候,如果某个请求需要用户身份认证,那么SpringSecurity会将用户redirect到登录页面.但是有些时候我们希望是forw ...

  9. java课程之团队开发冲刺阶段2.1

    一.总结昨天任务 1.由于使用的模拟器,自己没有安卓手机,所以在制作手机静音功能的时候有一些麻烦 2.功能没有完成 二.遇到的困难 1.安卓手机的静音功能分为五个部分的静音,需要每个都要静音 2.当在 ...

  10. Vue.js(19)之 封装calendar组件

    效果 需求 1.实现一个日历组件,如图: 2.显示某天的事项: 3.事项是模拟父组件请求接口返回的,数据格式如下: [ { id: '232', date: '2019-06-01', info: ' ...