MongoDB4.0构建分布式分片群集
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,MongoDB分片简述高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的 CPU 耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘 IO 上。Mo
千家信息网最后更新 2025年01月20日MongoDB4.0构建分布式分片群集
MongoDB分片简述
- 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的 CPU 耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘 IO 上。
- MongoDB 分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作。分片技术可以满足 MongoDB 数据量大量增长的需求,当一台 MongoDB 服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,我们就可以通过在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据。
MongoDB分片优势
- 分片为应对高吞吐量与大数据量提供了方法:
- 使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,群集可以提高自己的存储容量。比如,当插入一条数据时,应用只需要访问存储这条数据的分片。
- 使用分片减少了每个分片村存储的数据。
分片的优势在于提供类似线性增长的架构,提高数据可用性,提高大型数据库查询服务器的性能。当MongoDB单点数据库服务器存储成为瓶颈、单点数据库服务器的性能成为瓶颈或需要部署大型应用以充分利用内存时,可以使用分片技术。
MongoDB分片群集的组成
MongoDB分片群集主要有如下三个组件:
- Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Peplica Set 承担,防止主机单点故障。
- Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。
- Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。
系统环境
- 系统:CentOS 7.4 x86_64
- 软件版本:4.0
- 关闭防火墙及selinux
IP地址 | 路由服务器(Routers) | 配置服务器(Config Server) | Shard1 | Shard2 | Shard3 |
---|---|---|---|---|---|
192.168.125.119 | 27017 | 27018 | 27001 | 27002 | 27003 |
192.168.125.120 | 27017 | 27018 | 27001 | 27002 | 27003 |
192.168.125.121 | 27017 | 27018 | 27001 | 27002 | 27003 |
部署分片群集
三台物理服务器安装及配置
- 下载解压MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgztar zxvf mongodb-linux-x86_64-4.0.0.tgz -C /optmv /opt/mongodb-linux-x86_64-4.0.0/ /usr/local/mongodb
- 创建路由、配置、分片服务器的数据存放目录及日志管理
路由服务器不存储数据,因此不需要创建数据存储目录,日志文件创建完成还需给予权限。mkdir -p /data/mongodb/configmkdir -p /data/mongodb/shard{1,2,3}mkdir -p /data/mongodb/logstouch /data/mongodb/logs/shard{1,2,3}.logtouch /data/mongodb/logs/mongos.logtouch /data/mongodb/logs/config.logchmod 777 /data/mongodb/logs/*.log
- 创建管理用户,修改目录权限
useradd -M -s /sbin/nologin mongochown -R mongo:mongo /usr/local/mongodbchown -R mongo:mongo /data/mongodb
- 添加环境变量,便于使用
echo 'export MONGODB_HOME=/usr/local/mongodb' >> /etc/profileecho 'export PATH=$PATH:$MONGODB_HOME/bin' >> /etc/profilesource /etc/profile
- 系统参数优化
ulimit -n 25000 //可以打开的最大文件数量ulimit -u 25000 //用户最大可用的进程数sysctl -w vm.zone_reclaim_mode=0 //内存不足时,从其他节点分配内存# 从CentOS7开始,MongoDB会建议关闭系统的THP特性,否则可能会导致性能下降echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag //*注意*这些优化都是临时的,重启失效
部署配置服务器(三台物理服务器配置步骤相同)
- 写入配置文件,我们可以用scp命令把配置文件发到其他两台物理服务器
# vim config.confdbpath=/data/mongodb/config //数据文件存放位置logpath=/data/logs/config.log //日志文件port=27018 //端口号logappend=truefork=truemaxConns=5000 storageEngine=mmapv1replSet=configs //复制集名称configsvr=true //设置参数为true# mongod -f config.conf //启动config实例scp /usr/local/mongodb/bin/config.conf root@192.168.125.120:/usr/local/mongodb/binscp /usr/local/mongodb/bin/config.conf root@192.168.125.121:/usr/local/mongodb/bin
- 配置复制集(任意一台物理机上操作即可)
mongo --port 27018config={_id:"configs",members:[{_id:0,host:"192.168.125.119:27018"},{_id:1,host:"192.168.125.120:27018"},{_id:2,host:"192.168.125.121:27018"}]} //创建复制集rs.initiate(config) //初始化复制集
部署分片服务器
- 编辑shard{1,2,3}.conf配置文件,端口分别为27001,27002,27003,设置shardsvr=true,启动分片服务器
# vim shard1.confdbpath=/data/mongodb/shard1logpath=/data/logs/shard1.logport=27001logappend=truefork=truemaxConns=5000 storageEngine=mmapv1shardsvr=true# mongod -f shard1.conf# 与另外两台配置实例配置文件相同,仅端口、数据文件存放及日志文件要改,只需配置完成后启动即可
- 将shard1配置为复制集(这里需要注意的是,预先被设为仲裁节点的服务器上创建复制集会报错。)
mongo --port 27001use adminconfig={_id:"shard1",members:[{_id:0,host:"192.168.125.119:27001"},{_id:1,host:"192.168.125.120:27001"},{_id:2,host:"192.168.125.121:27001"}]} //创建复制集rs.initiate(config) //初始化复制集
- 其余两台分片服务器shard2、shard3设置相同,注意端口及仲裁节点的问题即可
部署路由服务器
- 创建配置文件,将配置文件发送到其他物理服务器。注意,路由服务器不需要存储数据目录
# vim mongos.conflogpath=/data/mongodb/logs/mongos.loglogappend = trueport = 27017fork = trueconfigdb = configs/192.168.125.119:27018,192.168.125.120:27018,192.168.125.121:27018maxConns=20000
- 启动mongos实例
mongs -f /usr/local/mongodb/bin/mongos.conf# 注意,这边启动mongos实例用的是mongos命令
启动分片功能
mongo //默认进入27017端口mongos> use adminmongos> sh.addShard("shard1/192.168.125.119:27001,192.168.125.120:27001,172.16.10.29:27001")mongos> sh.addShard("shard2/192.168.125.119:27002,192.168.125.120:27002,172.16.10.29:27002")mongos> sh.status() //查看群集状态# 此处为添加两台分片服务器,后续添加的也会均匀分配分片数据
实现分片功能
- 设置分片chunk大小
mongos> use configmongos> db.settings.save({"_id":"chunksize","value":1})# 设置块大小为1M是方便实验,不然需要插入海量数据
- 模拟写入数据
mongos> use schoolmongos> show collectionsmongos> for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}# 在school库的user表中循环写入五万条数据
- 启动数据库分片
mongos>sh.enableSharding("school")# 我们可以自定义需要分片的库或表
- 为school库中的user集合创建索引,然后对表进行分片
mongos> db.user.createIndex({"id":1})# 以"id"作为索引mongos> sh.shardCollection("school.user",{"id":1})# 根据"id"对user表进行分片mongos> sh.status()# 查看分片情况mongos> sh.help()# 查看分片相关的命令
数据
服务器
服务
配置
存储
文件
数据库
系统
路由
物理
内存
实例
性能
日志
目录
端口
相同
单机
压力
吞吐量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界电脑版ac服务器
计算机网络技术专升本资料
论信息系统与数据库技术论文
天涯明月刀各区服务器位置
成都蓝牙软件开发
学习网络安全知识的书籍
服务器 开关机
中船工业网络安全
全椒县网络安全学费
微软软件开发面试题
重庆新众禾互联网科技有限公司
互联网类高科技公司
计算机网络技术基础名词互译
shell 连接数据库日志
负载均衡网络安全设备招标
江门数字软件开发批发价
盐城检查网络安全
局网络安全和信息化工作计划
测试过程中数据库问题报文没问题
程序软件开发定制
网络安全十三五规划
扬州专业联想服务器安装
四川乘捷互联网科技有限公司
电脑保存文件不需要数据库
上海放心软件开发服务推广
番禺网络安全建设怎么选择
柬埔寨互联网科技
数据库给每一列数字加1
数据库系统基础电子版
办公软件数据库制作