MongoDB分片集群部署(三)
1.分片集群介绍与原理
2.分片集群安装
2.1解压,创建软连接,配置环境变量
2.2config server配置服务器( configsvr角色)
2.3配置分片副本集三台机器都要配( shardsvr角色 )
2.3.1设置第一个分片副本集
2.3.2设置第二个分片副本集:
2.3.2设置第三个分片副本集
2.3配置路由服务器mongos(路由角色)
3.启用分片
4.测试验证
1.分片集群介绍与原理
mongodb分片
- 一般用得比较少,需要较多的服务器,还有三种的角色
- 一般把mongodb的副本集应用得好就足够用了,可搭建多套mongodb复本集
mongodb分片技术
- mongodb副本集可以解决数据备份、读性能的问题,但由于mongodb副本集是每份数据都一模一样的,无法解决数据量过大问题
- mongodb分片技术能够把数据分成两份存储,假如bfd.user(bfd库,user是表)里面有100w条数据,分片能够实现50万左右存储在data1,50万左右存储在data2
- data1、data2需要使用副本集的形式,预防数据丢失。
mongodb分片集群三种角色介绍:
router角色 | mongodb的路由,提供入口,使得分片集群对外透明。router不存储数据 |
configsvr角色 | mongodb的配置角色,存储元数据信息。分片集群后端有多份存储,读取数据该去哪个存储上读取,依赖于配置角色。配置角色建议使用副本集 |
shardsvr角色 | mongodb的存储角色,存储真正的数据,建议使用副本集 |
依赖关系:
当用户通过router角色插入数据时,需要从configsvr知道这份数据插入到哪个节点, 然后执行插入动作插入数据到sharedsvr
当用户通过router角色获取数据时,需要从configsvr知道这份数据是存储在哪个节点,然后再去sharedsvr获取数据
服务器规划
172.18.1.23 | 172.18.1.24 | 172.18.1.25 |
mongos | mongos | mongos |
config server | config server | config server |
shard server1 主节点 | shard server1 副节点 | shard server1 副节点 |
shard server2 主节点 | shard server2 副节点 | shard server2 副节点 |
shard server3 主节点 | shard server3 副节点 | shard server3 副节点 |
端口分配:
mongos:27017
configsvr:28017
shard1:29017
shard2:29018
shard3:29019
2.分片集群安装
2.1解压,创建软连接,配置环境变量
#获取
[root@bfd-yiz-1p23 software]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.4.tgz
#解压
[root@bfd-yiz-1p23 software]# tar -xf mongodb-linux-x86_64-rhel70-4.0.4.tgz -C /opt
#改名
[root@bfd-yiz-1p23 software]# cd /opt
[root@bfd-yiz-1p23 opt]# mv mongodb-linux-x86_64-rhel70-4.0.4 mongodb#分别建立config、log、data/shard1/data 、data/shard2/data 、data/shard3/data 5个目录,因为mongos不存储数据,只需要建立日志文件目录即可。
[root@bfd-yiz-1p23 opt] cd /opt/mongodb
[root@bfd-yiz-1p23 /opt/mongodb] mkdir -pv {conf,log,data/shard1/data,data/shard2/data,,data/shard3/data}# 把mongdb文件夹 传到其他两台机器上
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb 172.18.1.24:/opt
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb 172.18.1.25:/opt
配置环境变量(三台机器都需要配置)
[root@bfd-yiz-1p23 opt] vim /etc/profile
# 内容
export MONGODB_HOME=/opt/mongodb
export PATH=${MONGODB_HOME}/bin:$PATH
# 使立即生效
[root@bfd-yiz-1p23 opt] source /etc/profile
2.2config server配置服务器( configsvr角色)
mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。
添加配置文件
[root@bfd-yiz-1p23 opt] vim /opt/mongodb/config/configsvr.confsystemLog:destination: filelogAppend: truepath: "/opt/mongodb/log/mongodb.log"
storage:dbPath: "/opt/mongodb/data/configsvr"journal:enabled: true
processManagement:fork: true
net:port: 28017bindIp: 0.0.0.0
replication:replSetName: bfd
sharding:clusterRole: configsvr#发送到其他两台
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/configsvr 172.18.1.24:/opt/mongodb/
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/configsvr 172.18.1.25:/opt/mongodb/
启动三台服务器的configsvr角色(三台都要启动)
[root@bfd-yiz-1p23 opt] numactl --interleave=all mongod -f /opt/mongodb/config/configsvr.conf
about to fork child process, waiting until server is ready for connections.
forked process: 27999
child process started successfully, parent exiting
登录任意一台配置服务器,初始化配置副本集
#连接
[root@bfd-yiz-1p23 opt] mongo --port 28017
#config变量
>config = { _id:"bfd",configsvr: true,members:[{_id:0,host:"172.18.1.23:28017"},{_id:1,host:"172.18.1.24:28017"},{_id:2,host:"172.18.1.25:28017"}]
}
rs.initiate(config)
#初始化副本集
>rs.initiate(config)
{ "ok" : 1 }
>rs.status() #查看状态
其中,"_id" : "configs"应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的 ip 和 port
2.3配置分片副本集三台机器都要配( shardsvr角色 )
分片集群的数据角色里面存储着真正的数据,所以数据角色一定得使用副本集。
2.3.1设置第一个分片副本集
[root@bgsbtsp0152-dqf opt] vim /opt/mongodb/config/shard1.conf#配置文件内容
systemLog:destination: filelogAppend: truepath: /opt/mongodb/log/shard1.log
storage:dbPath: /opt/mongodb/data/shard1/datajournal:enabled: true
processManagement:fork: true
net:port: 29017bindIp: 0.0.0.0
replication:replSetName: shard1
sharding:clusterRole: shardsvr#发送到其他两台
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/shard1 172.18.1.24:/opt/mongodb/
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/shard1 172.18.1.25:/opt/mongodb/
启动三台服务器的shard1 server(三台都要启动)
[root@bfd-yiz-1p23 opt] numactl --interleave=all mongod -f /opt/mongodb/config/shard1.conf
about to fork child process, waiting until server is ready for connections.
forked process: 9997
child process started successfully, parent exiting
登陆任意一台服务器,初始化副本集
[root@bgsbtsp0152-dqf opt] mongo --port 29017
#使用admin数据库
use admin
#定义副本集配置
>config = {
... _id : "shard1",
... members : [
... {_id : 0, host : "172.18.1.23:29017" },
... {_id : 1, host : "172.18.1.24:29017" },
... {_id : 2, host : "172.18.1.25:29017" }
... ]
... }
#初始化副本集配置
>rs.initiate(config);
{ "ok" : 1 }
2.3.2设置第二个分片副本集:
[root@bfd-yiz-1p23 opt] vim /opt/mongodb/config/shard2.conf#配置文件内容
systemLog:destination: filelogAppend: truepath: /opt/mongodb/log/shard2.log
storage:dbPath: /opt/mongodb/data/shard2/datajournal:enabled: true
processManagement:fork: true
net:port: 29018bindIp: 0.0.0.0
replication:replSetName: shard2
sharding:clusterRole: shardsvr#发送到其他两台
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/shard2 172.18.1.24:/opt/mongodb/
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/shard2 172.18.1.25:/opt/mongodb/
启动三台服务器的shard2 server(三台都要启动)
[root@bfd-yiz-1p23 opt] numactl --interleave=all mongod -f /opt/mongodb/config/shard2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 10191
child process started successfully, parent exiting
登陆任意一台服务器,初始化副本集
[root@bfd-yiz-1p23 opt] mongo --port 29018
#使用admin数据库
use admin
#定义副本集配置
>config = {
... _id : "shard2",
... members : [
... {_id : 0, host : "172.18.1.23:29018" },
... {_id : 1, host : "172.18.1.24:29018" },
... {_id : 2, host : "172.18.1.25:29018" }
... ]
... }
#初始化副本集配置
>rs.initiate(config);
{ "ok" : 1 }
2.3.2设置第三个分片副本集
[root@bfd-yiz-1p23 opt] vim /opt/mongodb/config/shard3.conf#配置文件内容
systemLog:destination: filelogAppend: truepath: /opt/mongodb/log/shard3.log
storage:dbPath: /opt/mongodb/data/shard3/datajournal:enabled: true
processManagement:fork: true
net:port: 29019bindIp: 0.0.0.0
replication:replSetName: shard3
sharding:clusterRole: shardsvr#发送到其他两台
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/shard3 172.18.1.24:/opt/mongodb/
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/shard3 172.18.1.25:/opt/mongodb/
启动三台服务器的shard3 server(三台都要启动)
[root@bfd-yiz-1p23 opt] numactl --interleave=all mongod -f /opt/mongodb/config/shard3.conf
about to fork child process, waiting until server is ready for connections.
forked process: 10275
child process started successfully, parent exiting
登陆任意一台服务器,初始化副本集
[root@bfd-yiz-1p23 opt] mongo --port 29019
#使用admin数据库
use admin
#定义副本集配置
>config = {
... _id : "shard3",
... members : [
... {_id : 0, host : "172.18.1.23:29019" },
... {_id : 1, host : "172.18.1.24:29019" },
... {_id : 2, host : "172.18.1.25:29019" }
... ]
... }
#初始化副本集配置
>rs.initiate(config);
{ "ok" : 1 }
2.3配置路由服务器mongos(路由角色)
mongodb中的router(mongos)角色只负责提供一个入口,不存储任何的数据,router最重要的配置是指定configsvr的地址,使用副本集ip+端口的方式指定配置多个router,任何一个都能正常的获取数据。
vim /opt/mongodb/mongos/config/mongos.conf#配置文件内容如下:
systemLog:destination: filelogAppend: truepath: /opt/mongodb/log/mongos.log
processManagement:fork: true
net:port: 27017bindIp: 0.0.0.0
sharding:configDB: bfd/172.18.1.23:28017,172.18.1.24:28017,172.18.1.25:28017
#发送到其他两台
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/mongos 172.18.1.24:/opt/mongodb/
[root@bfd-yiz-1p23 opt] scp -r /opt/mongodb/mongos 172.18.1.25:/opt/mongodb/
启动三台服务器的mongos server(三台机器)
[root@bfd-yiz-1p23 opt] numactl --interleave=all mongos -f /opt/mongodb/config/mongos.conf
至此,以上三种角色的服务都已经创建并启动成功。
3.启用分片
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos,给分片集群添加数据角色,数据角色为副本集的方式。
mongo --port 27017
#使用admin数据库
mongos> use admin
#串联路由服务器与分配副本集
mongos> sh.addShard("shard1/172.18.1.23:29017,172.18.1.24:29017,172.18.1.25:29017")
mongos> sh.addShard("shard2/172.18.1.23:29018,172.18.1.24:29018,172.18.1.25:29018")
mongos> sh.addShard("shard3/172.18.1.23:29019,172.18.1.24:29019,172.18.1.25:29019")
mongos> sh.status() #添加完后,我们看到下图中分片的相关信息
我们可以看到分片集群的信息:
4.测试验证
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。
#针对某个数据库的某个表使用hash分片存储,分片存储就会同一个colloection分配两个数据角色mongos> use adminmongos> db.runCommand( { enablesharding :"bfd"});#指定数据库里需要分片的集合和片键mongos> db.runCommand( { shardcollection : "bfd.myuser",key : {_id: "hashed"} } )mongos>exit
我们设置bfd的 myuser表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。
测试分片配置结果
[root@bgsbtsp0152-dqf opt] mongo --port 27017#插入测试数据
mongos> use bfd
mongos> for(i=1; i<=500;i++){
... db.myuser.insert( {name:'mytest'+i, age:i} )
... }
WriteResult({ "nInserted" : 1 })
mongos> db.myuser.count()
500 #我们可以通过路由角色看到插入到了500条记录。
我们去shard1上去查看。
我们去shard2上去查看。
我们去shard3上去查看。
我们再看其中的一个从节点,看看是否也同步到数据了。
发现shard3的从分片上也有了和主shard3分片上一摸一样的数据,可以看到500条记录被分到三个分片上存储了。至此mongodb的分片部署已经完成。
MongoDB分片集群部署(三)相关推荐
- MongoDB——MongoDB分片集群(Sharded Cluster)两种搭建方式
MongoDB分片集群(Sharded Cluster)两种搭建方式 MongoDB分片的概念 分片集群包含的组件 分片集群架构目标 MongoDB分片集群搭建 第一套副本集 第二套副本集 配置节点副 ...
- MongoDB 3.2.7 for rhel6.4 副本集-分片集群部署
今天,一同事反映,他安装部署mongodb副本集--分片集群,初始化分片时遇到问题:初始化分片必须使用主机名(也就是必须有相当于DNS服务的解析),这样以来,mongo副本集--分片集群就 会出现DN ...
- mongodb副本集+分片集群部署 step by step
mongodb副本集+分片集群部署step by step 本文只讲述mongodb副本集+分片集群的部署,关于mongdb shading & replica set原理优点等不在本文讨论范 ...
- TiDB和MongoDB分片集群架构比较
此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比. 首先展示TiDB的整体架构 M ...
- mongodb 启动_精心总结--mongodb分片集群启动与关闭
概述 网上教程有点坑啊,很多bug,今天刚好涉及到所以抽空整理了下mongodb分片集群启动与关闭方面的教程.希望对大家有点帮助. 基础环境配置 192.168.240.145 测试Nosql服务器1 ...
- MongoDb分片集群认证
本文主要基于已经搭建好的未认证集群,结合上篇Mongodb副本集分片集群模式环境部署(https://www.cnblogs.com/woxingwoxue/p/9875878.html), Mong ...
- 实战:MongoDB 分片集群Shard Cluster 搭建(1台路由节点,3台配置节点,9台分片节点)
MongoDB 分片集群搭建(分片集群安全认证+SpringBoot访问) 一.搭建要求 一台路由节点 IP地址:192.168.80.110 端口:11111 三套复制集(每个分片节点中的复制集 都 ...
- 搭建MongoDB分片集群
在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...
- DOCKER-COMPOSE搭建MONGODB分片集群(单机版)
docker-compose搭建mongodb分片集群(单机版) - 丰哥坑到 - 博客园
- 2021-05-12 MongoDB面试题 什么是MongoDB分片集群
什么是MongoDB分片集群? Sharding cluster是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建.sharding分片很好的解决了单台服务器磁盘空 ...
最新文章
- android之多媒体篇(二)
- HDU 6112黑色星期五 蓝桥基拉姆森公式
- MySQL存储引擎和外键学习
- SQL中的long text
- 两个list怎么对比数据_基于日志的回放对比系统设计
- margin 塌陷bug 触发bfc
- php 什么时候使用单例,php什么时候使用单例模式
- Filmage Screen for Mac 专业录屏软件用这个就足够
- java 牙位图插件_牙医的骄傲-智能牙位图中文医疗应用app全球排名No.1
- 5miles:这家电商公司,想做推动区块链技术落地的标杆
- 【典型液压系统】组合机床动力滑台液压系统
- 当下移动互联网的6个泡沫,快要破了!
- 2014年5月份第1周51Aspx源码发布详情
- message——UVM
- python3实现批量修改图片名称
- WPS转换成PDF在线
- Android中Uri 和Path之间的相互转化
- dcs常用的冗余方式_dcs试题
- 2018 杭州见习报告
- 取出数组第一大和第二大元素