starrocks 在 linux 下需严格按角色分节点配置 fe 和 be,jdk 17、avx2 指令集、priority_networks 三者缺一不可;fe 与 be 必须独立部署、分别启动并手动注册,否则服务无法正常运行。

StarRocks 在 Linux 下能跑起来,但不是“解压即用”——必须按角色分节点配置 FE 和 BE,且 JDK 版本、CPU 指令集、网络绑定这三处踩错一个,服务就起不来或连不上。
FE 和 BE 必须分开启动,不能只跑一个
很多人以为 StarRocks 像单机 MySQL 那样启动一个进程就行,实际不是。FE 负责元数据和查询调度,BE 负责存数据和算数据,两者必须独立部署、分别启动,并通过 ALTER SYSTEM ADD BACKEND 手动注册关联。
- FE 启动后,
http://$IP:8030/system?path=//frontends能看到状态为alive才算成功 - BE 启动后,必须用 MySQL 客户端连接 FE(端口
9030),执行ALTER SYSTEM ADD BACKEND "ip:9050",否则 FE 不认它 - BE 的
heartbeat_service_port默认是9050,别写成9030或漏掉端口,否则注册失败报backend not found
JDK 17 是硬门槛,JDK 8/11 在 3.x+ 版本直接拒绝启动
StarRocks 3.0 开始彻底放弃对 JDK 8 的支持,JDK 11 在部分版本中会触发 UnsupportedClassVersionError;只有 JDK 17 及以上能稳定运行。
- 确认路径:在
fe/conf/fe.conf和be/conf/be.conf中显式写死JAVA_HOME = /usr/local/java/jdk17(不能只靠环境变量) - 检查方式:启动前执行
/usr/local/java/jdk17/bin/java -version,输出含17.才可信 - 常见坑:系统 PATH 里有旧 JDK,但
start_fe.sh脚本没重定向JAVA_HOME,导致前台看着启动了,后台日志却报java.lang.NoClassDefFoundError: java.util.Optional
priority_networks 不设等于裸奔,设错等于连不上
StarRocks 默认只监听 127.0.0.1,不改 priority_networks 就算你绑了公网 IP,MySQL 客户端也连不上 9030 端口。
- 单机测试可设为
priority_networks = 0.0.0.0/0,但生产环境必须精确到本机网卡 IP,例如priority_networks = 192.168.50.142/32 - BE 的
priority_networks必须和 FE 的保持同一网段,否则心跳超时,SHOW PROC '/backends'里状态一直是DECOMMISSIONED - Linux 多网卡时,
ip addr看清哪块网卡走集群内网,别把公网 IP 写进配置,否则 BE 注册时被 FE 拒绝(报invalid backend address)
CPU 不支持 AVX2,BE 进程启动几秒后自动退出
StarRocks BE 依赖 AVX2 指令加速向量化计算,老 Xeon E5 或 AMD FX 系列 CPU 不支持,BE 日志里不会明说,只会反复打印 Segmentation fault (core dumped) 或静默退出。
- 验证命令:
cat /proc/cpuinfo | grep avx2,有输出才安全 - 无 AVX2 的机器上强行跑,BE 的
be.out日志末尾会出现FATAL: This CPU does not support AVX2 instruction set(但部分旧版本日志不打印,得看strace -f ./be/bin/start_be.sh) - 虚拟机部署要确认宿主机开启 AVX2 透传,VMware Workstation 默认关闭,KVM 需加
-cpu host参数
真正卡住人的从来不是步骤多,而是 FE 和 BE 各自读各自的配置文件、各自连各自的网卡、各自认各自的 JDK —— 三个“各自”没对齐,整个集群就是一盘散沙。动手前先盯住 fe.log 和 be.out 最后十行,比反复改配置有用得多。











