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

  • 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"})    //删除节点

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

    时间: 2024-08-04 11:02:48

    部署MongoDB分片群集及分片管理的相关文章

    部署MongoDB分片群集

    MongoDB分片在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求.当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 分片的优势分片为应对高吞吐量与大数据量提供了方法.使用分片减少了每个分片需要处理的请求数,因此,通过水平扩展,集群可以提高自己的存储容量和吞吐量.举例来说,当插入一条数据时,应用只需要访问存储这条数据的分片.

    MongoDB分片群集(实现分片服务启用、分片服务管理、单点故障模拟)

    MongoDB分片概述 1.什么是分片 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上. MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作.分片技术可以满足MongoDB数据量大量增长的需求,当一台服务器存储量不够时,可以通过再外接一台分片服务器,使得数据库系统能够存储更多的数据 2.MongoDB分片优势 使用分片减少了每个分片需要处理的请

    在CentOS7上部署MongoDB分片群集

    概述 MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作.分片技术可以满足MongoDB数据量大量增长的需求,当一台MongoDB服务器不足以存储海量数据或不足以提供可接受的读写吞吐量时,我们就可以在多台服务器上分割数据,使得数据库系统能存储和处理更多的数据. MongoDB分片群集的组成 Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台服务器组成一个Replica Set承担,防止主机单点故障. Confi

    MongoDB分片群集

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

    MySQL Cluster 与 MongoDB 复制群集分片设计及原理

    分布式数据库计算涉及到分布式事务.数据分布.数据收敛计算等等要求 分布式数据库能实现高安全.高性能.高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Cluster从实现上来分析其中的设计思路,用以抽象我们在设计数据库时,可以引用的部分设计方法,应用于我们的生产系统 首先说说关系及非关系数据库的特征 MySQL的Innodb及Cluster拥有完整的ACID属性 A 原子性 整个事务将作为一个整体,要么完成,要么回滚 C 一致性 事务开始之前和事务结束以

    【MangoDB分片】配置mongodb分片群集(sharding cluster)

    配置mongodb分片群集(sharding cluster) Sharding cluster介绍 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统. 要构建一个 MongoDB Sharding Cluster,需要三种角色: Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障 Config Server: m

    走进MongoDB(五)---- 分片

    本文从以下几个方面对MongoDB进行介绍 一.分片键组件 二.分片键 三.哈希分片 四.范围分片 五.区间 六.分片部署实例 Sharding概述 是分片.或者分区的意思.分片是一个数据库架构,可以通过key 范围拆分数据并且把拆分后的数据分散的存储到两个或多个数据库实例.分片提供了水平扩展的功能. MongoDB使用分片来支持超大数据集和高操作性能的部署要求.我们可以使用两种方法来支持数据量的大量增加和高性能操作要求:垂直扩展和水平扩展 1.垂直扩展: 通常是增加单机容量,例如.使用性能更高

    大数据 MongoDB 3.2.1 分片

    MongoDB 分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 分片的目的 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上. 解决方法 : 有两个基

    Mongodb集群与分片 2

    前面我们介绍了简单的集群配置实例.在简单实例中,虽然MongoDB auto-Sharding解决了海量存储问题,和动态扩容问题,但是离我们在真实环境下面所需要的高可靠性和高可用性还有一定的距离. 下面我们就介绍一个接近实际的解决方案: Shard:使用Replica Sets,来确保数据的可靠性.通过这个方案,可以在每个节点有数据的备份.实现自动控制容错转移和自动恢复 Config:使用3个配置服务器,确保元数据完整性 Route:配合LVS,实现负载均衡,提高接入性能. 1.配置集群目录 数