CentOS MongoDB故障排查怎么配置
导读:CentOS 上 MongoDB 故障排查的配置与步骤 一 快速定位流程 检查服务状态与端口 执行:systemctl status mongod、ss -lntp | grep 27017,确认进程存活与监听端口。 查看错误日志...
CentOS 上 MongoDB 故障排查的配置与步骤
一 快速定位流程
- 检查服务状态与端口
- 执行:
systemctl status mongod、ss -lntp | grep 27017,确认进程存活与监听端口。
- 执行:
- 查看错误日志
- 执行:
tail -n50 /var/log/mongodb/mongod.log,优先关注包含 ERROR/FATAL 的行及最近一次启动的堆栈信息。
- 执行:
- 校验配置文件关键项
- 文件:
/etc/mongod.conf,重点核对 storage.dbPath、systemLog.path、net.bindIp、processManagement.fork、pidFilePath 等是否与运行环境一致。
- 文件:
- 资源与连通性
- 执行:
free -m、df -h、top,排除 内存/磁盘/CPU 瓶颈;必要时临时调高日志级别获取更多线索。
- 执行:
- 重启并复测
- 执行:
systemctl restart mongod & & systemctl status mongod,确认状态为 active (running) 且端口可达。
- 执行:
二 关键配置项用于排查
- 建议的 /etc/mongod.conf 最小排查模板
- 存储与日志
storage.dbPath: /var/lib/mongosystemLog.destination: filesystemLog.path: /var/log/mongodb/mongod.logsystemLog.logAppend: true
- 网络与访问控制
net.bindIp: 127.0.0.1,< 管理网IP>(故障排查阶段可先仅绑定本地,确认后再放开)net.port: 27017
- 进程与权限
processManagement.fork: false(前台运行便于直接看到启动报错)processManagement.pidFilePath: /var/run/mongodb/mongod.pid
- 安全(可选,排查阶段可先关闭以排除干扰)
security.authorization: disabled
- 存储与日志
- 日志级别与组件
- 全局:
systemLog.verbosity: 1~2(默认 0,排查时临时提升;生产谨慎) - 组件:可按需提高特定组件日志,如
systemLog.component.query.verbosity: 1
- 全局:
- 慢查询与性能
- 配置:
operationProfiling.mode: slowOp、operationProfiling.slowOpThresholdMs: 100 - 或会话中:
db.setProfilingLevel(1, 100)
- 配置:
- 说明
- 路径、是否前台运行、PID 文件路径在不同安装包/版本可能不同,请以本机配置文件与进程实际参数为准。
三 常见故障与对应配置修正
- 启动失败且提示无法写入 PID 文件
- 现象:
ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid - 处理:
- 确保目录存在且属主正确:
mkdir -p /var/run/mongodb & & chown mongodb:mongodb /var/run/mongodb - 在
/etc/mongod.conf中设置pidFilePath: /var/run/mongodb/mongod.pid - 若使用 systemd,确认服务文件中的
PIDFile与上述路径一致,执行systemctl daemon-reload后重启。
- 确保目录存在且属主正确:
- 现象:
- 开机不自启或 /var/run 清理导致 PID 丢失
- 处理:优先使用 systemd 托管并配置正确的
PIDFile;避免使用易清理的临时目录;必要时改用持久目录(如/var/run/mongodb)。
- 处理:优先使用 systemd 托管并配置正确的
- 端口未监听或远程连不通
- 处理:
- 核对
net.bindIp是否包含服务器实际 IP;排查防火墙:firewall-cmd --zone=public --add-port=27017/tcp --permanent & & firewall-cmd --reload - 本机验证:
ss -lntp | grep 27017、mongo --host 127.0.0.1:27017
- 核对
- 处理:
- 透明大页导致性能抖动或卡死
- 处理:在
/etc/rc.local或 systemd 服务中写入echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag- 重启后验证:
cat /sys/kernel/mm/transparent_hugepage/enabled应为 never。
- 处理:在
- SELinux 拒绝导致启动/写入失败
- 处理:
- 临时:
setenforce 0(宽容模式) - 永久:编辑
/etc/selinux/config,设置SELINUX=permissive或disabled,重启生效。
- 临时:
- 处理:
- 系统资源不足引发“卡死”
- 处理:
- 监控:
top、free -m、df -h - 临时缓解:
echo 1 > /proc/sys/vm/drop_caches(谨慎,仅在必要时) - 限制引擎缓存:在
storage.wiredTiger下设置engineConfig.cacheSizeGB(如 4~8GB,视内存而定)。
- 监控:
- 处理:
四 日志与慢查询排查配置
- 提升日志级别并实时观察
- 配置:
systemLog.verbosity: 2,必要时对组件单独提升;重启后在另一个终端执行tail -f /var/log/mongodb/mongod.log观察启动与运行期错误。
- 配置:
- 慢查询定位
- 配置:
operationProfiling.mode: slowOp、operationProfiling.slowOpThresholdMs: 100 - 查询:
db.system.profile.find().sort({ $natural:-1} ).limit(50);关注 COLLSCAN(全表扫描)、docsExamined/keysExamined 过大、SORT 无索引等关键字,针对性建立或优化索引(必要时使用background: true避免阻塞)。
- 配置:
- 运行时诊断
- 会话中:
db.currentOp(true)查找长时间运行操作;必要时db.killOp(opid)终止异常操作(谨慎)。
- 会话中:
- 日志轮转与容量控制
- MongoDB 内置:
db.adminCommand({ logRotate: 1} ) - Linux logrotate 示例(/etc/logrotate.d/mongodb):
/var/log/mongodb/mongod.log { daily rotate 7 compress delaycompress missingok notifempty create 640 mongodb mongodb sharedscripts postrotate /usr/bin/pkill -USR1 mongod endscript }
- 建议将日志与数据分盘,避免 I/O 竞争。
- MongoDB 内置:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS MongoDB故障排查怎么配置
本文地址: https://pptw.com/jishu/785670.html
