MongoDB执行removeShard卡在draining阶段且分片无法访问问题咨询
处理步骤
第一步:优先恢复业务可用性(修复bp-rs1故障)
当前所有异常的根因是bp-rs1分片无法找到主节点,这既是业务查询报错的原因,也是balancer无法迁移bp-rs3上剩余chunk的直接原因,优先解决该问题:
- 登录bp-rs1对应的服务器节点,检查mongod进程状态,确认进程是否存活、27020端口是否可正常访问,查看mongod运行日志排查进程异常原因(常见原因包括磁盘满、配置文件损坏、OOM被系统杀死等)。
- 从
sh.status的输出可以看到bp-rs1是单节点副本集,无冗余节点,直接重启异常的mongod进程即可恢复bp-rs1的服务,业务查询会自动恢复正常。
第二步:处理分片移除卡住问题
bp-rs1恢复正常后,balancer会自动恢复chunk迁移任务,bp-rs3上剩余的334个chunk会逐步迁移到bp-rs0和bp-rs1,等待迁移完成后removeShard命令会自动执行完成。
如果需要紧急回滚分片移除操作,取消bp-rs3的draining状态,执行以下命令即可:
db.adminCommand({ removeShard: "bp-rs3", abort: true })
执行后bp-rs3会恢复为正常可用分片,集群直接回到移除操作前的状态。
后续优化建议
- 生产环境所有分片副本集至少配置3节点,避免单节点故障导致整个分片不可用,引发业务中断。
- 执行分片移除等高风险操作前,先确认所有分片的运行状态正常,再执行操作。
内容的提问来源于stack exchange,提问作者Chrift
相关产品推荐
相关产品推荐

