温馨提示×

centos下mongodb故障排查

小樊
39
2025-12-07 13:32:17
栏目: 云计算

CentOS 下 MongoDB 故障排查手册

一 快速定位流程

  • 检查服务状态与端口
    • 查看状态:sudo systemctl status mongod
    • 启动/重启:sudo systemctl start|restart mongod
    • 端口连通:ss -lntp | grep 27017nc -vz 127.0.0.1 27017
  • 查看日志定位错误
    • 实时查看:sudo tail -f /var/log/mongodb/mongod.log
    • 若服务未起来,前台运行:sudo mongod --config /etc/mongod.conf 观察控制台输出
  • 校验配置文件
    • 路径:/etc/mongod.conf
    • 关键项:net.bindIpnet.portstorage.dbPathsystemLog.path
  • 直连测试
    • 本机:mongosh --host 127.0.0.1 --port 27017
    • 远程:mongosh --host <服务器IP> --port 27017 -u <用户> -p <密码> --authenticationDatabase <库名>
  • 网络与安全策略
    • 防火墙放行:sudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload
    • 云主机安全组:放行 TCP 27017
  • 资源与依赖
    • 资源:topfree -mdf -h
    • 依赖:ldd $(which mongod) 检查缺失库

二 常见故障与修复

  • 端口被占用
    • 现象:日志出现 addr already in usesystemctl status 提示端口冲突
    • 处理:ss -lntp | grep 27017 找到 PID,sudo kill -9 <PID>sudo systemctl start mongod
  • 套接字文件无法删除
    • 现象:日志出现 Failed to unlink socket file /tmp/mongodb-27017.sock: Operation not permitted
    • 处理:sudo rm -f /tmp/mongodb-27017.sock,必要时 sudo systemctl restart mongod
  • 目录权限不足
    • 现象:systemctl statuscode=exited, status=14 或无法写入日志/数据
    • 处理:确认目录属主为 mongodb:mongodb
      • sudo chown -R mongodb:mongodb /var/lib/mongo /var/log/mongodb /tmp
      • sudo chmod 0755 /var/lib/mongo /var/log/mongodb /tmp
  • 配置文件语法错误
    • 现象:启动失败且提示 Unrecognized option 或 YAML 解析错误
    • 处理:检查 YAML 缩进(如 storage: 下的子项需缩进两个空格),核对选项名与版本匹配
  • 依赖库缺失
    • 现象:mongod: error while loading shared libraries: libcrypto.so.10: cannot open shared object file
    • 处理:安装兼容库,例如 compat-openssl10(版本依系统而异),再启动
  • 无法远程连接
    • 现象:本机能连,远程超时
    • 处理:
      • net.bindIp: 0.0.0.0(或加入服务器内网/公网 IP)
      • 防火墙/安全组放行 27017
      • 若启用鉴权,使用带认证的连接串或先本地创建用户再远程连接

三 日志与性能分析

  • 日志查看与过滤
    • 实时跟踪:sudo tail -f /var/log/mongodb/mongod.log
    • 组件与内容:db.getLogComponents()db.adminCommand({ getLog: 1 })
    • 工具链:mtoolsmlogfiltermloginfomplotqueries)做时间筛选、慢查询与可视化分析
  • 运行状态与负载
    • 实时监控:mongostatmongotop
    • 细粒度:db.serverStatus()(关注 connectionsmemlocksopcounters 等)
  • 慢查询定位
    • mongod.conf 开启慢查询日志(如 slowOpThresholdMs: 100),用 mlogfilter 按时间窗与阈值筛选,结合 mplotqueries 做热点分析

四 配置与运维要点

  • 关键配置
    • net.bindIp:需要远程访问时改为 0.0.0.0 或指定网段
    • security.authorization:启用后务必先创建管理员/业务用户再远程连接
    • storage.dbPathsystemLog.path:确保目录存在且属主为 mongodb
  • 日志轮转
    • 使用 logrotate 管理 mongod.log,避免单文件过大,便于归档与审计
  • 自启动
    • 启用:sudo systemctl enable mongod
    • 验证:sudo systemctl is-enabled mongodsudo systemctl status mongod

五 一键排查命令清单

  • 服务与端口
    • sudo systemctl status mongod
    • ss -lntp | grep 27017
  • 日志与前台运行
    • sudo tail -n50 -f /var/log/mongodb/mongod.log
    • sudo mongod --config /etc/mongod.conf
  • 连接测试
    • mongosh --host 127.0.0.1 --port 27017
    • mongosh --host <IP> --port 27017 -u <user> -p <pwd> --authenticationDatabase <db>
  • 权限与依赖
    • ls -ld /var/lib/mongo /var/log/mongodb /tmp
    • sudo chown -R mongodb:mongodb /var/lib/mongo /var/log/mongodb /tmp
    • ldd $(which mongod)
  • 防火墙/安全组
    • sudo firewall-cmd --list-ports
    • sudo firewall-cmd --add-port=27017/tcp --permanent && sudo firewall-cmd --reload

0