mongodb sharding Tag控制数据分片

mongodb可以手工设置数据在哪个分片,这非常有用,例如对于一些日志集合,我们只希望运行在等级比较低的服务器上.
mongodb使用 sh.addShardTag()函数为shard打上标记,
然后使用 sh.addTagRange()函数来手工分配指定的数据到指定的分片中,例如:
下面这个例子中,原来的50072这个分片在shard0001上,我们想把这个分片指定到shard0000上:
  
  
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("576932a3f43b00b3956fecb7")
}
shards:
{ "_id" : "shard0000", "host" : "mongodb2:27017" }
{ "_id" : "shard0001", "host" : "mongodb3:27017" }
active mongoses:
"3.2.6" : 1
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
4 : Success
2 : Failed with error 'aborted', from shard0001 to shard0000
databases:
{ "_id" : "test", "primary" : "shard0000", "partitioned" : true }
test.admin
shard key: { "id" : 1 }
unique: false
balancing: true
chunks:
shard0000 1
{ "id" : { "$minKey" : 1 } } -->> { "id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0)
test.users
shard key: { "i" : 1, "username" : 1 }
unique: false
balancing: true
chunks:
shard0000 9
shard0001 9
{ "i" : { "$minKey" : 1 }, "username" : { "$minKey" : 1 } } -->> { "i" : 1, "username" : "user1" } on : shard0000 Timestamp(26, 0)
{ "i" : 1, "username" : "user1" } -->> { "i" : 13, "username" : "user13" } on : shard0001 Timestamp(26, 1)
{ "i" : 13, "username" : "user13" } -->> { "i" : 20, "username" : "user20" } on : shard0001 Timestamp(18, 0)
{ "i" : 20, "username" : "user20" } -->> { "i" : 27, "username" : "user27" } on : shard0001 Timestamp(19, 0)
{ "i" : 27, "username" : "user27" } -->> { "i" : 34, "username" : "user34" } on : shard0001 Timestamp(20, 0)
{ "i" : 34, "username" : "user34" } -->> { "i" : 41, "username" : "user41" } on : shard0001 Timestamp(21, 0)
{ "i" : 41, "username" : "user41" } -->> { "i" : 48, "username" : "user48" } on : shard0001 Timestamp(22, 0)
{ "i" : 48, "username" : "user48" } -->> { "i" : 55, "username" : "user55" } on : shard0001 Timestamp(23, 0)
{ "i" : 55, "username" : "user55" } -->> { "i" : 62, "username" : "user62" } on : shard0001 Timestamp(24, 0)
{ "i" : 62, "username" : "user62" } -->> { "i" : 69, "username" : "user69" } on : shard0000 Timestamp(25, 1)
{ "i" : 69, "username" : "user69" } -->> { "i" : 76, "username" : "user76" } on : shard0000 Timestamp(1, 11)
{ "i" : 76, "username" : "user76" } -->> { "i" : 83, "username" : "user83" } on : shard0000 Timestamp(1, 12)
{ "i" : 83, "username" : "user83" } -->> { "i" : 90, "username" : "user90" } on : shard0000 Timestamp(1, 13)
{ "i" : 90, "username" : "user90" } -->> { "i" : 97, "username" : "user97" } on : shard0000 Timestamp(1, 14)
{ "i" : 97, "username" : "user97" } -->> { "i" : 25084, "username" : "user25084" } on : shard0000 Timestamp(23, 4)
{ "i" : 25084, "username" : "user25084" } -->> { "i" : 50072, "username" : "user50072" } on : shard0000 Timestamp(23, 5)
{ "i" : 50072, "username" : "user50072" } -->> { "i" : 100048, "username" : "user100048" } on : shard0001 Timestamp(25, 0)
{ "i" : 100048, "username" : "user100048" } -->> { "i" : { "$maxKey" : 1 }, "username" : { "$maxKey" : 1 } } on : shard0000 Timestamp(22, 3)
首先给shard指定一个TAG:
   
   
mongos> sh.addShardTag("shard0000","first")
然后指定分片到first这个tag上:
   
   
mongos> sh.addTagRange("test.users",{"i" : 50072, "username" : "user50072"},{ "i" : 100048, "username" : "user100048" },"first")
再看这个数据发现已经到了shard0000上:
   
   
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("576932a3f43b00b3956fecb7")
}
shards:
{ "_id" : "shard0000", "host" : "mongodb2:27017", "tags" : [ "first" ] }
{ "_id" : "shard0001", "host" : "mongodb3:27017" }
active mongoses:
"3.2.6" : 1
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
1 : Success
databases:
{ "_id" : "test", "primary" : "shard0000", "partitioned" : true }
test.admin
shard key: { "id" : 1 }
unique: false
balancing: true
chunks:
shard0000 1
{ "id" : { "$minKey" : 1 } } -->> { "id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0)
test.users
shard key: { "i" : 1, "username" : 1 }
unique: false
balancing: true
chunks:
shard0000 10
shard0001 8
{ "i" : { "$minKey" : 1 }, "username" : { "$minKey" : 1 } } -->> { "i" : 1, "username" : "user1" } on : shard0000 Timestamp(26, 0)
{ "i" : 1, "username" : "user1" } -->> { "i" : 13, "username" : "user13" } on : shard0001 Timestamp(27, 1)
{ "i" : 13, "username" : "user13" } -->> { "i" : 20, "username" : "user20" } on : shard0001 Timestamp(18, 0)
{ "i" : 20, "username" : "user20" } -->> { "i" : 27, "username" : "user27" } on : shard0001 Timestamp(19, 0)
{ "i" : 27, "username" : "user27" } -->> { "i" : 34, "username" : "user34" } on : shard0001 Timestamp(20, 0)
{ "i" : 34, "username" : "user34" } -->> { "i" : 41, "username" : "user41" } on : shard0001 Timestamp(21, 0)
{ "i" : 41, "username" : "user41" } -->> { "i" : 48, "username" : "user48" } on : shard0001 Timestamp(22, 0)
{ "i" : 48, "username" : "user48" } -->> { "i" : 55, "username" : "user55" } on : shard0001 Timestamp(23, 0)
{ "i" : 55, "username" : "user55" } -->> { "i" : 62, "username" : "user62" } on : shard0001 Timestamp(24, 0)
{ "i" : 62, "username" : "user62" } -->> { "i" : 69, "username" : "user69" } on : shard0000 Timestamp(25, 1)
{ "i" : 69, "username" : "user69" } -->> { "i" : 76, "username" : "user76" } on : shard0000 Timestamp(1, 11)
{ "i" : 76, "username" : "user76" } -->> { "i" : 83, "username" : "user83" } on : shard0000 Timestamp(1, 12)
{ "i" : 83, "username" : "user83" } -->> { "i" : 90, "username" : "user90" } on : shard0000 Timestamp(1, 13)
{ "i" : 90, "username" : "user90" } -->> { "i" : 97, "username" : "user97" } on : shard0000 Timestamp(1, 14)
{ "i" : 97, "username" : "user97" } -->> { "i" : 25084, "username" : "user25084" } on : shard0000 Timestamp(23, 4)
{ "i" : 25084, "username" : "user25084" } -->> { "i" : 50072, "username" : "user50072" } on : shard0000 Timestamp(23, 5)
{ "i" : 50072, "username" : "user50072" } -->> { "i" : 100048, "username" : "user100048" } on : shard0000 Timestamp(27, 0)
{ "i" : 100048, "username" : "user100048" } -->> { "i" : { "$maxKey" : 1 }, "username" : { "$maxKey" : 1 } } on : shard0000 Timestamp(22, 3)
tag: first { "i" : 50072, "username" : "user50072" } -->> { "i" : 100048, "username" : "user100048" }
如果要让这个集合的全部文档都在某一个shard上,那么将上面的条件修改为
{ "i" : "$minKey" , "username" : "$minKey" } , { "i" : "$maxKey" , "username" : "$maxKey" }
一个shard可以存在多个tag,同样一个tag可以有多个shard.如果希望指定的数据保存在多个shard上,可以为指定的多个shard保存同样的tag,例如,我们希望上面的50072这个集合保存到shard1/2/3/4上,
那么可以为shard1/2/3/4设置相同的tag
   
   
mongos> sh.addShardTag("shard0001","first2")
mongos> sh.addShardTag("shard0002","first2")
mongos> sh.addShardTag("shard0003","first2")
mongos> sh.addShardTag("shard0004","first2")
然后在用addTagRange指定:
   
   
mongos> sh.addTagRange("test.users",{"i" : 50072, "username" : "user50072"},{ "i" : 100048, "username" : "user100048" },"first2")
如果不想指定了,使用 sh.removeShardTag()来删除tag
   
   
mongos> sh.removeShardTag("shard0000","first")
然后使用 sh.removeTagRange()删除指定的规则.注意要先删除tag
   
   
mongos> sh.removeTagRange("test.users",{"i" : 50072, "username" : "user50072"},{ "i" : 100048, "username" : "user100048" },"first")












  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值