mongodb之shard集群 balance操作管理
2016-04-15 09:09
706 查看
查看balance状态
mongos> sh.getBalancerState()
true
通过balance锁查看balance活动
如果state是2,表示balance锁已经被获取
mongos> db.locks.find({"_id" : "balancer"}).pretty()
{
"_id" : "balancer",
"state" : 2,
"who" : "db10:4001:1427696724:1804289383:Balancer:1681692777",
"ts" : ObjectId("5519158885c46501a2380c4a"),
"process" : "db10:4001:1427696724:1804289383",
"when" : ISODate("2015-03-30T09:21:12.689Z"),
"why" : "doing balance round"
}
设置balance窗口
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "23:00", stop : "6:00" } } }, true )
查看
mongos> sh.getBalancerWindow()
{ "start" : "23:00", "stop" : "22:00" }
手动执行balance
mongos> sh.startBalancer()
集合级别启用、禁用balance
sh.enableBalancing("test.doc2")
sh.disableBalancing("test.doc2")
查看
mongos> db.getSiblingDB("config").collections.findOne({_id : "test.doc2"})
{
"_id" : "test.doc2",
"lastmod" : ISODate("2015-03-30T06:40:58.730Z"),
"dropped" : false,
"key" : {
"_id" : "hashed"
},
"unique" : false,
"lastmodEpoch" : ObjectId("5518effa291477d087fdc6fe"),
"noBalance" : true
}
当发现数据分配不平均时
如:
mongos> sh.status()
--- Sharding Status ---
sharding version: {
...
...
test.doc0
shard key: { "int1" : 1, "int2" : 1 }
chunks:
rs0 1
rs1 1
rs2 1
{ "int1" : { "$minKey" : 1 }, "int2" : { "$minKey" : 1 } } -->> { "int1" : 0, "int2" : 1 } on : rs1 Timestamp(2, 0)
{ "int1" : 0, "int2" : 1 } -->> { "int1" : 0, "int2" : 9 } on : rs2 Timestamp(3, 0)
{ "int1" : 0, "int2" : 9 } -->> { "int1" : { "$maxKey" : 1 }, "int2" : { "$maxKey" : 1 } } on : rs0 Timestamp(3, 1)
...
...
上面的doc0,有3个chunk,其中rs0上的chunk包含了从0,9一直到最大值的所有数据。
此时可以split这个chunk
mongos> sh.splitAt( "test.doc0", { int1:30, int2:30 });
{ "ok" : 1 }
mongos> sh.splitAt( "test.doc0", { int1:60, int2:60 });
{ "ok" : 1 }
手工移动chunk
通过find条件,将这条记录所在的chunk移动到指定rs
mongos> db.runCommand({moveChunk:"test.doc0", find:{int1:30, int2:30},
to:"rs1"})
{ "millis" : 11137, "ok" : 1 }
mongos> sh.getBalancerState()
true
通过balance锁查看balance活动
如果state是2,表示balance锁已经被获取
mongos> db.locks.find({"_id" : "balancer"}).pretty()
{
"_id" : "balancer",
"state" : 2,
"who" : "db10:4001:1427696724:1804289383:Balancer:1681692777",
"ts" : ObjectId("5519158885c46501a2380c4a"),
"process" : "db10:4001:1427696724:1804289383",
"when" : ISODate("2015-03-30T09:21:12.689Z"),
"why" : "doing balance round"
}
设置balance窗口
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "23:00", stop : "6:00" } } }, true )
查看
mongos> sh.getBalancerWindow()
{ "start" : "23:00", "stop" : "22:00" }
手动执行balance
mongos> sh.startBalancer()
集合级别启用、禁用balance
sh.enableBalancing("test.doc2")
sh.disableBalancing("test.doc2")
查看
mongos> db.getSiblingDB("config").collections.findOne({_id : "test.doc2"})
{
"_id" : "test.doc2",
"lastmod" : ISODate("2015-03-30T06:40:58.730Z"),
"dropped" : false,
"key" : {
"_id" : "hashed"
},
"unique" : false,
"lastmodEpoch" : ObjectId("5518effa291477d087fdc6fe"),
"noBalance" : true
}
当发现数据分配不平均时
如:
mongos> sh.status()
--- Sharding Status ---
sharding version: {
...
...
test.doc0
shard key: { "int1" : 1, "int2" : 1 }
chunks:
rs0 1
rs1 1
rs2 1
{ "int1" : { "$minKey" : 1 }, "int2" : { "$minKey" : 1 } } -->> { "int1" : 0, "int2" : 1 } on : rs1 Timestamp(2, 0)
{ "int1" : 0, "int2" : 1 } -->> { "int1" : 0, "int2" : 9 } on : rs2 Timestamp(3, 0)
{ "int1" : 0, "int2" : 9 } -->> { "int1" : { "$maxKey" : 1 }, "int2" : { "$maxKey" : 1 } } on : rs0 Timestamp(3, 1)
...
...
上面的doc0,有3个chunk,其中rs0上的chunk包含了从0,9一直到最大值的所有数据。
此时可以split这个chunk
mongos> sh.splitAt( "test.doc0", { int1:30, int2:30 });
{ "ok" : 1 }
mongos> sh.splitAt( "test.doc0", { int1:60, int2:60 });
{ "ok" : 1 }
手工移动chunk
通过find条件,将这条记录所在的chunk移动到指定rs
mongos> db.runCommand({moveChunk:"test.doc0", find:{int1:30, int2:30},
to:"rs1"})
{ "millis" : 11137, "ok" : 1 }
相关文章推荐
- 故障案例--mongodb添加副本集成员报错
- MongoDB(一)
- java连接mongodb源码解读
- 安装MongoDB到CentOS 6
- MongoDB快速入门(十三)- 聚合count、distinct和group
- MongoDB之集群安装部署与shard操作
- 在Mac上安装MongoDB
- MongoDB使用索引
- 8天学通MongoDB——第三天 细说高级操作
- 8天学通MongoDB——第二天 细说增删查改
- MongoDB快速入门(十二) -- 索引
- 【MongoDB】使用aggregate求最大值
- 【MongoDB】spring-data-mongo配置
- 使用lua调用mongoDB 实例
- installing MongoDB on OSX
- mongodb数据库插入文档insert方法
- MongoDB适用和不适用场景总结
- Node.js使用MongoDB模块时的常见错误
- MongoDB学习笔记-创建、更新、删除文档
- MongoDB快速入门(十一)- sort() 方法