温馨提示×

MongoDB在Linux上的故障排查

小樊
34
2025-11-22 21:07:46
栏目: 云计算

MongoDB在Linux上的故障排查清单

一 快速定位流程

  • 检查服务状态与启动失败原因:使用命令查看服务是否存活、最近日志与单元文件输出,定位“起不来”的直接报错。
    • 命令示例:
      • 查看状态:sudo systemctl status mongod
      • 实时看系统日志:sudo journalctl -ex | grep mongod
      • 查看MongoDB日志:sudo tail -n 50 /var/log/mongodb/mongod.log
  • 核对关键配置与目录权限:重点检查网络绑定、端口、数据目录与日志路径是否存在且权限正确,避免因配置或权限导致无法启动或无法连接。
    • 配置文件:/etc/mongod.conf
    • 关键项:bindIp、port、dbPath、logPath、security.authorization
    • 权限示例:ls -ld /var/lib/mongodb /var/log/mongodb(确保属主/属组为 mongod/mongodb,权限合理)
  • 直连本机验证:排除网络因素,先确认本机可连。
    • 命令示例:mongo --host 127.0.0.1 --port 27017
  • 检查网络与防火墙:确认监听地址与端口对外开放,防火墙放行。
    • 命令示例(UFW):sudo ufw statussudo ufw allow 27017
    • 命令示例(firewalld):sudo firewall-cmd --list-portssudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload
  • 资源与依赖检查:确认磁盘空间、内存、CPU、I/O是否正常,必要时安装缺失依赖库(如 openssl-devel)。

二 常见故障与修复要点

  • 服务无法启动
    • 典型原因:配置项错误(如 bindIp 仅 127.0.0.1 导致远程连不上)、dbPath/logPath 不存在或权限错误、端口被占用、数据文件损坏。
    • 处理要点:核对 /etc/mongod.conf 与目录权限;用 journalctlmongod.log 定位首条报错;必要时以 mongod --dbpath /path --logpath /path --fork 前台启动观察详细输出;若数据文件异常,可在备份后尝试 –repair 修复(谨慎操作)。
  • 本机能连但远程连不上
    • 典型原因:bindIp 未包含服务器IP或仍为 127.0.0.1;云安全组/本机防火墙未放行 27017;监听端口非默认或被占用。
    • 处理要点:将 bindIp 调整为 0.0.0.0(或指定内网IP),重启服务;在云平台与系统防火墙放行 27017/tcp;确认 netstat -tulpen | grep 27017 监听正确。
  • 认证与权限失败
    • 典型原因:未启用或未正确配置 security.authorization;连接串未带认证库;用户权限不足。
    • 处理要点:在 mongod.conf 中启用授权并重启;连接时使用 –authenticationDatabase admin;按需创建/授权用户。
  • 性能异常与慢查询
    • 典型现象:CPU/内存/磁盘IO飙升、请求延迟增大、连接数异常。
    • 处理要点:用 mongostat/mongotop 观察吞吐与热点库表;在 mongod.log 中筛选慢查询(如 mlogfilter … --slow 100);必要时调整索引与查询、限流或扩容。

三 日志与监控定位

  • 日志查看与分析
    • 常用路径:/var/log/mongodb/mongod.log;实时跟踪:tail -f /var/log/mongodb/mongod.log
    • 工具链:使用 mtools(如 mlogfilter、mplotqueries、mloginfo)筛选慢查询、绘制查询时间分布;在 Shell 中查看组件日志与获取全量日志:db.getLogComponents()db.adminCommand({ getLog: 1 })
    • 日志轮转:通过 logrotate 管理日志大小与保留期,示例配置(/etc/logrotate.d/mongodb):
      • /var/log/mongodb/mongod.log {
        • daily; rotate 7; compress; missingok; notifempty; sharedscripts; copytruncate;
        • size 200M;
        • postrotate
          • /bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock)
        • endscript
      • }
  • 运行状态监控
    • 命令行:
      • mongostat:查看 insert/update/query/delete 速率、连接数、脏页、断言等
      • mongotop:按库/集合统计读写耗时
      • db.serverStatus():获取全局指标(内存、连接、操作计数、网络、WiredTiger 引擎状态等)
    • 系统与可视化:结合 top/htop/iostat 观察资源;使用 MongoDB Compass 做可视化诊断;生产建议接入 Prometheus + Grafana 做长期监控与告警。

四 高频命令速查表

目标 命令示例
服务状态 sudo systemctl status mongod
启动/重启/开机自启 sudo systemctl start
系统日志定位 sudo journalctl -ex
MongoDB日志 sudo tail -n 50 /var/log/mongodb/mongod.log;tail -f …
本机直连测试 mongo --host 127.0.0.1 --port 27017
远程连通性 mongo --host --port 27017(失败先检查防火墙/安全组)
监听端口检查 sudo netstat -tulpen
资源监控 top/htop;iostat -x 1
MongoDB监控 mongostat;mongotop;db.serverStatus()
慢查询筛选 mlogfilter replsvr.log --from “2025-01-01T00:00:00” --to “+1d” --slow 100

以上命令覆盖服务、网络、日志、监控四个维度,适合作为现场排障的“第一响应”清单。

0