Ubuntu MongoDB如何进行故障排除
导读:Ubuntu 上 MongoDB 故障排除实战手册 一 快速定位流程 确认服务状态与端口:使用命令查看服务是否运行与端口监听情况。 服务状态:sudo systemctl status mongod 端口监听:sudo ss -lntp...
Ubuntu 上 MongoDB 故障排除实战手册
一 快速定位流程
- 确认服务状态与端口:使用命令查看服务是否运行与端口监听情况。
- 服务状态:
sudo systemctl status mongod - 端口监听:
sudo ss -lntp | grep 27017或sudo lsof -iUDP:27017 -iTCP:27017 -sTCP:LISTEN
- 服务状态:
- 查看日志:MongoDB 默认日志路径为 /var/log/mongodb/mongod.log,优先从日志入手定位 F/E 级错误与时间线。
- 实时查看:
sudo tail -f /var/log/mongodb/mongod.log
- 实时查看:
- 直连本机实例:使用 mongosh(若未安装需单独安装)验证本地连通性与认证。
- 连接:
mongosh --host 127.0.0.1:27017
- 连接:
- 网络连通性:从客户端测试端口连通性(如
nc -vz < host> 27017或telnet < host> 27017),并确认云安全组/本机防火墙已放行 27017。 - 配置核对:检查 /etc/mongod.conf 的关键项(如 net.bindIp、net.port、storage.dbPath、systemLog.path)与文件权限。
二 常见故障与修复
- 服务无法启动
- 查看日志定位根因(配置错误、权限不足、数据目录异常等)。
- 配置文件语法:MongoDB 使用 YAML,注意冒号后必须有空格、层级缩进一致,常见报错为 “Error parsing YAML config file”。修正后
sudo systemctl restart mongod。 - 数据目录权限:确保 /var/lib/mongodb 归属 mongodb 用户(如
sudo chown -R mongodb:mongodb /var/lib/mongodb),再启动服务。 - 异常关闭导致锁文件残留:日志提示 “old lock file … recommend removing file and running --repair”。处理步骤:
- 停止服务:
sudo systemctl stop mongod - 备份并移除锁文件:
sudo rm /var/lib/mongodb/mongod.lock - 以 mongodb 用户执行修复:
sudo -u mongodb mongod -f /etc/mongod.conf --repair - 重新启动:
sudo systemctl start mongod - 如仍失败,检查磁盘空间与 dbPath 所在分区是否可写。
- 停止服务:
- 端口未监听或被占用
- 检查占用:
sudo lsof -i :27017或sudo ss -lntp | grep 27017,结束冲突进程或修改 mongod.conf 的 port。 - 监听地址:若需远程访问,将 net.bindIp 设为 0.0.0.0(或指定内网网段),并确保防火墙放行(如
sudo ufw allow 27017)。
- 检查占用:
- 连接被拒绝或认证失败
- 本机拒绝:服务未启动或仅监听 127.0.0.1。修正 bindIp 并重启;用
mongosh本地直连验证。 - 远程被拒:核对云安全组/防火墙、网络 ACL、以及 bindIp 与端口。
- 认证失败:确认用户名、密码、认证库(常见为 admin),必要时在连接串中显式指定
--authenticationDatabase。
- 本机拒绝:服务未启动或仅监听 127.0.0.1。修正 bindIp 并重启;用
- 非法指令或段错误 signal=ILL
- 多与版本/架构不兼容或硬件指令集相关。处理思路:核对 Ubuntu 版本与 CPU 架构支持矩阵,尝试安装兼容版本或官方支持渠道的构建;必要时更换版本并重新安装。
三 日志分析与性能瓶颈定位
- 日志结构与级别:关注时间戳、F/E/W/I 级别、组件标识(如 NETWORK、STORAGE、REPL、COMMAND),优先处理 F 级错误。
- 快速过滤与统计
- 过去 1 小时错误:
grep -E 'E|F' /var/log/mongodb/mongod.log | awk '$1 > "2025-12-18T11"' - 按小时统计错误量:
cat /var/log/mongodb/mongod.log | grep -oP '\d{ 4} -\d{ 2} -\d{ 2} T\d{ 2} ' | sort | uniq -c
- 过去 1 小时错误:
- 慢查询与执行计划
- 启用慢查询日志:在 mongod.conf 的 setParameter 中设置
slowMS: 100,重启或在运行时db.setLogLevel(1, "command")。 - 识别全表扫描:日志中出现
COLLSCAN、keysExamined:0且docsExamined很大时,创建合适索引(如db.users.createIndex({ age: 1} ))。
- 启用慢查询日志:在 mongod.conf 的 setParameter 中设置
- 复制集异常
- 关注
E REPL [replication] heartbeat failed等,先测试网络连通性,再用rs.status()检查成员状态与 oplog 窗口,必要时安排重新同步。
- 关注
- 存储引擎异常
- 出现
WiredTiger error等 F STORAGE 错误时,先db.serverStatus().storageEngine查看引擎状态,再按指导执行修复流程(如--repair)。
- 出现
- 可视化与工具链
- 使用 mtools(如
mlogfilter、mplotqueries、mloginfo)做时间过滤、慢查询可视化与统计;将日志接入 ELK/Grafana 做长期观测。
- 使用 mtools(如
四 维护与预防建议
- 文件句柄与资源限制
- 若出现 “Too many open files”,提升进程文件句柄上限:在 /etc/security/limits.conf 增加
mongod soft nofile 64000mongod hard nofile 64000
- 修改后重新登录会话或重启服务生效。
- 若出现 “Too many open files”,提升进程文件句柄上限:在 /etc/security/limits.conf 增加
- 日志轮转与保留
- 配置 logrotate 对 /var/log/mongodb/mongod.log 做按日轮转与压缩,避免单文件过大影响分析效率。
- 监控与巡检
- 例行使用 mongostat、mongotop 观察吞吐、延迟与锁情况;结合
db.serverStatus()、db.currentOp()做深入诊断。
- 例行使用 mongostat、mongotop 观察吞吐、延迟与锁情况;结合
- 安全与网络
- 仅开放必要来源 IP 的 27017,启用 身份验证 与最小权限;远程访问建议使用 TLS/SSL。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MongoDB如何进行故障排除
本文地址: https://pptw.com/jishu/775853.html
