温馨提示×

MongoDB Linux环境下如何进行故障排查

小樊
43
2026-01-03 03:17:52
栏目: 云计算

MongoDB Linux 故障排查实战手册

一 快速定位流程

  • 服务状态与端口连通
    • 检查服务:systemctl 状态、启动、启用自启(systemctl status/start/enable mongod),确认不是“disabled/inactive/failed”。
    • 端口占用:ss -lntp | grep 27017 或 lsof -i :27017,若出现“Address already in use”,结束占用进程或修改配置端口后重启。
  • 日志优先
    • 默认日志路径:/var/log/mongodb/mongod.log;实时查看:tail -f /var/log/mongodb/mongod.log。优先关注级别为 E/F 的条目与异常栈。
  • 配置与网络
    • 配置文件:/etc/mongod.conf;重点核对 net.bindIp(仅本地为 127.0.0.1,需要远程改为 0.0.0.0 并配合鉴权)、net.port(默认 27017)、storage.dbPath、systemLog.path。
    • 防火墙/安全组:放行 27017/TCP(如 ufw allow 27017,或 iptables -A INPUT -p tcp --dport 27017 -j ACCEPT)。
  • 资源与系统
    • 资源告警:free -h、df -h、iostat -x 1、top/htop;MongoDB 倾向占用大量内存做缓存,留意 swap 与 OOM。
  • 快速验证
    • 本机连接:mongo --host 127.0.0.1 --port 27017;远程连接:mongo --host <公网或内网IP> --port 27017(失败则回到“日志/配置/防火墙”三步复核)。

二 常见故障与修复对照表

症状 快速检查 修复建议
服务起不来(active: failed) systemctl status mongod;查看 /var/log/mongodb/mongod.log 依据日志修复配置/权限/路径错误;必要时 chown -R mongodb:mongodb <dbPath/logPath>;重启 systemctl restart mongod
端口被占用 ss -lntp grep 27017 / lsof -i :27017
Connection refused / 超时 本机 mongo;远程 telnet 27017 核对 bindIp(仅本地 127.0.0.1,远程改为 0.0.0.0 且开启鉴权);检查云安全组/iptables/ufw 放行 27017
配置错误导致无法启动 grep -n “ERROR” /var/log/mongodb/mongod.log 修正 /etc/mongod.conf 中语法/路径/权限;重启
权限或目录不存在 ls -ld / 创建目录并赋权:mkdir -p && chown -R mongodb:mongodb
资源瓶颈(CPU/IO/内存) top/htop、iostat -x 1、free -h、df -h 优化慢查询/索引、限流并发、扩容磁盘/内存、分离冷热数据
文件描述符不足 tail -f /var/log/mongodb/mongod.log 出现 “Too many open files” 提升 ulimit -n;在 /etc/security/limits.conf 为 mongod 设置 soft/hard nofile(如 64000)并重启会话/服务

以上对照表覆盖了服务、网络、配置、权限与资源五大类高频问题,建议按“日志→配置→网络→资源”的顺序复核。

三 日志分析与监控

  • 日志查看与检索
    • 实时跟踪:tail -f /var/log/mongodb/mongod.log;按级别筛选:grep -E ‘E|F’ /var/log/mongodb/mongod.log;按时间窗口检索可用 awk 配合时间戳字段。
  • 慢查询与索引
    • 在 shell 中提高粒度:db.setLogLevel(1);分析执行计划与扫描方式(COLLSCAN 需加索引);必要时设置慢查询阈值(如 --setParameter slowMS=100)。
  • 内置监控工具
    • mongostat:观察 insert/query/update/delete、connections、qr/qw、faults 等实时波动,快速判断负载与锁争用。
    • mongotop:按库/集合统计读写耗时,定位热点。
    • db.serverStatus() / db.stats():获取全局与库级指标(内存、连接、网络、存储引擎状态等)。
  • 可视化与第三方
    • MongoDB Compass、Ops Manager、Zabbix、Prometheus + Grafana(配合 mongo-exporter)构建仪表盘与告警。

四 数据一致性与恢复

  • 存储引擎异常
    • 在日志中识别 WiredTiger 错误(如 error: 31802);先评估 db.serverStatus().storageEngine 状态,再按官方流程尝试修复(如 mongod --repair),操作前务必做好全量备份。
  • 副本集/心跳异常
    • 日志出现 “heartbeat failed to …/REPL” 时,先做网络连通性与时间同步(NTP)核查,再检查副本集成员状态与 oplog 窗口,必要时安排重新同步。
  • 日志轮转与保留
    • 使用 logrotate 管理 mongod.log(按日轮转、压缩、保留 7 天等),通过 postrotate 发送 SIGUSR1 通知 MongoDB 重新打开日志文件,避免日志撑满磁盘。

五 安全与加固要点

  • 最小暴露面
    • 默认仅本地监听:net.bindIp 127.0.0.1;确需远程访问时改为 0.0.0.0 并启用鉴权(SCRAM 或 x.509),同时限制来源网段。
  • 防火墙与端口
    • 仅放通业务所需来源 IP 的 27017/TCP;云环境同步配置安全组规则。
  • 最小权限与审计
    • 为应用创建最小权限角色;开启审计日志(企业版)或结合应用日志与数据库日志实现全链路追踪。
  • 系统加固
    • 为 mongod 配置专用系统用户与目录权限;限制文件描述符与核心转储;定期升级补丁与备份验证。

0