MongoDB节点一直处于RECOVERING状态怎么排查_Oplog陈旧与全量同步失败

MongoDB副本集节点卡在RECOVERING状态的根本原因只有两个:一是无法追上主节点oplog(oplog过短或过旧),二是全量同步中途失败且未重试成功;其他如网络、磁盘、权限等问题只是诱因,不直接导致卡住。为什么 MongoDB 副本集节点卡在 RECOVERING 状态根本原因只有两个:要么无法追上主节点的 oplog(oplog 太短或太旧),要么全量同步(initial sync)中途失败且没重试成功。不是网络抖动、磁盘满、权限错这些"外围问题"导致的卡住,而是同步机制本身被阻断了。典型现象是:rs.status() 里该节点状态长期为 RECOVERING,日志里反复出现 cannot find starting oplog entry 或 initial sync pending,但没报具体错误码。oplog 不够长:主节点已把从节点需要的起始 oplog 条目覆盖掉了全量同步被中断后未自动重启:比如复制过程中磁盘写满、目标节点崩溃、或 storage.mmapv1(已弃用)下锁冲突从节点时间落后太多:导致 oplog 时间戳校验失败(尤其在 WT 引擎 + logicalSessionTimeoutMinutes 配置敏感时)查 oplog 是否陈旧:用 db.getReplicationInfo() 和 db.oplog.rs.find().sort({natural: -1}).limit(1)先确认主节点的 oplog 覆盖窗口是否足够。执行 db.getReplicationInfo() 看 timeDiffHours ------ 如果小于从节点上次同步时间差,就铁定追不上。再手动查最新一条 oplog:db.oplog.rs.find().sort({natural: -1}).limit(1),看 ts 字段的时间戳。对比从节点日志里报错的 "need oplog entry at timestamp X",如果 X 已不在主节点 oplog 中,说明陈旧。修复方法不是"拉长 oplog",而是删掉从节点数据目录,强制重新 initial sync临时补救可改主节点 oplogSizeMB 并重启,但仅对后续同步有效,不能救当前卡住的节点注意:4.4+ 版本默认使用 WiredTiger,oplog 是 capped collection,大小由 storage.oplogMinRetentionHours 控制,不是固定大小判断是否卡在全量同步:看 mongod 日志里的 InitialSync 关键字和 progress 字段启动从节点后,日志里会密集打印 InitialSync 相关行。如果某条 progress 卡住不动超过 30 分钟(比如一直停在 "collection": "admin.system.version"),基本就是同步卡死。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

相关推荐
Csvn12 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽13 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户5569188175315 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
倔强的石头_16 小时前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
兵慌码乱1 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei1 天前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python
aqi002 天前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用
Csvn2 天前
`functools.lru_cache` —— 一行代码搞定缓存加速
后端·python
金銀銅鐵2 天前
[Python] 从《千字文》中随机挑选汉字
后端·python