注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

MongoDB切片 sharding Diagram  

2016-07-07 16:23:28|  分类: hadoop与nosql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
默认把collection每64M一片均匀分不到各节点,且新节点进来后重新进行均衡。
对写操作要分散,用切片,但对读操作不要分散,会降低性能。
选择好分区键,是关键。
一致性hash、取余hash
组合分区:根据年龄分区,根据姓名hash
rebanlence机制:挨个挪走。


配置概况



一、 配置config server
10.1.5.117:27018
配置文件中添加configsvr=true
默认端口不配则默认使用27019.
启动:mongod -f /data/mongodb/mongod.conf
[mongod@biee2 mongodb]$ netstat -napt | grep mongod
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 10.1.5.117:27019            0.0.0.0:*                   LISTEN      11178/mongod  


二、配置mongos
不需要定义dbpath,且要注释掉
添加configdb指令,指定config服务器的地址端口。configdb=10.1.5.117:27019
默认监听27017端口。

启动:mongos -f /data/mongodb/mongod.conf


三、 配置好各副本集或独立的mongod实例

四、 在mongos中添加各shared独立服务器或副本集
独立服务器:sh.addShared("ip:port")
       副本集:sh.addShared("rs/ip:port")
已有数据的集合需要创建索引。
mongos> sh.addShard("10.1.5.123:27017")
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> sh.addShard("10.1.5.123:27018")
{ "shardAdded" : "shard0001", "ok" : 1 }
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("577a1a004e8baceaa6c417b6")
}
  shards:
        {  "_id" : "shard0000",  "host" : "10.1.5.123:27017" }
        {  "_id" : "shard0001",  "host" : "10.1.5.123:27018" }
  active mongoses:
        "3.2.4" : 1
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                No recent migrations
  databases:

#指定切片的库和集合
sh.enableSharding(dbname)                 enables sharding on the database dbname
sh.shardCollection(fullName,key,unique)   shards the collection
mongos> sh.enableSharding("testdb")
{ "ok" : 1 }
mongos> sh.shardCollection("testdb.t1",{age:1, name:1})   --先根据年龄做分区,然后根据姓名做分区
{ "collectionsharded" : "testdb.t1", "ok" : 1 }
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("577a1a004e8baceaa6c417b6")
}
  shards:
        {  "_id" : "shard0000",  "host" : "10.1.5.123:27017" }
        {  "_id" : "shard0001",  "host" : "10.1.5.123:27018" }
  active mongoses:
        "3.2.4" : 1
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                No recent migrations
  databases:
        {  "_id" : "testdb",  "primary" : "shard0000",  "partitioned" : true }
                testdb.t1       --分片的集合
                        shard key: { "age" : 1, "name" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                shard0000       1
                        { "age" : { "$minKey" : 1 }, "name" : { "$minKey" : 1 } } -->> { "age" : { "$maxKey" : 1 }, "name" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0) 


--检查是否平衡:
mongos> sh.help()
        sh.addShard( host )                       server:port OR setname/server:port
        sh.enableSharding(dbname)                 enables sharding on the database dbname
        sh.shardCollection(fullName,key,unique)   shards the collection
        sh.splitFind(fullName,find)               splits the chunk that find is in at the median
        sh.splitAt(fullName,middle)               splits the chunk that middle is in at middle
        sh.moveChunk(fullName,find,to)            move the chunk where 'find' is to 'to' (name of shard)   --移动chunk从一个节点到另一个节点
        sh.setBalancerState( <bool on or not> )   turns the balancer on or off true=on, false=off
        sh.getBalancerState()                     return true if enabled
        sh.isBalancerRunning()                    return true if the balancer has work in progress on any mongos
        sh.disableBalancing(coll)                 disable balancing on one collection
        sh.enableBalancing(coll)                  re-enable balancing on one collection
        sh.addShardTag(shard,tag)                 adds the tag to the shard
        sh.removeShardTag(shard,tag)              removes the tag from the shard
        sh.addTagRange(fullName,min,max,tag)      tags the specified range of the given collection
        sh.removeTagRange(fullName,min,max,tag)   removes the tagged range of the given collection
        sh.status()  
mongos> sh.getBalancerState()
true



  评论这张
 
阅读(96)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017