MongoDB 在 CentOS 上的故障排查指南
一 快速定位流程
- 检查服务状态与端口
- 查看服务:sudo systemctl status mongod
- 启动服务:sudo systemctl start mongod
- 监听端口:ss -lntp | grep 27017 或 netstat -tulpen | grep 27017
- 查看日志定位错误
- 实时日志:sudo tail -f /var/log/mongodb/mongod.log
- 校验配置文件关键项
- 配置文件:/etc/mongod.conf
- 重点项:net.bindIp、net.port、storage.dbPath、systemLog.path
- 快速连通性测试
- 本机:mongo --eval ‘db.runCommand({ping:1})’
- 远程:nc -vz <服务器IP> 27017 或 telnet <服务器IP> 27017
- 认证与权限
- 带认证连接:mongo -u <用户名> -p <密码> --authenticationDatabase <数据库>
二 常见故障与修复
- 服务起不来
- 查看日志中具体报错(如路径、权限、配置语法)。
- 校验数据目录与日志目录权限:
- sudo chown -R mongod:mongod /var/lib/mongo
- sudo chown -R mongod:mongod /var/log/mongodb
- 配置或数据异常时,使用修复模式(会重建索引,谨慎操作):
- /usr/bin/mongod -f /etc/mongod.conf --repair
- 无法远程连接
- 配置文件中将 net.bindIp 设为 0.0.0.0(或包含服务器内网/公网 IP),端口 27017。
- 防火墙放行:
- firewalld:sudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload
- 云厂商安全组:入站/出站放行 TCP 27017。
- 开机不自启
- 启用开机自启:sudo systemctl enable mongod
- 若曾手动改动 unit 文件,升级后需重新校对或执行 sudo systemctl daemon-reload。
- PID 文件路径问题
- 老版本在 /var/run/mongodb/mongod.pid 可能因重启丢失,建议:
- 在 /etc/mongod.conf 中设置:pidFilePath: /mongod/mongod.pid
- 创建目录与文件并赋权:sudo mkdir -p /mongod && sudo touch /mongod/mongod.pid && sudo chown mongod:mongod /mongod
- 同步修改 unit 的 PIDFile= 后执行 sudo systemctl daemon-reload。
- SELinux 导致启动失败
- 临时:sudo setenforce 0
- 永久:编辑 /etc/selinux/config 将 SELINUX=permissive(或 disabled),重启生效。
三 性能卡顿与资源瓶颈
- 先看资源与日志
- 资源:top/htop、iostat -x 1、free -m
- MongoDB:mongostat、db.serverStatus()、db.stats()、慢查询日志
- 常见原因与处理
- 内存不足或缓存命中低:为 WiredTiger 设置合理缓存(如 storage.wiredTiger.engineConfig.cacheSizeGB),优先使用 SSD。
- 连接数/文件句柄不足:提升系统 ulimit -n,MongoDB 连接开销与索引设计相关,避免过多索引。
- 查询未走索引:用 explain() 分析执行计划,建立合适索引,避免全表扫描。
- 透明大页(THP):建议关闭以减少内存管理抖动。
- 锁争用/卡死:结合日志与 serverStatus 的 globalLock、locks 指标,必要时重启服务并优化长事务与热点集合。
四 安全与网络加固
- 最小暴露面
- 仅开放必要端口(默认 27017/TCP),限制来源 IP。
- 使用强认证与基于角色的访问控制(RBAC),为应用创建最小权限用户。
- 网络安全
- 云环境同时配置安全组与操作系统防火墙,变更后及时验证连通性。
- 系统层安全
- 保持 SELinux 为 enforcing 并配置正确的策略,或明确使用 permissive 并记录审计。
- 禁用不必要的服务与端口,定期更新 MongoDB 与系统补丁。
五 常用命令清单
- 服务与端口
- sudo systemctl status|start|enable mongod
- ss -lntp | grep 27017
- 日志与配置
- sudo tail -f /var/log/mongodb/mongod.log
- cat /etc/mongod.conf
- 连通性与认证
- nc -vz 27017
- mongo --eval ‘db.runCommand({ping:1})’
- mongo -u -p --authenticationDatabase
- 性能与健康
- mongostat
- db.serverStatus()、db.stats()
- 权限与目录
- sudo chown -R mongod:mongod /var/lib/mongo /var/log/mongodb
- sudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload