MongoDB故障排查在CentOS上怎么办
导读:CentOS上MongoDB故障排查实操指南 一 快速定位与恢复 检查服务状态与启动项:使用命令查看是否运行、是否开机自启,必要时启动服务。命令示例:sudo systemctl status mongod、sudo systemctl...
CentOS上MongoDB故障排查实操指南
一 快速定位与恢复
- 检查服务状态与启动项:使用命令查看是否运行、是否开机自启,必要时启动服务。命令示例:
sudo systemctl status mongod、sudo systemctl start mongod、sudo systemctl enable mongod。 - 查看关键日志:MongoDB 日志默认在 /var/log/mongodb/mongod.log,可实时跟踪:
sudo tail -f /var/log/mongodb/mongod.log;同时查看 systemd 日志:journalctl -xe | grep mongod。 - 校验配置文件:主配置文件为 /etc/mongod.conf,重点核对 dbPath(数据目录)、logPath(日志路径)、net.port(默认 27017)、net.bindIp(绑定地址)、以及 security.authorization(是否开启鉴权)。
- 端口与进程:确认 27017 是否被占用并定位进程:
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep 27017或netstat -tuln | grep 27017;必要时结束冲突进程:kill -9 < PID>。 - 资源与权限:检查磁盘空间
df -h(建议保留至少 20% 余量)、内存与 CPUtop/htop;确保数据目录(如 /var/lib/mongo)与日志目录(如 /var/log/mongodb)属主为 mongod:sudo chown -R mongod:mongod /var/lib/mongo /var/log/mongodb。 - 快速恢复循环:定位根因后修正配置或释放资源,执行
sudo systemctl restart mongod并再次观察日志输出。
二 常见故障场景与处理
- 服务无法启动:优先查看 mongod.log 与
journalctl的错误行;常见根因包括配置文件 YAML 语法错误、dbPath 不存在或无权限、端口被占用。修正后重启服务。 - 端口冲突:若日志出现 “Address already in use”,用
lsof或netstat找到占用 27017 的进程并释放,或调整net.port。 - 连接被拒绝或仅本地可连:默认 bindIp: 127.0.0.1 仅监听本机,远程访问需改为
bindIp: 0.0.0.0(或指定服务器 IP),并重启:sudo systemctl restart mongod。 - 防火墙阻断:开放 27017/tcp 并重载规则:
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent & & sudo firewall-cmd --reload。 - SELinux 限制:若
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查看各集合读写耗时,定位慢集合与热点操作。 - 深入状态:在 mongo shell 执行
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)做慢查询与可视化分析。
四 安全加固与版本维护
- 最小暴露面:仅开放必要端口(如 27017/tcp),避免使用
bindIp: 0.0.0.0暴露到公网;结合 firewalld 精准放行来源网段。 - 启用鉴权:在 /etc/mongod.conf 设置
security.authorization: enabled,为应用创建最小权限用户(如readWrite到目标库),连接时显式指定--authenticationDatabase。 - 审计与合规:按需开启日志组件、慢查询日志与审计(企业版),并定期轮转日志(如 logrotate)避免磁盘被占满。
- 依赖与版本:确认 libssl 等依赖完整(如
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 |
是否鉴权失败 | 核对用户、密码与库 |
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MongoDB故障排查在CentOS上怎么办
本文地址: https://pptw.com/jishu/782769.html
