时间:2021-07-01 10:21:17 帮助过:1人阅读
2,为tag指定片键范围
sh.addTagRange(
"db_name.collection_name", {field:"min_value"}, {field:"max_value"}, "shard_tag" )
每个shard的tag可以使用任意数量的tag,MongoDB的均衡器在移动块时,会将特定片键范围的chunk移动到特定的shard上。
三,手动进行数据的分发
MongoDB内置均衡器(balancer),自动实现数据块的拆分和移动,有时,可以关闭balancer,使用moveChunk命令手动移动数据块。
1,关闭balancer
连接到一个mongos,更新config.setting命名空间
use config
db.setting.update({"_id":"balancer"},{"enabled":false},true)
--or
sh.setBalancerState(false);
2,拆分块
拆分块是指新增一个边界点,将一个chunk在边界点处拆分成两个chunk。在MongoDB中,将片键从小到大排序,边界值属于右边的chunk。
sh.splitAt("db_name.collection_name",{sharded_filed:"new_boundary_value"})
3,移动块
MongoDB将包含指定文档的chunk移动到指定的shard上,必须使用片键来查找所要一定的chunk。
sh.moveChunk("db_name.collection_name",{sharded_filed:"value_in_chunk"},"new_shard_name")
4,启用balancer
sh.setBalancerState(true)
5,刷新mongos的缓存
在Application layer 和数据存储之间,存在一个Query Router,即mongos,mongos会在第一次启动或分片的元数据被更新之后,从config server 同步配置数据,并缓存在mongos中。有时,mongos无法从config server上及时同步最新的配置信息,导致无法路由到相应的chunk,不能返回正确的数据,可以使用flushRouterConfig 命令手动刷新mongos的缓存
db.adminCommand({"flushRouterConfig":1})
参考文档:
Sharding
MongoDB 数据分发
标签: