chunk的迁移
设置迁移的时间
chunk的迁移是通过balance进程完成的,那么向已经分片好的集合插入数据的时候,balance也开始了对chunk在shard上的均衡,
为了防止数据大量写入的时候,balance进程也有可能开始chunk的迁移.为了不影响mongod的读写性能,可以根据需求选择适宜的时间来开启balance
mongos> db.settings.update({_id:"balancer"},{$set :{activeWindow:{start:'16:30',stop:'17:00'}}},{upsert:true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
mongos> db.settings.find()
{ "_id" : "chunksize", "value" : NumberLong(64) }
{ "_id" : "balancer", "activeWindow" : { "start" : "16:30", "stop" : "17:00" } }
shard tag决定chunk的分布
mongos> sh.addShardTag("middleset","普通") ## shard tag
mongos> sh.addShardTag("smallset","教练")
mongos> sh.addTagRange('oa.ssa',{'property':1},{'property': NumberLong("-6641278325948566169")},'教练')
mongos> sh.addTagRange('oa.ssa',{'property': NumberLong("-6641278325948566169")},{'property':NumberLong("653705064769463253")},'普通')
balance 会根据shard tag 和 chunk 的key范围进行匹配进行判断,如果不匹配那么chunk开始迁移到对应的shard
moveChunk
手动对指定chunk进行迁移.
mongos> sh.moveChunk('oa.ssa',{ "property" : NumberLong("653705064769463253") },'smallset')
## db.collection , chunk key range, shard name
{ "millis" : 154120, "ok" : 1 }
查看结果:
smallset:PRIMARY> db.ssa.distinct('property',{})
[ "普通" ]
balance 对 chunk迁移完成后,会更新config server 中的元数据,同时会删除原shard内的chunk的旧数据.