通常 oplog 建议保留 24-48 小时 的操作量即可,建议调整到 5-10GB 就足够了。
释放空间操作步骤
步骤 1:缩小 oplog 上限(在线操作,无需重启)
// 在主节点执行
use admin
// 缩小到 8GB(8192MB)
db.adminCommand({ replSetResizeOplog: 1, size: 8192 })
或缩小到 5GB(5120MB):
db.adminCommand({ replSetResizeOplog: 1, size: 5120 })
步骤 2:执行 compact 整理碎片
use local
db.runCommand({ compact: "oplog.rs" })
步骤 3:验证结果
db.oplog.rs.stats()
预期结果:
maxSize变为新的配置值(如 5368709120 for 5GB)size会减小,但不会立即到 0,因为 capped collection 特性
重要提醒
⚠️ 执行 replSetResizeOplog 会截断(删除)最旧的操作日志,确保:
- 所有副本节点当前都是可用状态(不是 recovering 或 stale)
- 业务低峰期执行,避免影响同步
如果某个副本节点 lag 太远,可能需要重新全量同步。
快速检查副本状态
rs.status()
确认所有节点 stateStr 是 SECONDARY 或 PRIMARY,没有 RECOVERING 或 ROLLBACK 状态。
总结
| 操作 | 命令 | 影响 |
|---|---|---|
replSetResizeOplog |
缩小上限,截断旧日志 | 副本需要能跟上同步 |
compact |
整理存储碎片,释放物理空间 | 轻微性能影响,建议低峰期执行 |
执行这两个命令后,你的磁盘空间应该能释放到 5-8GB 左右(取决于你选择的新大小)。
不需要重启 MongoDB 服务。