009.MongoDB分片群集部署
一 前期准备
1.1 组件说明
1.2 组件规划
|
MongoDB角色
|
服务器一
mongo01
|
服务器二
mongo02
|
服务器三
mongo03
|
服务器四
mongo04
|
服务器五
mongo05
|
|
mongos
|
172.24.8.74:27017
|
172.24.8.75:27017
|
|||
|
config server
|
172.24.8.71:20001
主节点
|
172.24.8.72:20001
副节点
|
172.24.8.73:20001
仲裁节点
|
||
|
shard server 1
|
172.24.8.71:20002
主节点
|
172.24.8.72:20002
副节点
|
172.24.8.73:20002
仲裁节点
|
||
|
shard server 2
|
172.24.8.71:20003
仲裁节点
|
172.24.8.72:20003
主节点
|
172.24.8.73:20003
副节点
|
||
|
shard server 3
|
172.24.8.71:20004
副节点
|
172.24.8.72:20004
仲裁节点
|
172.24.8.73:20004
主节点
|
1.3 其他准备
[root@localhost ~]# vi /etc/hosts #追加如下解析
172.24.8.71 mongo01
172.24.8.72 mongo02
172.24.8.73 mongo03
172.24.8.74 mongo04
172.24.8.75 mongo05
二 MongoDB安装
2.1 下载tar包
[root@mongo01 ~]# yum -y install libcurl openssl #安装依赖包
[root@mongo01 ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.9.tgz
2.2 解压MongoDB包
[root@mongo01 ~]# tar -zxvf mongodb-linux-x86_64-rhel70-4.0.9.tgz
[root@mongo01 ~]# mv mongodb-linux-x86_64-rhel70-4.0.9 /usr/local/mongodb
[root@mongo01 ~]# useradd mongod -s /bin/false -c mongod
[root@mongo01 ~]# chown -R mongod:mongod /usr/local/mongodb/
2.3 添加PATH路径
[root@mongo01 ~]# echo "export PATH=/usr/local/mongodb/bin::$PATH" >> .bashrc
2.4 配置key
[root@mongo01 ~]# mkdir -p /etc/mongo
[root@mongo01 ~]# openssl rand -base64 100 > /etc/mongo/mongo.key
[root@mongo01 ~]# chown -R mongod:mongod /etc/mongo
[root@mongo01 ~]# chmod 600 /etc/mongo/mongo.key
[root@mongo01 ~]# scp -r /etc/mongo root@mongo02:/etc/
[root@mongo01 ~]# scp -r /etc/mongo root@mongo03:/etc/
[root@mongo01 ~]# scp -r /etc/mongo root@mongo04:/etc/
[root@mongo01 ~]# scp -r /etc/mongo root@mongo05:/etc/
[root@mongo02 ~]# chown -R mongod:mongod /etc/mongo
[root@mongo03 ~]# chown -R mongod:mongod /etc/mongo
[root@mongo04 ~]# chown -R mongod:mongod /etc/mongo
[root@mongo05 ~]# chown -R mongod:mongod /etc/mongo
2.5 创建MongoDB相关目录
[root@mongo01 ~]# mkdir -p /var/log/mongodb #日志目录
[root@mongo01 ~]# mkdir -p /var/run/mongodb #pid目录
[root@mongo01 ~]# mkdir -p /var/lib/mongodb/config #config server存储目录
[root@mongo01 ~]# mkdir -p /var/lib/mongodb/shard{1,2,3} #shard server存储目录
[root@mongo01 ~]# chown -R mongod:mongod /var/log/mongodb
[root@mongo01 ~]# chown -R mongod:mongod /var/run/mongodb
[root@mongo01 ~]# chown -R mongod:mongod /var/lib/mongodb
三 配置config server
3.1 服务器一配置
[root@mongo01 ~]# cat << EOF > /etc/mongo/config.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/config.log storage:
dbPath: /var/lib/mongodb/config
journal:
enabled: true
wiredTiger:
engineConfig:
directoryForIndexes: true processManagement:
fork: true
pidFilePath: /var/run/mongodb/config.pid
timeZoneInfo: /usr/share/zoneinfo net:
port: 20001
bindIp: 0.0.0.0
maxIncomingConnections: 500 security:
keyFile: /etc/mongo/mongo.key
authorization: enabled replication:
replSetName: configs sharding:
clusterRole: configsvr
EOF
[root@mongo01 ~]# scp -r /etc/mongo/config.conf root@mongo02:/etc/mongo/config.conf
[root@mongo01 ~]# scp -r /etc/mongo/config.conf root@mongo03:/etc/mongo/config.conf
3.2 启动mongod
[root@mongo01 ~]# mongod --config /etc/mongo/config.conf
[root@mongo02 ~]# mongod --config /etc/mongo/config.conf
[root@mongo03 ~]# mongod --config /etc/mongo/config.conf
3.3 初始化configsrv副本集群
[root@mongodb01 ~]# mongo --port 20001
> config = { _id: "configs", members: [
{_id: 0, host: "172.24.8.71:20001"},
{_id: 1, host: "172.24.8.72:20001"},
{_id: 2, host: "172.24.8.73:20001"}]
}
3.4 初始化副本集
> rs.initiate(config) #初始化集群
my_rep1:PRIMARY> rs.status() #查看集群状态

四 配置shard server 1
4.1 服务器一配置
[root@mongo01 ~]# cat << EOF > /etc/mongo/shard1.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/shard1.log storage:
dbPath: /var/lib/mongodb/shard1
journal:
enabled: true
wiredTiger:
engineConfig:
directoryForIndexes: true processManagement:
fork: true
pidFilePath: /var/run/mongodb/shard1.pid
timeZoneInfo: /usr/share/zoneinfo net:
port: 20002
bindIp: 0.0.0.0
maxIncomingConnections: 500 security:
keyFile: /etc/mongo/mongo.key
authorization: enabled replication:
replSetName: shard1 sharding:
clusterRole: shardsvr
EOF
[root@mongo01 ~]# scp -r /etc/mongo/shard1.conf root@mongo02:/etc/mongo/shard1.conf
[root@mongo01 ~]# scp -r /etc/mongo/shard1.conf root@mongo03:/etc/mongo/shard1.conf
4.2 启动mongod
[root@mongo01 ~]# mongod --config /etc/mongo/shard1.conf
[root@mongo02 ~]# mongod --config /etc/mongo/shard1.conf
[root@mongo03 ~]# mongod --config /etc/mongo/shard1.conf
4.3 初始化configsrv副本集群
[root@mongodb01 ~]# mongo --port 20002
> config = { _id: "shard1", members: [
{_id: 0, host: "172.24.8.71:20002",priority:2},
{_id: 1, host: "172.24.8.72:20002",priority:1},
{_id: 2, host: "172.24.8.73:20002",arbiterOnly:true}]
}
4.4 初始化副本集
> rs.initiate(config) #初始化集群
my_rep1:PRIMARY> rs.status() #查看集群状态

五 配置shard server 2
5.1 服务器一配置
[root@mongo01 ~]# cat << EOF > /etc/mongo/shard2.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/shard2.log storage:
dbPath: /var/lib/mongodb/shard2
journal:
enabled: true
wiredTiger:
engineConfig:
directoryForIndexes: true processManagement:
fork: true
pidFilePath: /var/run/mongodb/shard2.pid
timeZoneInfo: /usr/share/zoneinfo net:
port: 20003
bindIp: 0.0.0.0
maxIncomingConnections: 500 security:
keyFile: /etc/mongo/mongo.key
authorization: enabled replication:
replSetName: shard2 sharding:
clusterRole: shardsvr
EOF
[root@mongo01 ~]# scp -r /etc/mongo/shard2.conf root@mongo02:/etc/mongo/shard2.conf
[root@mongo01 ~]# scp -r /etc/mongo/shard2.conf root@mongo03:/etc/mongo/shard2.conf
5.2 启动mongod
[root@mongo01 ~]# mongod --config /etc/mongo/shard2.conf
[root@mongo02 ~]# mongod --config /etc/mongo/shard2.conf
[root@mongo03 ~]# mongod --config /etc/mongo/shard2.conf
5.3 初始化configsrv副本集群
[root@mongodb02 ~]# mongo --port 20003
> config = { _id: "shard2", members: [
{_id: 0, host: "172.24.8.71:20003",arbiterOnly:true},
{_id: 1, host: "172.24.8.72:20003",priority:2},
{_id: 2, host: "172.24.8.73:20003",priority:1}]
}
> rs.initiate(config) #初始化集群
my_rep1:PRIMARY> rs.status() #查看集群状态

六 配置shard server 3
6.1 服务器一配置
[root@mongo01 ~]# cat << EOF > /etc/mongo/shard3.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/shard3.log storage:
dbPath: /var/lib/mongodb/shard3
journal:
enabled: true
wiredTiger:
engineConfig:
directoryForIndexes: true processManagement:
fork: true
pidFilePath: /var/run/mongodb/shard3.pid
timeZoneInfo: /usr/share/zoneinfo net:
port: 20004
bindIp: 0.0.0.0
maxIncomingConnections: 500 security:
keyFile: /etc/mongo/mongo.key
authorization: enabled replication:
replSetName: shard3 sharding:
clusterRole: shardsvr
EOF
[root@mongo01 ~]# scp -r /etc/mongo/shard3.conf root@mongo02:/etc/mongo/shard3.conf
[root@mongo01 ~]# scp -r /etc/mongo/shard3.conf root@mongo03:/etc/mongo/shard3.conf
6.2 启动mongod
[root@mongo01 ~]# mongod --config /etc/mongo/shard3.conf
[root@mongo02 ~]# mongod --config /etc/mongo/shard3.conf
[root@mongo03 ~]# mongod --config /etc/mongo/shard3.conf
6.3 初始化configsrv副本集群
[root@mongodb01 ~]# mongo --port 20004
> config = { _id: "shard3", members: [
{_id: 0, host: "172.24.8.71:20004",priority:1},
{_id: 1, host: "172.24.8.72:20004",arbiterOnly:true},
{_id: 2, host: "172.24.8.73:20004",priority:2}]
}
6.4 初始化副本集
> rs.initiate(config) #初始化集群
my_rep1:PRIMARY> rs.status() #查看集群状态

七 配置mongos路由节点
7.1 创建MongoDB相关目录
[root@mongo04 ~]# mkdir -p /var/log/mongodb #日志目录
[root@mongo04 ~]# mkdir -p /var/run/mongodb #pid目录
[root@mongo04 ~]# chown -R mongod:mongod /var/log/mongodb
[root@mongo04 ~]# chown -R mongod:mongod /var/run/mongodb
7.2 服务器四配置
[root@mongo04 ~]# cat << EOF > /etc/mongo/mongos.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongos.log processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongos.pid
timeZoneInfo: /usr/share/zoneinfo net:
port: 27017
bindIp: 0.0.0.0
maxIncomingConnections: 2000 security:
keyFile: /etc/mongo/mongo.key
# authorization: enabled sharding:
configDB: configs/172.24.8.71:20001,172.24.8.72:20001,172.24.8.73:20001
EOF
[root@mongo04 ~]# scp -r /etc/mongo/mongos.conf root@mongo05:/etc/mongo/mongos.conf
7.3 启动mongos
[root@mongo04 ~]# mongos --config /etc/mongo/mongos.conf
[root@mongo05 ~]# mongos --config /etc/mongo/mongos.conf
7.4 创建管理员用户
[root@mongodb04 ~]# mongo --port 27017
mongos> use admin #进入admin数据库
mongos> db.createUser({ user: "admin", pwd: "admin", roles: [{ role: "_system", db: "admin" }] })
mongos> db.createUser({"user":"root","pwd":"root","roles":["root"]})
mongos> db.auth("admin", "admin") #验证创建结果
1
mongos> db.getUsers()
mongos> db.system.users.find().pretty() #查看全局所有账户

八 开启分片功能
8.1 启用分片功能
[root@mongo04 ~]# mongo --port 27017 -u admin -p admin
mongos> use amdin
mongos> sh.addShard("shard1/172.24.8.71:20002,172.24.8.72:20002,172.24.8.73:20002")
mongos> sh.addShard("shard2/172.24.8.71:20003,172.24.8.72:20003,172.24.8.73:20003")

mongos> sh.status() #查看分片集群状态

8.2 设置分片chunk大小
mongos> use config
mongos> db.settings.save({"_id":"chunksize","value":1}) #设置分片大小为1M便于测试
8.3 模拟数据写入
mongos> use mydb #创建用于模拟的数据库
mongos> for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}
#模拟写入5W条数据到user集合
WriteResult({ "nInserted" : 1 }) #输出
8.4 启用数据库分片
mongos> sh.enableSharding("mydb")

8.5 创建索引
mongos> db.user.createIndex({"id": 1})

8.6 启用表分片
mongos> sh.shardCollection("mydb.user",{"id": 1})

8.7 查看分片情况
mongos> sh.status()

8.8 手动添加第三个分片
mongos> sh.addShard("shard3/172.24.8.71:20004,172.24.8.72:20004,172.24.8.73:20004")

8.9 再次观察分片情况
mongos> sh.status()

009.MongoDB分片群集部署的更多相关文章
- MongoDB分片群集的部署(用心描述,详细易懂)!!
概念: MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行存储 优势: 1.减少了每个分片需啊哟处理的请求数,群集可以提高自己的存储容量和吞吐量 2.减少了每个分片存储 ...
- 【MangoDB分片】配置mongodb分片群集(sharding cluster)
配置mongodb分片群集(sharding cluster) Sharding cluster介绍 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monod ...
- 008.MongoDB分片群集概念及原理
一 MongoDB分片介绍 1.1 分片 Mongodb另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足 ...
- mongodb 分片群集(sharding cluster)
实际环境架构 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的s ...
- MongoDB分片 在部署和维护管理 中常见事项的总结
分片(sharding)是MongoDB将大型集合分割到不同服务器(或者说集群)上所采用的方法,主要为应对高吞吐量与大数据量的应用场景提供了方法. 和既有的分库分表.分区方案相比,MongoDB的最大 ...
- Mongodb分片集群技术+用户验证
随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...
- MongoDB 分片集群
每日一句 Medalist don't grow on trees, you have to nurture them with love, with hard work, with dedicati ...
- MongoDB分片集群-Sharded Cluster
分片概念 分片(sharding)是一种跨多台机器分布数据的方法, MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署. 换句话说:分片(sharding)是指将数据拆分,将其分散存在 ...
- MySQL Cluster 与 MongoDB 复制群集分片设计及原理
分布式数据库计算涉及到分布式事务.数据分布.数据收敛计算等等要求 分布式数据库能实现高安全.高性能.高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Clus ...
随机推荐
- Excel映射到实体-easyexcel工具
来源 项目需要把Excel进行解析,并映射到对象属性,实现类似Mybatis的ORM的效果.使用的方式是自定义注解+POI,这种方式代码复杂而且不易于维护. easyexcel是阿里巴巴开源的一个框架 ...
- 计算几何 val.2
目录 计算几何 val.2 几何单位结构体板子 旋转卡壳 基础概念 求法 模板 半平面交 前置芝士:线段交 S&I算法 模板 最小圆覆盖 随机增量法 时间复杂度 模板 后记 计算几何 val. ...
- centos_redis 安装脚本
#!/bin/bash # change to root echo "start to install build env..." sudo yum groupinstall &q ...
- 用js传递当前页面的url,丢失了&后面的参数 解决办法
问题:因为登陆是用ajax传值的,在哪个页面点击登陆的,登陆成功跳到再跳回那个页面,之前直接传递的是 /index_do.php?gourl=" +location.href这样传递的,但是 ...
- ftp上传文件,上传的文件大小是0
此问题是最近出现,代码和配置完全没改,试过所有的办法,两天了一直都解决不了,用完弃坑. 防火墙.被动模式主动模式,编码,服务端内存,日志,common-net.jar版本问题,服务端配置,nginx配 ...
- 图像的相似度Hash算法
Hash算法有三种,分别为平均哈希算法(aHash).感知哈希算法你(pHash)和差异哈哈希算法(dHash). 针对以上三种的Hash算法详解见博客园文章 https://www.cnblogs. ...
- 好程序员web前端分享前端学习路线自学如何找到工作
好程序员web前端分享前端学习路线自学如何找到工作,自学能不能学会WEB前端并且找到WEB前端开发岗位的工作取决于自身条件,如果基础好,自律性强那么将会容易很多,还有就是自学最难克服的并不是知识点,而 ...
- MySQL数据库:合并结果集
合并结果集 union----合并结果集 对合并后的结果集中的重复数据也会自动去重 select sName from students union select tName from Teacher ...
- avd manger创建的虚拟机启动不起来,或者启动起来后黑屏
最近鼓捣安卓虚拟机,整的都差点重装系统,刚开始下载了genymotion_vbox,装完以后要在vbox中导入一个虚拟机,结果我导入完,虚拟机怎么也启动不了,然后各种找办法无果,最后重启电脑发现电脑也 ...
- Download Shuttle Pro mac文件下载器使用指南
Download Shuttle Pro是适用于macOS的最强大的下载管理器和加速器.它将文件下载分为多个部分,与使用Web浏览器相比,可以提高整体下载速度.使用我们的Pro版本,您可以访问我们的新 ...