温馨提示×

Debian MongoDB故障排查步骤解析

小樊
34
2025-11-15 13:50:45
栏目: 云计算

Debian 上 MongoDB 故障排查步骤解析

一 快速定位流程

  • 服务状态与启动失败原因
    • 执行:sudo systemctl status mongod,查看是否 active、是否反复重启、最近的报错关键字。
    • 查看服务日志:sudo journalctl -u mongod -xe,获取 systemd 层面的启动失败线索。
  • 日志与配置文件
    • 查看 MongoDB 日志:sudo tail -n50 /var/log/mongodb/mongod.log,优先关注异常、断言、权限、路径、端口绑定等关键词。
    • 校验配置语法:mongod --config /etc/mongod.conf --eval “quit()”,提前发现配置错误。
  • 端口与监听
    • 检查端口监听:ss -ltnp | grep 27017netstat -tulnp | grep 27017,确认 mongod 是否在 27017 监听。
    • 端口占用排查:如发现占用,处理占用进程或修改 /etc/mongod.confnet.port
  • 网络与防火墙
    • 本机连通性:mongo --host 127.0.0.1:27017;远程连通性:mongo --host <服务器IP>:27017
    • 防火墙放行:如使用 ufw 执行 sudo ufw allow 27017;如使用 iptables 检查规则是否放行 27017/tcp
  • 资源与目录权限
    • 磁盘空间:df -h,确保 dbPath 所在分区充足。
    • 目录与权限:确认 /var/lib/mongodb/var/log/mongodb 存在且属主为 mongodb:mongodb,必要时执行:
      • sudo mkdir -p /var/lib/mongodb /var/log/mongodb
      • sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb
  • 副本集与一致性(如启用)
    • 连接 Shell:mongo
    • 查看状态:rs.status(),关注 members.stateStroptime、同步延迟与错误。

二 常见症状与处理要点

  • Connection refused
    • 可能原因:服务未启动、端口不对、bindIp 未包含客户端 IP、防火墙阻断。
    • 处理:启动服务;核对 /etc/mongod.confnet.bindIpnet.port;本机与远程分别连通性测试;放行防火墙端口。
  • Write concern failed
    • 可能原因:副本集多数派不可达、网络分区、节点状态异常。
    • 处理:rs.status() 检查 members 状态与 optime 差异;恢复网络与节点;必要时调整写关注或临时降级以恢复可用性。
  • No Server Chosen by ReadPreference ServerSelector
    • 可能原因:读偏好与拓扑不匹配(如 secondary 不可达)、驱动版本过旧。
    • 处理:核对连接字符串的 readPreference;确保目标节点健康;升级驱动至与服务器兼容的版本。
  • 启动失败(配置或权限类)
    • 可能原因:dbPath/logPath 路径不存在或无权限、配置项错误、端口被占用、旧版 systemd 单元路径残留。
    • 处理:校验配置语法;创建缺失目录并修正属主;释放被占用端口;如 systemd 报错涉及 /var/run → /run 的 PID 文件路径变更,按提示修正服务单元并重新加载:sudo systemctl daemon-reexec && sudo systemctl restart mongod

三 性能与稳定性排查

  • 实时监控
    • 使用 mongostat 观察插入/查询/更新/删除速率、连接数、页面错误等;使用 mongotop 查看集合级别的读写耗时分布。
  • 查询与索引
    • 使用 db.collection.find().explain(“executionStats”) 检查是否命中索引、扫描文档数与执行时间;为高频查询路径建立合适的单字段或复合索引,避免全表扫描。
  • 慢查询与 Profiling
    • 启用数据库分析器:db.setProfilingLevel(1, { slowms: 100 })(示例阈值 100ms),在 db.system.profile 中分析慢操作并优化。
  • 资源瓶颈
    • 系统层面监控 CPU、内存、磁盘 I/O、网络带宽;磁盘 I/O 高时优先排查索引缺失、大量扫描、写入放大或不合理的批处理;必要时考虑 SSD、调整 WiredTiger 缓存(如 wiredTigerCacheSizeGB)。

四 安全与系统层优化

  • 访问控制
    • /etc/mongod.conf 中启用 security.authorization: enabled,为应用与运维创建最小权限账户;远程访问务必配合 TLS/SSL 与强认证。
  • 内核与虚拟化
    • /etc/default/grub 添加 GRUB_CMDLINE_LINUX_DEFAULT=“quiet numa=off transparent_hugepage=never”,执行 sudo update-grub && sudo reboot;或在运行时写入 /sys/kernel/mm/transparent_hugepage/enabled/sys/kernel/mm/transparent_hugepage/defragnever,降低内存管理对数据库延迟的影响。
  • 版本与仓库
    • 使用受支持的 MongoDB 版本 与官方仓库,定期 apt update && apt upgrade;升级前做好完整备份与变更评估。

五 一键巡检命令清单

  • 服务与日志
    • sudo systemctl status mongod
    • sudo journalctl -u mongod -xe -n100
    • sudo tail -n100 /var/log/mongodb/mongod.log
  • 配置与连通
    • mongod --config /etc/mongod.conf --eval “quit()”
    • ss -ltnp | grep 27017
    • mongo --host 127.0.0.1:27017
    • mongo --host <服务器IP>:27017
  • 资源与权限
    • df -h
    • ls -ld /var/lib/mongodb /var/log/mongodb
    • ps aux | grep mongod
  • 副本集(如启用)
    • mongo --eval “rs.status()”
  • 性能观测
    • mongostat --host 127.0.0.1:27017 1
    • mongotop --host 127.0.0.1:27017 1

0