balancer 状态、活动窗口与按集合均衡
MongoDB分片命令
// Is the balancer enabled, is it running a round right now:
sh.getBalancerState()
db.adminCommand({ balancerStatus: 1 })
// Run the balancer only between 01:00 and 05:00 (on mongos):
db.getSiblingDB("config").settings.updateOne({ _id: "balancer" }, { $set: { activeWindow: { start: "01:00", stop: "05:00" } } }, { upsert: true })
// Remove the window:
db.getSiblingDB("config").settings.updateOne({ _id: "balancer" }, { $unset: { activeWindow: true } })
// Disable / enable balancing for a single collection:
sh.disableBalancing("shop.musteri")
sh.enableBalancing("shop.musteri")
// Whether the collection is balanced (4.4+):
db.adminCommand({ balancerCollectionStatus: "shop.musteri" })作用
显示 balancer 是否启用以及是否正在执行一轮均衡,将 chunk 迁移限制在某个时间窗口内,并为单个集合禁用或启用均衡。
适用场景
chunk 迁移影响白天性能时、备份窗口期间,或在单个集合上隔离迁移问题时。
注意
窗口太窄会跟不上数据增长,导致分片不均衡;定期用 balancerCollectionStatus 检查均衡状态。在窗口关闭前开始的迁移会一直运行到完成。若某集合的均衡一直被禁用,该集合会持续在单个分片上增长。