温馨提示×

CentOS系统MongoDB的故障排查指南

小樊
36
2025-11-23 19:35:11
栏目: 云计算

CentOS 上 MongoDB 故障排查指南

一 快速定位流程

  • 检查服务状态与启动日志
    • 查看服务状态:sudo systemctl status mongod
    • 查看系统日志:sudo journalctl -ex | grep mongod
    • 查看 MongoDB 日志:sudo tail -n50 /var/log/mongodb/mongod.log
  • 校验配置文件关键项:/etc/mongod.conf
    • 网络与端口:net.bindIpnet.port(默认端口 27017
    • 数据与日志路径:storage.dbPathsystemLog.path
    • 安全:security.authorization
  • 直连本机验证:mongosh --host 127.0.0.1:27017
  • 远程连通性测试:telnet <服务器IP> 27017nc -vz <IP> 27017
  • 资源与依赖检查
    • 资源:top/htopdf -hfree -m
    • 依赖:openssl-devel 等缺失库
    • SELinux:sestatus,排查被策略拦截的可能

二 常见故障与修复

  • 服务无法启动
    • 查看日志定位错误;常见为配置路径不存在或权限不足
    • 修复数据/日志目录权限:sudo chown -R mongod:mongod /var/lib/mongo /var/log/mongodb
    • 端口被占用:ss -lntp | grep 27017,结束占用进程后重启
    • 异常关机导致锁文件残留:删除锁文件 rm -f /var/lib/mongo/mongod.lock,并以 --repair 修复后再启动:/usr/bin/mongod -f /etc/mongod.conf --repair
  • 本机能连,远程连不上
    • 配置 net.bindIp: 0.0.0.0(或指定内网 IP),并重启服务
    • 防火墙放行:sudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload
    • 云服务器需同时检查安全组入/出站规则开放 27017
  • 认证失败
    • 启用 security.authorization: enabled
    • 使用带认证的 URI:mongosh -u <用户名> -p <密码> --authenticationDatabase <库名>
  • SELinux 拦截
    • 临时排查:sudo setenforce 0,若恢复正常需为 MongoDB 配置合适的 SELinux 策略或保持宽容模式并完善策略
  • 依赖或库缺失
    • 安装缺失库:sudo yum install -y openssl-devel 等,再重启服务

三 性能卡顿与不稳定

  • 快速体检
    • 实例状态:mongostatmongosh --eval 'db.serverStatus()'
    • 系统资源:top/htopiostat -x 1df -h
    • 慢查询:开启慢查询日志,使用 explain() 分析执行计划
  • 常见根因与优化
    • 资源不足:升级 CPU/内存/磁盘(优先 SSD),合理设置 WiredTiger 缓存 storage.wiredTiger.engineConfig.cacheSizeGB
    • 索引缺失或顺序不当:为高频查询字段建立合适索引,避免全表扫描
    • 透明大页(THP):建议关闭,降低长尾延迟
    • 内核/网络:在极高并发下,结合业务测试调整 kernel.sched_min_granularity_nskernel.sched_wakeup_granularity_ns,并通过 RPS 均衡网卡软中断

四 维护与加固建议

  • 备份与恢复
    • 逻辑备份:mongodump -d <库名> -o <备份目录>;恢复:mongorestore -d <库名> <备份目录>/<库名>
  • 日志与监控
    • 配置日志轮转,防止日志无限增长
    • 持续监控:MongoDB 自带工具 + 系统监控(如 top/htop/iostat)+ 第三方(如 Prometheus/Grafana/Zabbix
  • 安全加固
    • 启用认证与最小权限;限制监听地址;仅开放必要端口;云环境同步配置安全组策略

五 一键诊断命令清单

  • 服务与日志
    • sudo systemctl status mongod
    • sudo journalctl -ex | grep mongod
    • sudo tail -n100 /var/log/mongodb/mongod.log
  • 网络与端口
    • ss -lntp | grep 27017
    • telnet <IP> 27017nc -vz <IP> 27017
    • sudo firewall-cmd --list-ports
  • 配置与权限
    • cat /etc/mongod.conf | egrep 'bindIp|port|dbPath|logPath|authorization'
    • ls -ld /var/lib/mongo /var/log/mongodb
    • ps aux | grep mongod
  • 资源与依赖
    • top/htopiostat -x 1df -hfree -m
    • sestatus
    • sudo yum provides */libssl.sosudo yum install -y openssl-devel
  • 实例与性能
    • mongostat
    • mongosh --eval 'db.serverStatus()'
    • mongosh --eval 'db.adminCommand({connectionStatus: 1})'
  • 修复与维护
    • sudo chown -R mongod:mongod /var/lib/mongo /var/log/mongodb
    • /usr/bin/mongod -f /etc/mongod.conf --repair
    • mongodump / mongorestore

0