一次 Doris FE 节点无法启动的排查与解决

一次 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,就容易出现“假在线”状态。

在这里插入图片描述

### Doris BE 组件启动失败解决方案 #### 日志分析初步排查 当遇到BE组件启动失败的情况时,建议先检查日志文件来获取更多信息。日志通常位于`${doris_home}/be/log`目录下的`be.WARNING`文件中[^2]。 如果日志显示“be自动注册FE失败”,这可能意味着BE尝试向FE报告其状态时遇到了障碍[^1]。 #### 权限问题处理 若日志提示路径无法创建,则可能是由于BE节点配置更改后导致的权限不足问题。具体表现为修改了BE节点的conf文件中的存储路径设置,使得BE进程缺乏足够的权限自行创建所需目录结构[^3]。此时应确保运行BE服务的用户拥有对指定路径的操作权限,并确认该路径不存在其他访问控制限制。 #### 地址冲突排除 对于错误信息如`ev_http_server.cpp:91] Check failed: s.ok() Internal error: tcp listen failed, errno98, errmsg=Address already in use`,表明端口已被占用。需核查是否有重复实例正在监听同一端口号,或是先前未完全关闭的服务残留影响新实例绑定地址资源[^4]。可通过命令行工具(例如netstat或lsof)查找并终止冲突进程。 #### FE连接验证 另外一种常见情况是BE试图联系FE但超时。“ErrMsg: java.net.SocketTimeoutException: connect timed out”暗示网络连通性存在问题或者是防火墙阻止了必要的通信流量。通过MySQL客户端测试能否成功建立到FE服务器的数据库会话可以帮助诊断此类故障[^5]。 ```bash mysql -uroot -P<fe_query_port> -h<fe_ip_address> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑风风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值