首页主机资讯MongoDB如何在Linux上进行故障排查

MongoDB如何在Linux上进行故障排查

时间2025-11-21 16:49:04发布访客分类主机资讯浏览1417
导读:MongoDB在Linux上的故障排查步骤 一 快速定位流程 检查服务状态与端口 查看服务:sudo systemctl status mongod 启动/自启:sudo systemctl start mongod;sudo syst...

MongoDB在Linux上的故障排查步骤

一 快速定位流程

  • 检查服务状态与端口
    • 查看服务:sudo systemctl status mongod
    • 启动/自启:sudo systemctl start mongod;sudo systemctl enable mongod
    • 端口占用:ss -lntp | grep 27017 或 lsof -i :27017
  • 查看日志
    • 系统日志:sudo journalctl -ex | grep mongod
    • 实例日志:tail -n50 /var/log/mongodb/mongod.log;实时跟踪:tail -f /var/log/mongodb/mongod.log
  • 校验配置
    • 配置文件:cat /etc/mongod.conf
    • 重点项:net.bindIp、net.port、storage.dbPath、systemLog.path、security.authorization
  • 直连测试
    • 本地:mongo --host 127.0.0.1 --port 27017
    • 远程:mongo --host --port 27017 -u -p --authenticationDatabase admin
  • 复核网络与安全策略
    • 防火墙放行:firewalld(firewall-cmd --list-ports / --add-port=27017/tcp)、ufw(ufw allow 27017)、iptables(iptables -A INPUT -p tcp --dport 27017 -j ACCEPT)
    • SELinux:sestatus;临时排障可 setenforce 0(排查后恢复为 enforcing)
    • 云安全组:放通 27017/TCP 入站规则

二 常见故障与修复要点

  • 服务起不来
    • 日志关键词:Configuration error、Permission denied、No space left on device、Address already in use
    • 处置:核对 /etc/mongod.conf 语法与路径;修正目录权限(属主 mongod:mongod);清理磁盘或扩容;释放被占用的 27017 端口后重启
  • 连接被拒绝或超时
    • 可能原因:bindIp 仅 127.0.0.1、防火墙/安全组未放行、mongod 未监听外网、认证失败
    • 处置:bindIp 改为 0.0.0.0(或指定内网IP);放行 27017/TCP;确认服务监听;使用正确凭据与认证库连接
  • 启动报错 “/data/db not found” 或 “Unable to lock file: errno:13 Permission denied”
    • 处置:创建数据目录并赋权(mkdir -p /data/db;chown -R mongod:mongod /data/db);如自定义 dbPath,确保目录存在且权限正确
  • 认证与权限问题
    • 处置:确认 security.authorization 已启用;使用具有相应角色的用户从指定 authenticationDatabase 登录;必要时在 mongo shell 中执行 db.grantRolesToUser() 补齐权限

三 日志与性能分析

  • 日志查看与分析
    • 实时查看:tail -f /var/log/mongodb/mongod.log
    • 组件与内容:db.getLogComponents();db.adminCommand({ getLog: 1 } )
    • 工具链:mtools(mlogfilter、mplotqueries、mloginfo)筛选慢查询与可视化;jq 解析 JSON 日志
  • 运行状态与性能
    • mongostat:观察 insert/query/update/delete、网络与磁盘吞吐
    • mongotop:按库/集合统计读写耗时
    • db.serverStatus():内存、连接、索引/缓存命中、操作计数等
    • 系统资源:top/htop、iostat、vmstat 联动排查瓶颈

四 配置与维护建议

  • 日志轮转与保留
    • 使用 logrotate 管理 mongod.log,示例策略:按日轮转、保留 7 天、压缩、到达 200M 触发、copytruncate + 向 mongod 发送 SIGUSR1 触发日志刷新
  • 安全与网络
    • 生产环境避免 bindIp 0.0.0.0,优先使用内网通信与 TLS/SSL;限制来源 IP;开启 authentication 与最小权限
    • 防火墙仅开放必要端口;云环境同步配置安全组规则
  • 变更与回滚
    • 修改 /etc/mongod.conf 后先备份;变更通过 systemctl restart mongod 生效;保留最近几次配置与日志以便回滚
  • SELinux
    • 排查阶段可临时 setenforce 0;定位后使用 semanage/布尔值等方式做最小化放行,恢复 enforcing 模式

五 一键排查命令清单

  • 服务与端口
    • sudo systemctl status mongod;sudo systemctl restart mongod
    • ss -lntp | grep 27017;lsof -i :27017
  • 日志与配置
    • sudo journalctl -ex | grep mongod
    • tail -n50 /var/log/mongodb/mongod.log;tail -f /var/log/mongodb/mongod.log
    • cat /etc/mongod.conf | egrep ‘bindIp|port|dbPath|logPath|security.authorization’
  • 连接测试
    • mongo --host 127.0.0.1 --port 27017
    • mongo --host --port 27017 -u -p --authenticationDatabase admin
  • 防火墙与安全
    • firewall-cmd --list-ports;firewall-cmd --add-port=27017/tcp --permanent & & firewall-cmd --reload
    • ufw status;ufw allow 27017
    • iptables -L -n | grep 27017
    • sestatus;sudo setenforce 0(仅排障临时使用)

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: MongoDB如何在Linux上进行故障排查
本文地址: https://pptw.com/jishu/753439.html
MongoDB在Linux上如何进行版本升级 MongoDB如何在Linux上进行安全加固

游客 回复需填写必要信息