MongoDB 4.0.23分片集群执行sh.startBalancer()后均衡失效求助
MongoDB 4.0分片集群config.system.sessions集合UUID冲突均衡失败解决方案
报错根因
目标分片s3上已经存在独立创建的config.system.sessions集合,该集合的UUID与源分片s0上由集群统一管理的config.system.sessions集合UUID不匹配,MongoDB分片迁移要求同源集合UUID必须完全一致,因此均衡迁移任务被阻断。
可执行修复步骤
- 第一步:先停止集群均衡器,避免操作过程中触发无效迁移任务,执行命令:
// 停均衡器 sh.stopBalancer() // 确认均衡器已停止,返回false即为正常 sh.getBalancerState()
- 第二步:登录报错的目标分片s3的主节点,切换到config库校验集合数据:
use config // 查看当前集合的数据量 db.system.sessions.countDocuments()
config.system.sessions存储的是集群会话信息,默认TTL为30分钟,数据无长期保存价值,可直接删除该冲突集合:
db.system.sessions.drop()
如果确有需要留存该集合数据,可先通过mongodump工具备份数据后再执行删除操作。
- 第三步:重启集群均衡器,验证迁移是否正常:
sh.startBalancer() // 确认均衡器正常运行 sh.isBalancerRunning() // 10分钟后查看chunk分布状态,确认config.system.sessions的chunk正在正常迁移 sh.status()
注意事项
- 操作前建议对集群config库执行全量备份,避免误操作导致元数据损坏
- 该操作不会影响正常业务运行,旧会话过期后集群会自动生成新的会话记录写入集合
内容的提问来源于stack exchange,提问作者R2D2
相关产品推荐
相关产品推荐

