温馨提示×

Linux系统中MongoDB故障排查方法

小樊
34
2025-12-26 07:47:58
栏目: 云计算

Linux 下 MongoDB 故障排查方法

一 快速定位流程

  • 检查服务状态与自启:使用命令查看 systemctl status mongod,若未运行则执行 sudo systemctl start mongod;需要开机自启执行 sudo systemctl enable mongod。若提示 Unit not found,说明未安装或 systemd 单元缺失,需安装或手动创建服务单元。
  • 查看错误日志:MongoDB 默认日志位于 /var/log/mongodb/mongod.log,使用 tail -f /var/log/mongodb/mongod.log 实时观察启动失败、权限、配置等关键信息。
  • 校验配置文件:默认配置文件 /etc/mongod.conf,重点核对 net.port: 27017net.bindIp(仅本地为 127.0.0.1,远程需改为 0.0.0.0 并配合安全策略)、storage.dbPath
  • 网络连通性:本地用 telnet 127.0.0.1 27017nc -zv 127.0.0.1 27017 测试端口;远程先 ping 再测端口。
  • 防火墙与安全组:放行 27017/TCP(如 ufw allow 27017 或云厂商安全组入站规则)。
  • 连接测试:本地 mongo --host 127.0.0.1 --port 27017;远程使用 mongodb://user:pass@host:27017/db?authSource=admin,密码含特殊字符需 URL 编码(如 @ → %40)。

二 常见故障与修复对照表

现象 可能原因 快速修复
服务启动失败或状态 inactive/failed 配置错误、权限不足、端口冲突、磁盘满 查看 /var/log/mongodb/mongod.log;核对 /etc/mongod.conf;用 **netstat -tulpen
启动超时 mongod.service start operation timed out 同上,外加资源/系统限制 优先查日志定位根因,再按“配置/权限/端口/磁盘/资源”逐项修复
Unit not found 未安装或 systemd 单元缺失 通过包管理器安装(如 mongodb-org),或手动创建 /etc/systemd/system/mongod.servicedaemon-reload 后启动
远程连接被拒绝 ECONNREFUSED bindIp 仅 127.0.0.1、防火墙/安全组未放行、服务未监听外网 bindIp: 0.0.0.0(生产谨慎),放行 27017,确认服务监听 0.0.0.0:27017
认证失败 Authentication failed 密码错误、authSource 不对、账户未创建 连接串加 ?authSource=admin;确认用户与库;对密码特殊字符 URL 编码
启动报 lock 或 WiredTiger 异常 异常关机导致锁文件残留 确认无 mongod 进程后删除 data 目录/mongod.lock 与 *WiredTiger 锁文件,再启动;必要时以 –repair 修复(会重建 WT 元数据,谨慎操作)

三 性能与异常抖动排查

  • 系统层面:用 uptime1/5/15 分钟负载top/iostat 识别 iowait 高、util 持续 100% 的磁盘瓶颈;free -m/swap 观察内存与 OOMifstat/sar -n DEV 看网卡流量是否突增(如全量同步、mongodump)。
  • MongoDB 层面:用 mongostat 观察 insert/update/delete/queryfaults(缺页/内存压力)、connections 突增;用 mongotop 定位读写耗时高的库/集合;开启慢查询日志(如 slowms),用 mtools(mlogfilter/mplotqueries/mloginfo) 分析慢操作与错误趋势;必要时在 shell 执行 db.serverStatus()db.getLogComponents() 获取更细信息。

四 安全与网络加固要点

  • 最小暴露面:生产环境避免 bindIp: 0.0.0.0,仅在内网接口监听;云上通过 VPC/安全组 限制来源 IP/CIDR
  • 认证与授权:启用 SCRAM 认证,创建最小权限用户;连接串使用 authSource=admin 明确鉴权库;密码特殊字符务必 URL 编码
  • 传输安全:优先 TLS/SSL 加密传输;限制对外暴露端口,仅放通必要来源。
  • 防火墙:严格放行 27017/TCP,避免使用默认全放开策略;变更后及时验证连通性。

五 常用命令清单

  • 服务与自启:sudo systemctl status mongodsudo systemctl start mongodsudo systemctl enable mongod
  • 日志与配置:tail -f /var/log/mongodb/mongod.logcat /etc/mongod.conf
  • 端口与进程:sudo netstat -tulpen | grep 27017ps -ef | grep mongod、必要时 kill -2/-3 优雅终止。
  • 权限修复:sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb
  • 连通性:ping telnet 27017nc -zv 27017
  • 防火墙:sudo ufw allow 27017(或云安全组入站规则放行 27017/TCP)。
  • 连接测试:本地 mongo --host 127.0.0.1 --port 27017;远程 mongodb://user:pass%40abc@host:27017/db?authSource=admin
  • 性能观测:mongostatmongotopdb.serverStatus()

0