CentOS 上 MongoDB 故障排查实操手册
一 快速定位流程
- 查看服务状态与系统日志:使用命令 systemctl status mongod 与 journalctl -xe 获取失败原因与调用栈;若服务未起来,优先看这两条输出。
- 查看 MongoDB 自身日志:默认路径 /var/log/mongodb/mongod.log,使用 tail -f /var/log/mongodb/mongod.log 实时观察错误关键字(如 ERROR、Fatal、Unlink socket)。
- 校验配置文件:核对 /etc/mongod.conf 中关键项(如 systemLog.path、storage.dbPath、net.bindIp、net.port)是否存在且路径可写。
- 检查资源与权限:用 top、df -h 排查 CPU/内存/磁盘;确认数据目录与日志目录属主为 mongod:mongod(常见目录:/var/lib/mongo、/var/log/mongodb)。
- 重启并验证:完成修复后执行 systemctl restart mongod,再次检查状态与日志是否恢复正常。
二 常见故障与修复对照表
| 症状 |
快速检查 |
修复建议 |
| 服务启动失败(systemctl status 报错) |
查看状态与 journal;检查配置文件语法与路径 |
修正 mongod.conf 错误项;确保 dbPath/logPath 存在且可写;必要时重新安装相关包 |
| 端口被占用(常见 27017) |
ss -lntp |
grep 27017 或 netstat -tulpen |
| 无法远程连接 |
查看 bindIp 是否为 0.0.0.0 或包含服务器 IP;云主机检查安全组/防火墙 |
在 /etc/mongod.conf 设置 net.bindIp: 0.0.0.0;开放 27017/tcp(firewalld/iptables);重启服务 |
| 认证失败 |
查看是否启用 security.authorization |
在 /etc/mongod.conf 开启 security.authorization: enabled;用管理员账户登录并校验权限 |
| 出现 “Failed to unlink socket file … /tmp/mongodb-27017.sock” |
查看 mongod.log 或前台运行 mongod 的输出 |
删除残留 socket:rm -f /tmp/mongodb-27017.sock;重启服务 |
| 数据目录/日志目录权限错误 |
ls -ld /var/lib/mongo /var/log/mongodb |
修正属主:chown -R mongod:mongod /var/lib/mongo /var/log/mongodb;重启服务 |
| 异常卡死/无响应 |
top/htop 观察 CPU/内存;查看最近日志 |
先 systemctl restart mongod 恢复业务;再依据日志与资源瓶颈定位根因(慢查询、索引缺失、磁盘/内存不足等) |
三 日志与监控要点
- 日志位置与配置:默认 /var/log/mongodb/mongod.log;在 /etc/mongod.conf 中可配置 systemLog.destination/file/path/logAppend/verbosity,便于定位与审计。
- 实时查看与关键字过滤:使用 tail -f /var/log/mongodb/mongod.log;结合 grep “error”、awk 等做快速筛选与统计。
- 性能与负载观测:使用 mongostat、mongotop 观察 QPS/写入/连接数/锁 等;在 shell 中执行 db.serverStatus() 获取更细指标。
- 日志轮转与归档:建议配置 logrotate 对 mongod.log 做按日轮转、压缩与保留(如保留 7 天),避免磁盘被撑满。
四 安全与网络配置检查
- 远程访问:编辑 /etc/mongod.conf,将 net.bindIp 设为 0.0.0.0(或指定内网/公网 IP 白名单);重启服务后从客户端测试连通性。
- 防火墙放行:在 firewalld 中放行 27017/tcp(如:firewall-cmd --add-port=27017/tcp --permanent && firewall-cmd --reload)。
- 启用认证:在 /etc/mongod.conf 开启 security.authorization: enabled;使用 mongosh 连接 admin 库创建管理员并验证登录。
- 最小权限原则:应用连接使用具备所需库/集合权限的专用账号,避免长期使用 root。
五 应急与恢复建议
- 避免 kill -9 强杀 mongod;优先使用 systemctl stop mongod 或 mongod --shutdown --dbpath 安全关闭。
- 异常关闭或异常关机后,如出现数据文件不一致,可使用 /usr/bin/mongod --config /etc/mongod.conf --repair 进行修复,再启动服务。
- 若多轮重启仍失败,保留现场(日志、配置、磁盘空间信息),导出最近日志片段用于进一步分析或提交工单。