StarRocks 是面向 OLAP 场景的 MPP 数据库,架构只有 FE 与 BE 两类角色。本文记录三节点集群的完整部署过程:FE 初始化与高可用、BE 加入与验证,最后附压测结论与踩坑点。
StarRocks 能力速览
几个关键特性:架构精简,FE 管理元数据、BE 负责存储与计算;向量化执行引擎搭配 CBO 优化器;支持 Hive、MySQL、ES 联邦查询;数据更新采用 upsert 模型,支持物化视图加速;兼容标准 SQL,TPC-H 的 22 条与 TPC-DS 的 99 条查询均可跑通;流批一体,可直连 Kafka,也能读 HDFS 上的 ORC/Parquet/CSV;单表可支持约一万列,数据规模到 10PB、数百节点。

环境要求
- CentOS 7 及以上,CPU 必须支持 AVX2 指令集。
- Java 1.8 及以上。
- 文件描述符上限调到 65535(ulimit -n)。
- 网络建议万兆;BE 节点 16 核 64G 起步,FE 节点 8 核 16G 起步。
FE 部署
先创建元数据与日志目录(每个 FE 节点都要执行),再编辑 fe.conf:
#创建元数据和日志存储目录,FE节点都需要创建
mkdir -p /data/StarRocks-fe/{StarRocks-meta,log}
[root@starrocks-fe_be01 ~]# vim /usr/local/StarRocks/fe/conf/fe.conf
fe.conf 重点调整两处:JAVA_OPTS 按 16G 以上配置,meta_dir 指向单独挂载的 SSD;随后把安装目录与配置拷贝到其余 FE 节点:
#我们将StarRocks解压后的目录和修改的配置全部拷贝到另外的FE节点上
export NODE_IPS=(192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp -r /usr/local/StarRocks root@${node_ip}:/usr/local/
done
用 systemd 托管 FE 服务:
#通过Systemd托管
cat > /usr/lib/systemd/system/StarRocks-fe.service <<EOF
[Unit]
Description=StarRocks FE Service
Documentation=https://www.starrocks.com/
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/StarRocks/fe/bin/start_fe.sh --daemon
ExecStop=/usr/local/StarRocks/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
systemctl daemon-reload && systemctl restart StarRocks-fe.service && systemctl enable StarRocks-fe.service && systemctl status StarRocks-fe.service
#检查服务监听状态
ss -tnlp | grep 9030
ps -aux | grep StarRocks
安装 MySQL 客户端后以 9030 端口连接 FE,root 默认无密码,直接设置:
#连接到FE,需要提前安装MySQL客户端程序
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot
#默认root无密码,通过以下命令修改 root密码 。
mysql> SET PASSWORD FOR 'root' = PASSWORD('admin123456');
mysql> ALTER SYSTEM ADD FOLLOWER "192.168.66.132:9010";
mysql> ALTER SYSTEM ADD OBSERVER "192.168.66.133:9010";
另一份等效的服务单元文件写法与启动命令:
cat > /opt/StarRocks-fe.service <<EOF
[Unit]
Description=StarRocks FE Service
Documentation=https://www.starrocks.com/
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/StarRocks/fe/bin/start_fe.sh --helper 192.168.66.131:9010 --daemon
ExecStop=/usr/local/StarRocks/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
#拷贝配置至另外的FE节点
export NODE_IPS=(192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp /opt/StarRocks-fe.service root@${node_ip}:/usr/lib/systemd/system/
done
#启动FE服务
systemctl daemon-reload && systemctl restart StarRocks-fe.service && systemctl enable StarRocks-fe.service &&systemctl status StarRocks-fe.service
查看 FE 集群状态:
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot -p
mysql> SHOW PROC '/frontends'G



FE 高可用
FE 之间的一致性由 bdbje 实现的类 raft 协议保证。Follower 数量遵循 2n+1,多数派存活集群才能写入,建议部署 3 个;Observer 只同步数据不参与选举,用于扩展读能力。约束条件:各节点时钟偏差控制在 5 秒以内(配置 NTP)、一台机器只跑一个 FE、所有 FE 的 http_port 必须一致。加入命令如下:
ALTER SYSTEM ADD FOLLOWER "192.168.66.132:9010";
Observer 同理,把 FOLLOWER 换成 OBSERVER 并指向对应节点 IP。新 FE 启动时通过 –helper 参数指向已有节点完成注册;内网多网卡环境要配置 priority_networks 指定网段。

BE 部署与收尾
BE 节点提前创建数据与日志目录,be.conf 中 storage_root_path 用分号分隔多块数据盘:
#创建数据和日志存储目录,BE节点都需要创建
mkdir -p /data/StarRocks-be/{storage1,storage2,log}
[root@StarRocks-fe_be01 ~]# vim /usr/local/StarRocks/be/conf/be.conf
export NODE_IPS=(192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp /usr/local/StarRocks/be/conf/be.conf root@${node_ip}:/usr/local/StarRocks/be/conf/
done
#登入其他BE节点修改绑定IP
~]# vim /usr/local/StarRocks/be/conf/be.conf
在 FE 上把各 BE 节点加入集群:
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot -p
ALTER SYSTEM ADD BACKEND "192.168.66.131:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.132:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.133:9050";

BE 同样用 systemd 托管(原始单元文件的 Description 沿用了 Doris 命名,不影响运行):
#通过Systemd托管程序
cat > /usr/lib/systemd/system/StarRocks-be.service <<EOF
[Unit]
Description=Doris BE Service
Documentation=https://doris.apache.org
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
User=root
Group=root
ExecStart=/usr/local/StarRocks/be/bin/start_be.sh --daemon
ExecStop=/usr/local/StarRocks/be/bin/stop_be.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
#拷贝Service服务配置
export NODE_IPS=(192.168.66.131 192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp /usr/lib/systemd/system/StarRocks-be.service root@${node_ip}:/usr/lib/systemd/system/
done
#启动服务
export NODE_IPS=(192.168.66.131 192.168.66.132 192.168.66.133)
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "systemctl daemon-reload && systemctl restart StarRocks-be.service && systemctl enable StarRocks-be.service && systemctl status StarRocks-be.service"
done
确认每个 BE 的 Alive 为 true:
[root@StarRocks-fe_be01 ~]# mysql -h 192.168.66.131 -P 9030 -uroot -p
#Alive为 true表示该 BE节点存活
mysql> SHOW PROC '/backends'G


浏览器打开 http://FE_IP:8030 进入 Web 界面,用 root 和前面设置的密码登录。同规格压测对比下,StarRocks 的查询耗时明显优于 Doris。

注意事项
- meta_dir 一定要与数据盘分离,FE 元数据落在机械盘上会显著拖慢故障恢复。
- ADD FOLLOWER 前确认目标节点的 priority_networks,网卡选错会出现”加入成功但不同步”的假象。
- AVX2 是硬性要求,老 CPU 或未开启指令集的虚机会直接启动失败。
- BE 加入命令里的 9050 是心跳端口,与 8040 的 HTTP 端口不要混淆。
















暂无评论内容