CentOS上MongoDB故障排查实操指南
一 快速定位与恢复
sudo systemctl status mongod、sudo systemctl start mongod、sudo systemctl enable mongod。sudo tail -f /var/log/mongodb/mongod.log;同时查看 systemd 日志:journalctl -xe | grep mongod。sudo lsof -iTCP -sTCP:LISTEN -n -P | grep 27017 或 netstat -tuln | grep 27017;必要时结束冲突进程:kill -9 <PID>。df -h(建议保留至少 20% 余量)、内存与 CPU top/htop;确保数据目录(如 /var/lib/mongo)与日志目录(如 /var/log/mongodb)属主为 mongod:sudo chown -R mongod:mongod /var/lib/mongo /var/log/mongodb。sudo systemctl restart mongod 并再次观察日志输出。二 常见故障场景与处理
journalctl 的错误行;常见根因包括配置文件 YAML 语法错误、dbPath 不存在或无权限、端口被占用。修正后重启服务。lsof 或 netstat 找到占用 27017 的进程并释放,或调整 net.port。bindIp: 0.0.0.0(或指定服务器 IP),并重启:sudo systemctl restart mongod。sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent && sudo firewall-cmd --reload。sestatus 为 Enforcing 导致访问被拒,可临时测试 sudo setenforce 0;确认是 SELinux 问题后,为数据/日志目录设置类型:sudo chcon -Rv --type=mongod_var_lib_t /var/lib/mongo、sudo chcon -Rv --type=mongod_log_t /var/log/mongodb,或按需调整策略(不建议生产直接永久禁用 SELinux)。security.authorization: enabled,连接需提供用户名、密码与认证库:mongo --host <IP> --port 27017 -u <user> -p <pwd> --authenticationDatabase admin。三 性能与健康诊断
mongostat 观察插入/查询速率、连接数、内存与页面错误;使用 mongotop 查看各集合读写耗时,定位慢集合与热点操作。db.serverStatus() 获取实例级指标(锁、内存、连接、断言等),用于容量与瓶颈分析。grep 'error' /var/log/mongodb/mongod.log 快速筛错;结合 awk/sed 做字段筛选;统计高频错误:grep 'error' mongod.log | sort | uniq -c | sort -rn;用 journalctl -u mongod -n 50 查看最近系统日志;借助 mtools(如 mlogfilter、mplotqueries)做慢查询与可视化分析。四 安全加固与版本维护
bindIp: 0.0.0.0 暴露到公网;结合 firewalld 精准放行来源网段。security.authorization: enabled,为应用创建最小权限用户(如 readWrite 到目标库),连接时显式指定 --authenticationDatabase。sudo yum install openssl-devel),并优先使用 最新稳定版;升级前务必全量备份(文件系统快照或 mongodump)。五 排错清单模板
| 检查项 | 命令示例 | 判定要点 | 处理建议 |
|---|---|---|---|
| 服务状态 | systemctl status mongod |
是否 active(running) | 未运行则 start 并查看日志 |
| 错误日志 | tail -f /var/log/mongodb/mongod.log |
是否报配置、权限、端口等错 | 按报错行修复并重启 |
| 配置语法 | mongod --config /etc/mongod.conf --fork(仅校验) |
是否提示 YAML/路径错误 | 修正后重启 |
| 端口占用 | `lsof -iTCP -sTCP:LISTEN -n -P | grep 27017` | 是否被非 mongod 占用 |
| 资源与权限 | df -h、top、chown -R mongod:mongod /var/lib/mongo /var/log/mongodb |
磁盘是否不足、目录属主是否正确 | 清理或调整属主 |
| 远程连通 | firewall-cmd --query-port=27017/tcp、telnet <IP> 27017 |
端口是否放行、端口是否可达 | 放行并重载防火墙 |
| SELinux | sestatus、setenforce 0、chcon |
是否为 Enforcing 且拦截 | 设置正确类型或策略 |
| 认证 | mongo -u <u> -p <p> --authenticationDatabase admin |
是否鉴权失败 | 核对用户、密码与库 |