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) 

 

posted @ 2019-02-17 09:57  喜欢it的小聪聪  阅读(177)  评论(0编辑  收藏  举报