一次 Doris FE 节点无法启动的排查与解决
本文记录一次 Apache Doris 前端(FE)节点因系统意外挂掉导致无法重启的问题,分享排查过程与最终解决方案,供有类似问题的同学参考。
问题现象
早上想链接Doris数据库查询数据,发现链接不上了。
登陆上服务器,执行 systemctl status doris-fe.service
检查服务状态时,发现 FE 节点已经挂了:
× doris-fe.service - Apache Doris Frontend
Loaded: loaded (/etc/systemd/system/doris-fe.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code)
尝试手动启动:
./bin/start_fe.sh
却提示:
Frontend running as process 1914. Stop it first.
但此时系统中并没有进程号为 1914 的 Doris 进程:
ps -ef | grep 1914
# 什么都没有
问题分析
Doris 的启动脚本 start_fe.sh
会通过一个 PID 文件判断进程是否已经启动:
pid=$(cat fe/bin/fe.pid)
if ps -p $pid > /dev/null 2>&1; then
echo "Frontend running as process $pid. Stop it first."
exit 1
fi
问题核心是:
PID 文件存在,但 Doris FE 实际进程已经退出(意外挂掉或系统重启未清理),导致启动脚本误判为“仍在运行”。
解决方案
1. 查看 PID 文件
cat fe/bin/fe.pid
# 输出:1914
确认确实记录的是一个不存在的 PID。
2. 删除 PID 文件
rm -f fe/bin/fe.pid
注意:务必先确认该进程真的不存在。你可以使用:
ps -p 1914
确认返回为空后再删除。
3. 重启 Doris FE
推荐先用前台方式调试观察输出:
./bin/start_fe.sh
确认无误后再后台运行:
systemctl restart doris-fe
4. 验证状态
systemctl status doris-fe
或者访问 Doris FE 的 Web UI(默认是 http://your_ip:8030)确认服务恢复。
附加建议:脚本防御优化
你可以考虑在 start_fe.sh
中加入如下逻辑,自动清除 stale 的 PID 文件:
if [ -f "${PID_FILE}" ] && ! ps -p $(cat ${PID_FILE}) > /dev/null 2>&1; then
echo "Stale PID file found. Removing."
rm -f "${PID_FILE}"
fi
这样就不会因为残留的 PID 文件造成启动失败。
最后
Doris 的 fe.pid
文件机制在绝大多数情况下是可靠的,但如果系统断电、kill -9 杀进程、OOM 等非正常关闭 FE,就容易出现“假在线”状态。