首页主机资讯Ubuntu如何排查MongoDB故障

Ubuntu如何排查MongoDB故障

时间2025-11-25 14:00:04发布访客分类主机资讯浏览1496
导读:Ubuntu 下 MongoDB 故障排查实操手册 一 快速定位服务状态与日志 查看服务状态与启动命令,确认失败原因或是否未启动: 命令:sudo systemctl status mongod 关注:Active 状态、Main PI...

Ubuntu 下 MongoDB 故障排查实操手册

一 快速定位服务状态与日志

  • 查看服务状态与启动命令,确认失败原因或是否未启动:
    • 命令:sudo systemctl status mongod
    • 关注:Active 状态、Main PID、ExecStart 指向的配置文件(通常为 /etc/mongod.conf
  • 定位并查看日志,优先从日志尾部获取最新错误:
    • 命令:sudo tail -n 200 /var/log/mongodb/mongod.log
    • 若 systemd 提示启动失败(如 code=exited, status=XXX),日志中通常会有更具体的错误描述(如权限、磁盘、配置等)
  • 在 MongoDB Shell 内检查日志组件与运行时日志级别:
    • 命令:db.adminCommand({ getLogComponents: 1} )
    • 动态提升日志粒度(临时):db.setLogLevel(1)(重启后恢复默认)
  • 日志关键要素:
    • 级别:F(致命)、E(错误)、W(警告)、I(信息)
    • 组件:NETWORKSTORAGEREPLCOMMAND 等,便于快速定位模块

二 常见故障场景与修复要点

  • 服务无法启动且日志出现 “No space left on device”
    • 现象:WiredTiger 写检查点或数据文件失败,提示设备上无剩余空间
    • 处理:清理磁盘(删除无用文件/旧日志)、扩容磁盘后重启服务
  • 启动失败并提示 “Permission denied”(如 WiredTiger.turtle)
    • 现象:数据目录或文件属主不正确,mongod 无读写权限
    • 处理:chown -R mongodb:mongodb /var/lib/mongodb 后重启
  • 启动即退出并伴随 “signal=ILL” 或 “Illegal instruction”
    • 现象:CPU 指令不兼容(常见于错误架构包或硬件不支持)
    • 处理:核对系统架构与 MongoDB 版本匹配,必要时更换为兼容版本并重启验证
  • 本机无法使用 mongo 登录
    • 现象:命令未找到或连接被拒绝
    • 处理:确认服务已启动(systemctl status mongod)、使用正确连接串(mongo --host localhost --port 27017)、必要时检查防火墙是否放行 27017 端口

三 深入日志分析与性能瓶颈定位

  • 错误与告警快速筛选:
    • 命令:grep -E ‘E|F’ /var/log/mongodb/mongod.log | tail -n 200
  • 按时间段过滤(示例:提取 2025-11-25T10 之后的错误)
    • 命令:grep -E ‘E|F’ /var/log/mongodb/mongod.log | awk ‘$1 > “2025-11-25T10”’
  • 统计每小时错误量,识别突发告警:
    • 命令:cat /var/log/mongodb/mongod.log | grep -oP ‘\d{ 4} -\d{ 2} -\d{ 2} T\d{ 2} ’ | sort | uniq -c
  • 发现慢查询或全表扫描:
    • 现象:planSummary 为 COLLSCAN、keysExamined 接近 0、docsExamined 很大
    • 处理:为过滤字段建立索引(如:db.users.createIndex({ age: 1} )),并通过 --setParameter slowMS=100 调整慢查询阈值以便更早发现
  • 副本集异常:
    • 现象:REPL 组件出现 “heartbeat failed to …”
    • 处理:先做网络连通性测试,再检查副本集状态(rs.status()),必要时分析 Oplog 窗口或执行重新同步

四 配置与运维加固建议

  • 合理设置日志级别与路径(/etc/mongod.conf):
    • systemLog:
      • destination: file
      • logAppend: true
      • path: /var/log/mongodb/mongod.log
      • verbosity: 1
  • 配置 logrotate 做日志轮转,避免磁盘被日志撑满:
    • 建议配置示例(/etc/logrotate.d/mongodb):
      • /var/log/mongodb/mongod.log {
        • daily
        • rotate 7
        • compress
        • missingok
        • notifempty
        • sharedscripts
        • copytruncate
        • dateext
        • size 200M
        • postrotate
          • /bin/kill -SIGUSR1 $(cat /var/run/mongod.pid 2> /dev/null || cat /var/log/mongodb/mongod.lock 2> /dev/null) 2> /dev/null || true
        • endscript
      • }
  • 在 Shell 内手动触发日志轮转(便于运维窗口期切换日志):
    • 命令:db.runCommand({ logRotate: 1} )
  • 运行期动态调高日志粒度用于排障,验证后恢复默认,避免性能与磁盘压力

五 高风险操作与兜底方案

  • 数据文件损坏或异常时的修复:
    • 应急:先备份当前数据目录,再执行 mongod --repair(会重写数据文件,耗时且可能影响可用性)
    • 验证:修复后用 db.serverStatus().storageEngine 检查存储引擎状态
  • 清空数据目录(仅在确认可丢失数据或已完整备份时执行):
    • 命令:sudo rm -rf /var/lib/mongodb/*
    • 然后重启服务;此操作不可逆,务必谨慎
  • 一般处置顺序建议:先定位错误(日志/组件)→ 处理根因(磁盘/权限/配置/兼容性等)→ 验证(服务状态、连接、关键业务查询)→ 复盘(补齐监控、日志轮转、索引与慢查询基线)

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu如何排查MongoDB故障
本文地址: https://pptw.com/jishu/755534.html
Nginx SSL配置常见问题 MongoDB配置Ubuntu如何提高性能

游客 回复需填写必要信息