千家信息网

CentOS7上的mongodb分片群集

发表于:2024-11-29 作者:千家信息网编辑
千家信息网最后更新 2024年11月29日,CentOS7的mongodb分片群集简介高数据量和吞吐量的数据库应用会对单机的性能造成较大的压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁
千家信息网最后更新 2024年11月29日CentOS7上的mongodb分片群集

CentOS7的mongodb分片群集

简介

高数据量和吞吐量的数据库应用会对单机的性能造成较大的压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。
mongodb分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作。分片技术可以满足Mongodb数据量大量增长的需求。,当一台mongodb服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,就可以通过在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据。

分片的优势

  • 使用分片减少了每个分片需要处理的请求数,通过水平扩展,群集可以提高自己的存储容量和吞吐量。

  • 使用分片减少了每个分片存储的数据

分片群集的组成

  1. Shard:分片服务器,用于存储实际的数据块
  2. configserver:配置服务器,存储整个分片群集的配置信息
  3. routers:路由服务器

分片群集管理的实验

实验配置图如上

下面开始实验,这里我在一台机器上开启多个实例来代替多台服务器

安装mongodb3.2版本(手工编译安装)

  • 安装软件环境包

yum -y install openssl-devel

  • 解压缩mongodb软件包

tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt

  • 移动软件包至系统识别的目录下

mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb

  • 创建mongodb的数据存储(/data/mongodb1、2、3、4、)和日志存储目录(/data/logs)

mkdir -p /data/mongodb/mongodb{1,2,3,4}

mkdir /data/mongodb/logs

touch /data/mongodb/logs/mongodb{1,2,3,4}.log

chmod -R 777 /data/mongodb/logs/*.log

  • 设置ulimit -n和ulimit -u 的值

当mongodb处于频繁访问的状态,如果shell启动进程所占用的资源设置过低,将会产生错误导致无法连接mongodb实例,所以这里需要设置ulimit -n和ulimit -u 的值大于20000
ulimit -n 25000
ulimit -u 25000

  • 创建配置服务器的配置文件

cd /usr/local/mongodb/bin/
vim mongodb1.conf

port=37017           #端口dbpath=/data/mongodb/mongodb1    #数据存储位置logpath=/data/mongodb/logs/mongodb1.log    #日志存储位置logappend=true   #错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件     fork=true      #后台运行maxConns=5000    #最大同时连接数storageEngine=mmapv1    #指定存储引擎为内存映射文件configsvr=true    #指定配置服务器的模式
  • 设置内核参数
    当某节点内存不足时,系统会从其他节点分配内存

sysctl -w vm.zone_reclaim_mode=0 #永久设置
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

  • 创建软链接,方便管理

ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo
ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod

  • 开启第一个实例(配置服务器)

  • 配置分片服务器的实例
    复制生成配置文件

    cp -p mongodb1.conf mongodb2.conf #复制配置服务器的配置文件生成实例2的配置文件
    cp -p mongodb1.conf mongodb3.conf #复制配置服务器的配置文件生成实例2的配置文件

  • 修改实例2、3的配置文件

vim mongodb2.conf

port=47017               #修改端口号 dbpath=/data/mongodb/mongodb2       #修改数据存放目录logpath=/data/mongodb/logs/mongodb2.log      #修改日志存放目录logappend=true  fork=truemaxConns=5000storageEngine=mmapv1shardsvr=true          #指定分片服务器的模式

vim mongodb3.conf

port=47018dbpath=/data/mongodb/mongodb3logpath=/data/mongodb/logs/mongodb3.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1shardsvr=true
  • 开启两个分片服务器的实例

mongod -f mongodb2.conf
mongod -f mongodb3.conf

  • 启动路由服务器

./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.234.177:37017 --chunkSize 1

这里关于mongos命令不知道该怎么使用,可以查看帮助信息

  • 启用分片服务器

mongo

  • 添加分片服务器

sh.addShard("192.168.234.177:47017")
sh.addShard("192.168.234.177:47018")

添加分片服务器之后再次查看

  • 测试分片功能

    mongos> show dbs
    config 0.031GB
    mongos> use kgc #进入并创建一个use的集合
    switched to db kgc
    mongos> db.users.insert({"id":1,"name":"zhangsan"}) #添加一条数据
    WriteResult({ "nInserted" : 1 })
    mongos> for(var i=2;i<=20000;i++)db.users.insert({"id":i,"name":"zyc"+i}) #使用for循环添加20000条数据
    WriteResult({ "nInserted" : 1 })
    mongos> show dbs #查看表空间就会有一个kgc
    config 0.031GB
    kgc 0.078GB
    mongos> show tables #查看表信息也可以看到users表
    system.indexes
    users

  • 开启分片功能

sh.enableSharding("kgc")

  • 对数据库中的集合开启分片

db.users.createIndex({"id":1}) #对users表创建索引
sh.shardCollection("kgc.users",{"id":1}) #表分片
sh.status() #此时再次查看,就可以已经进行分片处理了

到这里mongodb分片群集管理的介绍就全部完成了,如果觉得有帮助记得点赞、打赏下小弟哦!!!

数据 服务器 服务 配置 存储 文件 实例 日志 内存 目录 系统 信息 单机 压力 吞吐量 数据库 模式 软件 吞吐 处理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发在那个城市 使命召唤怎么离开老的服务器 数据库导论这本书有用吗 重庆软件开发驻场如何收费 aruba服务器怎么样 hmc服务器 万方数据库住宅小区 基于网络安全岗位能力标准防护体系建设 服务器超级管理员登录 网络安全精英赛题目 服务器配个显示屏 网络安全是新基建不可以吗 一台云服务器最多可挂几块数据盘 苏州律兜互联网科技有限公司 qt新建数据库的步骤 施乐j75服务器管理员登录密码 阿里云服务器流程 广州广睿知产网络技术 软件开发公司填哪类行业 汽车智能网络技术的参考文献 服务器能做电脑主机 苹果电脑桌面软件开发 基于网络安全岗位能力标准防护体系建设 数据库安全研究员 30岁学网络技术好吗 做互联网软件开发需要的应用 计算机网络技术科技信息 灞桥区软件开发找哪家 域名和云服务器是什么 淄川库存软件开发公司
0