MongoDB如何在Linux上进行故障排查
导读: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
