zoukankan      html  css  js  c++  java
  • mongodb----分片集群

    mongodb分片

        一般用得比较少,需要较多服务器,还有三种的角色。

        一般把mongodb的副本集应用得好就足够用了,可搭建多套mongodb副本集。

    mongodb分片技术

        mongodb副本集可以解决数据备份,读性能的问题,但由于mongodb副本集是每份数据都是一模一样的,无法解决数据量过大的问题。

        mongodb分片技术能够把数据分成两份存储,假如liangqicong.test里面有1亿条数据,分片能够实现5千万左右存储在data1,5千万左右存储在data2

        data1、data2需要使用副本集的形式,预防数据丢失。

        生产环境如果数据量不大,直接用副本集,大的话,分片+副本集。

    mongodb分片集群三种juese

        router角色  #mongodb的路由,提供入库,是的分片集群对外透明。router不存储数据。

        configsvr角色  #mongodb的配置角色,存储元数据信息。分片集群后端有多分存储,读取数据该去哪个存储上读取,依赖于配置角色,配置角色建议使用副本集。

        shardsvr角色  #mongodb的存储角色,存储真正的数据,建议使用副本集。

    依赖关系

        当用户通过router角色插入数据时,需要从configsvr知道这份数据插入到哪个节点,然后执行插入动作插入数据导sharedsvr。

        当用户获取数据时,需要从configsvr知道这份数据时存储在哪个节点,然后再去sharedsvr获取数据。

    configsvr配置

    systemLog:
      destination: file       #日志路径
      logAppend: true         #每次启动用追加的模式生成日志
      path: /data/mongodb/28017/mongodb.log
    storage:
      dbPath: /data/mongodb/28017/
      journal:
        enabled: true         #数据日志,避免数据丢失
    processManagement:
      fork: true
    net:
      port: 28017
      bindIp: 127.0.0.1,172.16.1.52      #监听的ip
    replication:
      replSetName: liangqicong
    sharding:
      clusterRole: configsvr

    进入mongodb

    config = 
    {
    "_id" : "liangqicong", "configsvr" : true, "members" : [ { "_id" : 0, "host" : "172.16.1.52:28017" }, { "_id" : 1, "host" : "172.16.1.52:28018" }, { "_id" : 2, "host" : "172.16.1.52:28019" } ] }

    router

    配置

    systemLog:
      destination: file       #日志路径
      logAppend: true         #每次启动用追加的模式生成日志
      path: /data/mongodb/27017/mongodb.log
    processManagement:
      fork: true
    net:
      port: 27017
      bindIp: 127.0.0.1,172.16.1.51      #监听的ip
    sharding:
      configDB: liangqicong/172.16.1.52:28017,172.16.1.52:28018,172.16.1.52:28019

    mongos -f /data/mongodb/27019/mongodb.conf

    shardsvr

    数据节点1

    systemLog:
      destination: file       #日志路径
      logAppend: true         #每次启动用追加的模式生成日志
      path: /data/mongodb/29017/mongodb.log
    storage:
      dbPath: /data/mongodb/29017/
      journal:
        enabled: true         #数据日志,避免数据丢失
    processManagement:
      fork: true
    net:
      port: 29017
      bindIp: 127.0.0.1,172.16.1.53      #监听的ip
    replication:
      replSetName: liangqicongdata1
    sharding:
      clusterRole: shardsvr

    进入mangodb

    config = 
    {
    "_id" : "liangqicongdata1", "members" : [ { "_id" : 0, "host" : "172.16.1.53:29017" }, { "_id" : 1, "host" : "172.16.1.53:29018" }, { "_id" : 2, "host" : "172.16.1.53:29019" } ] }

    数据节点2

    systemLog:
      destination: file       #日志路径
      logAppend: true         #每次启动用追加的模式生成日志
      path: /data/mongodb/29017/mongodb.log
    storage:
      dbPath: /data/mongodb/29017/
      journal:
        enabled: true         #数据日志,避免数据丢失
    processManagement:
      fork: true
    net:
      port: 29017
      bindIp: 127.0.0.1,172.16.1.53      #监听的ip
    replication:
      replSetName: liangqicongdata2
    sharding:
      clusterRole: shardsvr

    进入mongodb

    config = 
    {
        "_id" : "liangqicongdata2",
        "members" : [
            {
                "_id" : 0,
                "host" : "172.16.1.53:29020"
            },
            {
                "_id" : 1,
                "host" : "172.16.1.53:29021"
            },
            {
                "_id" : 2,
                "host" : "172.16.1.53:29022"
            }
        ]
    }

    --------------------------使用---------------------------------

    在进入router角色的mongodb

    sh.addShard("liangqicongdata1/172.16.1.53:29017,172.16.1.53:29018,172.16.1.53:29019")

    sh.addShard("liangqicongdata2/172.16.1.53:29020,172.16.1.53:29021,172.16.1.53:29022")

    查看分片集群状态

    sh.status()

    分片集群操作都是在router角色里面

    启动分片功能(先确认liangqicong数据库不存在,因为如果数据库已存在,且有数据,在分片之前,它会先让你在表中建立索引)

    db.runCommand({enablesharding:"liangqicong"})  #这里是数据库名

    db.runCommand({shardcollection:"liangqicong.test",key:{_id:"hashed"}})  #这里是对数据库里面test表的_id进行hash分片

    sh.status()

    这里是在什么情况下数据会存进那个数据节点。

    hunks:
                                    liangqicongdata1    2
                            { "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong(0) } on : liangqicongdata1 Timestamp(1, 0) 
                            { "_id" : NumberLong(0) } -->> { "_id" : { "$maxKey" : 1 } } on : liangqicongdata1 Timestamp(1, 1) 
  • 相关阅读:
    小明铺路
    Python库-BeautifulSoup
    Python库-re(正则表达式)
    cpp分解质因数
    cf Double Happiness(判断是否为素数且为4k+1型)
    ACM-世界岛旅行
    C#(.Net)中调用Sql sever汉字字符串显示为?问号
    如何配置Python环境
    记账软件——第三天
    记账软件——第二天
  • 原文地址:https://www.cnblogs.com/QicongLiang/p/10389343.html
Copyright © 2011-2022 走看看