温馨提示×

Linux MongoDB故障排查方法

小樊
35
2025-12-02 17:34:49
栏目: 云计算

Linux 上 MongoDB 故障排查方法

一 快速定位流程

  • 查看服务状态与最近日志
    • 执行:sudo systemctl status mongodsudo systemctl status mongodb
    • 查看日志:sudo tail -n 50 /var/log/mongodb/mongod.log,必要时实时跟踪:sudo tail -f /var/log/mongodb/mongod.log
  • 确认监听端口与进程
    • 端口检查:sudo netstat -tulpen | grep 27017ss -lntp | grep 27017
    • 占用排查:sudo lsof -i :27017
  • 校验配置文件关键项
    • 配置文件:/etc/mongod.conf
    • 重点项:net.bindIpnet.portstorage.dbPathsystemLog.pathprocessManagement.fork
  • 检查目录权限与磁盘空间
    • 权限:ls -ld /var/lib/mongodb /var/log/mongodb
    • 磁盘:df -h;Inode:df -i
  • 若服务卡在启动阶段
    • 常见为启动超时或端口冲突,优先检查日志与端口占用,再核对配置与资源

二 常见症状与处理对照表

症状 快速检查 处理要点
服务启动失败或状态 inactive systemctl status、日志尾部 依据日志报错定位;核对配置路径、权限、端口占用
启动超时 mongod.service start operation timed out 日志、端口占用、磁盘空间、权限 释放被占用端口或改端口;清理磁盘;修正目录权限;必要时调整 systemd 超时
端口被占用 Address already in use lsof -i :27017netstat -tulpen 结束占用进程或调整 net.port 后重启
本地可连,远程被拒绝 bindIp 配置、云安全组/本机防火墙 bindIp 设为 0.0.0.0(或指定内网网段);放行 27017/tcp
权限错误 Permission denied 数据/日志目录属主与权限 chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb
配置文件错误导致无法启动 语法与路径、mongod --config /etc/mongod.conf --fork 修正 YAML 缩进/路径;用命令行校验配置后再启动
磁盘空间不足 df -h 清理或扩容;WiredTiger 需要额外空间用于检查点与日志
面板安装后无法启动 依赖、配置、权限、端口 安装依赖、校对配置路径与属主、释放端口、重启服务

三 关键配置与网络检查

  • 配置文件要点(/etc/mongod.conf)
    • 网络:
      • 仅本地:net.bindIp: 127.0.0.1
      • 允许远程:net.bindIp: 0.0.0.0(或内网网段如 192.168.1.0/24
      • 端口:net.port: 27017
    • 存储:storage.dbPath: /var/lib/mongodb
    • 日志:systemLog.destination: filesystemLog.path: /var/log/mongodb/mongod.logsystemLog.logAppend: true
    • 进程:processManagement.fork: true(配合 systemd 使用时通常设为 false)
  • 防火墙与安全组
    • UFW:sudo ufw allow 27017/tcp
    • firewalld:sudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload
    • 云主机:在控制台安全组放行 27017/tcp(仅内网或指定来源网段)
  • 监听地址核对
    • 修改 bindIp 后需重启:sudo systemctl restart mongod
    • 远程连接测试:mongo --host <服务器IP> --port 27017mongosh <服务器IP>:27017

四 日志分析与运维工具

  • 实时查看与基础分析
    • 实时日志:tail -f /var/log/mongodb/mongod.log
    • Shell 获取日志:db.adminCommand({ getLog: 1 });查看组件:db.getLogComponents()
  • 慢查询与可视化
    • 使用 mtoolsmlogfiltermplotqueriesmloginfo 进行时间筛选、慢查询统计与图形化
    • 结合 jq 对结构化日志做进一步筛选
  • 日志轮转与容量控制
    • 使用 logrotate 管理 mongod.log,示例配置(/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/log/mongodb/mongod.lock) ; endscript }
    • 注意:开启 copytruncate 或使用 postrotate 发送信号前,确认 MongoDB 支持该方式,避免日志写入中断

五 数据安全与恢复建议

  • 变更前备份关键配置与数据目录
    • 配置:sudo cp /etc/mongod.conf /etc/mongod.conf.bak-$(date +%F)
    • 数据:sudo tar czf mongodb-data-$(date +%F).tgz /var/lib/mongodb
  • 异常关闭或异常状态修复
    • 若数据文件疑似不一致,可在确保有备份的前提下尝试修复模式启动(谨慎):mongod --repair --dbpath /var/lib/mongodb
    • 修复完成后再以正常方式启动并核验数据可用性
  • 变更后验证
    • 重启:sudo systemctl restart mongod
    • 状态与日志:systemctl status mongodtail -n 50 /var/log/mongodb/mongod.log
    • 连接测试:本地与远程分别验证;必要时检查应用连接串与认证配置

0