码迷,mamicode.com
首页 > 数据库 > 详细

部署MongoDB分片群集及分片管理

时间:2018-07-20 00:22:59      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:dev   linu   打开   chm   logs   索引   防止   pat   数据库系统   

  • MongoDB分片
    • 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
    • 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
    • 分片的优势

    分片为应对高吞吐量与大数据量提供了方法。

    • 使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,集群可以提高自己的存储容量和吞吐量。举例来说,当插入一条数据时,应用只需要访问存储这条数据的分片.使用分片减少了每个分片存储的数据。
    • 分片的优势在于提供类似线性增长的架构,提高数据可用性,提高大型数据库查询服务器的性能,当MongoDB的单点数据库服务器存储成为瓶颈,单点数据库服务器的性能成为瓶颈或者需要部署大型应用以充分利用内存时,可以使用分片技术。
    • MongoDB分片群集的组成:
    • Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
    • Config Server:配置服务器,mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
    • Query Routers:前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
    • 部署MongoDB分片群集
    • 安装mongodb3.2
    • 创建多实例的数据目录和日志文件
    • 修改ulimit -n 和ulimit -u 的值为25000

      # yum install openssl-devel -y
      # tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt/
      # mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb
      # 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 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
        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
    • 启动登录第一个实例确认无误

      # mongod -f /usr/local/mongodb/bin/mongodb1.conf 
      # mongo --port 37017
    • 分片服务器

      # cp -p mongodb1.conf mongodb2.conf
      # vim mongodb2.conf
          port=47017
          dbpath=/data/mongodb/mongodb2
          logpath=/data/mongodb/logs/mongodb2.log
          logappend=true
          fork=true
          maxConns=5000
          storageEngine=mmapv1
          shardsvr=true
      
      # cp -p mongodb1.conf mongodb3.conf
      # vim mongodb3.conf
          port=47018
          dbpath=/data/mongodb/mongodb3
          logpath=/data/mongodb/logs/mongodb3.log
          logappend=true
          fork=true
          maxConns=5000
          storageEngine=mmapv1
          shardsvr=true
      
      # mongod -f mongodb2.conf
      # mongod -f mongodb3.conf
      # mongo --port 47017
      # mongo --port 47018
      # ./mongos --help   //查看参数选项
    • 启动路由服务器
    • --port指定对方连接入口27017
    • --fork后台运行
    • --logpath指定日志文件存储路径
    • --configdb指定给谁处理

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

      技术分享图片

    • 启用分片服务器

      > mongo
      > mongos> show dbs
      > mongos> sh.status()    #shards下为空,没有分片服务器
      > mongos> sh.addShard("192.168.86.129 :47017")    //添加分片服务器
      > mongos> sh.addShard("192.168.86.129 :47018")
      > mongos> sh.status()       // 查看数据库分片信息

    技术分享图片

    • 分片功能管理

      > use kgc
      > for(var i=1;i<=10000;i++) db.users.insert({"id":i,"name":"tom"+i})
      mongos> show dbs
      mongos> use kgc
      mongos> show collections    //查看集合
      mongos> db.users.find().limit(5)
      mongos> sh.status()          //查看数据库分片信息

      技术分享图片
      技术分享图片

    ?
    ?

    • 启用数据库分片

      mongos> sh.enableSharding("kgc")   //启用数据库分片
      mongos> sh.status()     //再查看数据库分片信息

      技术分享图片

    • 此时数据库分片开启了,但是你的集合没有开发分片
    • 下面要开启集合的分片
    • 先对users集合创建索引
    • 然后对集合的索引进行分片

      mongos> use kgc  
      mongos> db.users.createIndex({"id":1})       //对users表创建索引
      mongos> sh.shardCollection("kgc.users",{"id":1})    //表分片
      mongos> sh.status()

    技术分享图片
    技术分享图片

      • MongoDB分片管理
    • 片键的选择、查看片键的状态信息、添加多个分片、查看配置服务器信息以及添加删除分片服务器。

      mongos> mongo
      mongos> use kgc
      mongos> for(var i=1;i<=50000;i++)db.users2.insert({"id":i,"name":"jerry"+i})
      mongos> db.users2.createIndex({"id":1})
      mongos> sh.shardCollection("kgc.users2",{"id":1})
      mongos> db.users2.stats()
    • 添加标签

      mongos> sh.addShardTag("shard0000","sales00")
      mongos> sh.addShardTag("shard0001","sales01")
    • 连接配置服务器

      # mongo --port 37017
      configsvr> use config              //打开配置数据库
      configsvr> show collections        //查看集合

      技术分享图片

      configsvr> db.chunks.findOne()     //记录所有块的信息
      configsvr> db.collections.find()    //分片集合信息
      configsvr> db.databases.find()     //分片中所有数据库信息

      技术分享图片

    • 添加分片服务器

      # cd /usr/local/mongodb/bin/
      # cp -p mongodb2.conf mongodb4.conf
      # vim mongodb4.conf
              port=47019
              dbpath=/data/mongodb/mongodb4
              logpath=/data/mongodb/logs/mongodb4.log
              logappend=true
              fork=true
              maxConns=5000
              storageEngine=mmapv1
              shardsvr=true
      # mongod -f mongodb4.conf
      # mongo
    • 添加分片节点
      mongos> sh.addShard("192.168.86.129:47019") //添加分片服务器
      mongos> sh.status()
      技术分享图片技术分享图片

    • 删除分片节点

      mongos> use admin
      mongos> db.runCommand({"removeshard":"192.168.86.129:47019"})    //删除节点

    技术分享图片

    部署MongoDB分片群集及分片管理

    标签:dev   linu   打开   chm   logs   索引   防止   pat   数据库系统   

    原文地址:http://blog.51cto.com/13630803/2147458

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!