MongoDB在Linux上的故障排查指南
导读:MongoDB在Linux上的故障排查指南 一 快速定位流程 确认运行状态:使用命令查看服务状态与端口,例如 sudo systemctl status mongod、ss -lntp | grep 27017。若未运行,执行 sudo...
MongoDB在Linux上的故障排查指南
一 快速定位流程
- 确认运行状态:使用命令查看服务状态与端口,例如 sudo systemctl status mongod、ss -lntp | grep 27017。若未运行,执行 sudo systemctl start mongod 并排查启动失败原因。
- 查看日志:实时跟踪 MongoDB 日志 tail -f /var/log/mongodb/mongod.log,并用 journalctl -u mongod -xe 查看 systemd 日志。
- 校验配置:核对 /etc/mongod.conf 中关键项(如 storage.dbPath、systemLog.path、net.port、security.authorization),必要时用 YAML 校验工具检查语法。
- 资源与权限:检查磁盘空间 df -h(数据盘建议保留至少20%)、内存与 CPU(top/htop)、目录权限(chown -R mongod:mongod /var/lib/mongo /var/log/mongodb)。
- 网络连通:确认监听地址 bindIp(如需远程访问,常见设置为 0.0.0.0,生产环境请配合认证与网络策略)、以及防火墙/安全组是否放行 27017。
- 进一步诊断:使用 mongostat、mongotop、db.serverStatus() 获取实例与系统层面指标,定位异常来源。
二 常见故障与修复
- 服务无法启动:查看日志关键字(如权限、路径、端口冲突),核对配置文件路径与 YAML 语法;若端口被占用,使用 ss/lsof 定位进程并释放端口后重启。
- 无法连接:确认服务已启动、监听地址与端口正确、以及防火墙/云安全组已放行;本地可用 mongo --host 127.0.0.1 --port 27017 测试,远程需将 bindIp 设为 0.0.0.0 并启用认证。
- 权限与 SELinux:数据/日志目录需属主 mongod:mongod;若 SELinux 为 Enforcing 且导致异常,可临时 setenforce 0 验证,随后配置正确的 SELinux 策略或维持 Permissive(不建议生产长期关闭)。
- 磁盘空间不足:清理或扩容,确保数据盘剩余空间≥20%;空间不足会导致写入失败甚至实例异常。
- 版本与已知问题:旧版本可能存在稳定性或安全缺陷,升级到稳定版前务必做好全量备份与回滚预案。
三 日志分析与监控
- 日志查看与检索:tail/less 实时与分页查看;grep -i “error|warning” 快速筛选;journalctl -u mongod -n 10 查看最近日志;必要时用 sort | uniq -c 统计高频错误。
- 慢查询与性能:开启/检查 profiling(db.getProfilingLevel() / db.setProfilingLevel()),结合日志筛选 durationMillis 或使用 mtools(mlogfilter、mplotqueries、mloginfo)做时段与慢操作分析。
- 实时监控:使用 mongostat(吞吐、连接、时延)、mongotop(集合读写耗时)、db.serverStatus()(内存、锁、连接、操作计数)定位瓶颈。
- 系统层面:配合 top/htop、iostat、vmstat、ss 观察 CPU、内存、磁盘 IO 与网络。
- 可视化与告警:小规模用 MongoDB Compass;中大规模建议 Prometheus + Grafana(MongoDB Exporter),或企业级 Zabbix/Ops Manager。
四 配置与维护要点
- 关键配置:确保 dbPath、logPath、pidFilePath、net.port、security.authorization 正确;变更配置后使用 systemctl restart mongod 生效,并再次核对日志。
- 日志轮转:配置 /etc/logrotate.d/mongodb,示例策略(每日轮转、保留7天、压缩、超过200M触发、copytruncate 避免重启、轮转后 kill -SIGUSR1 通知重新打开日志)。
- 日志级别:调整 systemLog.verbosity(0–5),或在会话中动态设置 db.setLogLevel(1, “query”) 聚焦查询日志,排查完成及时恢复,避免性能开销。
- 升级与回滚:升级前备份(文件系统快照或 mongodump),先在测试环境验证,准备好回滚方案与维护窗口。
五 最小可行排查命令清单
- 服务与端口:systemctl status mongod;ss -lntp | grep 27017
- 日志:tail -f /var/log/mongodb/mongod.log;journalctl -u mongod -xe
- 配置与权限:cat /etc/mongod.conf;chown -R mongod:mongod /var/lib/mongo /var/log/mongodb
- 资源:df -h;top/htop;iostat -x 1
- 网络与防火墙:ss -lntp | grep 27017;ufw status / firewall-cmd --list-ports(按需放行 27017)
- 诊断:mongostat;mongotop;mongo --host 127.0.0.1 --port 27017;db.serverStatus()
- 连接失败速查:确认服务运行、bindIp 与端口、以及防火墙/安全组策略是否正确配置
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MongoDB在Linux上的故障排查指南
本文地址: https://pptw.com/jishu/783992.html
