StarRocks 编译安装与部署指南
什么是 StarRocks
StarRocks 是新一代极速全场景 MPP(Massively Parallel Processing)数据库,由 Apache Doris 的早期核心团队打造。它在 OLAP 场景下以极速的查询性能著称,广泛用于实时数仓、用户画像、报表分析等场景。
StarRocks 采用 FE(Frontend)+ BE(Backend)的经典架构:
- FE:负责元数据管理、查询解析、查询计划生成
- BE:负责数据存储和查询执行
本文记录从源码编译到集群部署的完整流程,基于 StarRocks 2.0 ~ 3.1 版本。
环境准备
基础依赖
StarRocks 依赖 JDK 11,编译和运行都需要:
bash
# 配置 Java 环境
export JAVA_HOME=/data/jdk-11.0.12
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
如果需要对接 Hive/HDFS 外部表,还需要 Hadoop 环境变量:
bash
export HADOOP_HOME=/data/hadoop-3.1.2
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$PATH:$HADOOP_HOME/bin
创建数据目录
bash
mkdir -p /home/data/srdata/storage
mkdir -p /home/data/srdata/log
mkdir -p /home/data/srdata/meta
注意:数据目录不建议使用软链接,否则部分版本可能出现兼容性问题。
源码编译
如果只是想快速使用,可以直接从 StarRocks 官网 下载预编译包。以下是源码编译流程,适合需要定制功能或禁用某些指令集的场景。
使用 Docker 编译容器
官方提供了编译容器 starrocks/dev-env:main,启动它:
bash
docker pull starrocks/dev-env:main
docker run -it \
-v /data/starrocks/.m2:/root/.m2 \
-v /data/starrocks:/root/starrocks \
--name starrocks-build \
-d starrocks/dev-env:main
# 进入编译容器
docker exec -it starrocks-build /bin/bash
执行编译
bash
cd /root/starrocks/starrocks-xxx
# 只编译 BE(Backend)
./build.sh --be
如果服务器不支持 AVX2 指令集,需要修改 build.sh:
bash
if [[ -z ${USE_AVX2} ]]; then
USE_AVX2=OFF
fi
编译完成后,输出包位于 output/ 目录下。
集群部署
假设部署规划如下(3 节点混部 FE + BE + Broker):
| 节点 | 角色 |
|---|---|
| 192.168.1.11 | FE(Leader) + BE + Broker |
| 192.168.1.12 | FE(Follower) + BE + Broker |
| 192.168.1.13 | FE(Follower) + BE + Broker |
配置 hosts
bash
# /etc/hosts
192.168.1.11 sr01
192.168.1.12 sr02
192.168.1.13 sr03
配置文件
FE 配置 (fe/conf/fe.conf):
properties
LOG_DIR = /home/data/srdata/log
meta_dir = /home/data/srdata/meta
sys_log_dir = /home/data/srdata/log
audit_log_dir = /home/data/srdata/log
# 如果机器有多网卡,必须指定 priority_networks
priority_networks = 192.168.1.0/24
BE 配置 (be/conf/be.conf):
properties
storage_root_path = /home/data/srdata/storage,medium:SSD
sys_log_dir = /home/data/srdata/log
# 内存限制,建议设置为物理内存的 70%-75%
mem_limit = 24G
启动第一个 FE 节点
bash
# 在主节点 (sr01) 上启动 FE
/data/StarRocks-3.1.7/fe/bin/start_fe.sh --daemon
用 MySQL 客户端连接验证:
bash
mysql -h 127.0.0.1 -P9030 -uroot
添加 BE 和 Broker 节点
sql
-- 添加 BE 节点(端口默认 9050)
ALTER SYSTEM ADD BACKEND "192.168.1.11:9050";
ALTER SYSTEM ADD BACKEND "192.168.1.12:9050";
ALTER SYSTEM ADD BACKEND "192.168.1.13:9050";
-- 查看 BE 状态
SHOW PROC '/backends';
sql
-- 添加 Broker 节点(同一名称实现负载均衡,端口默认 8000)
ALTER SYSTEM ADD BROKER broker1 "192.168.1.11:8000";
ALTER SYSTEM ADD BROKER broker1 "192.168.1.12:8000";
ALTER SYSTEM ADD BROKER broker1 "192.168.1.13:8000";
-- 查看 Broker 状态
SHOW PROC "/brokers";
启动 BE 和 Broker
在每个节点上执行:
bash
# 启动 BE
/data/StarRocks-3.1.7/be/bin/start_be.sh --daemon
# 启动 Broker
/data/StarRocks-3.1.7/apache_hdfs_broker/bin/start_broker.sh --daemon
FE 高可用配置
生产环境建议至少部署 3 个 FE 节点(1 Leader + 2 Follower),实现高可用。
添加 Follower 节点
sql
ALTER SYSTEM ADD FOLLOWER "192.168.1.12:9010";
ALTER SYSTEM ADD FOLLOWER "192.168.1.13:9010";
-- 查看 FE 状态
SHOW PROC '/frontends';
启动 Follower FE
在其他 FE 节点上,第一次启动 需要加 --helper 参数:
bash
# helper 参数指向已存在的 FE 节点(Leader),端口为 edit_log_port(默认 9010)
/data/StarRocks-3.1.7/fe/bin/start_fe.sh --helper 192.168.1.11:9010 --daemon
注意:
- FE HA 建立后,第二次启动不需要再加
--helper参数- 启动前检查各节点时钟误差,不能大于 5 秒,否则可能导致集群异常
配置用户和权限
sql
-- 设置 root 密码
SET PASSWORD = PASSWORD('your_password');
-- 创建只读用户
CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly_pwd';
GRANT SELECT_PRIV ON database_name.* TO 'readonly'@'%';
-- 创建角色和用户
CREATE ROLE analyst;
CREATE USER analyst_user@'%' IDENTIFIED BY 'analyst_pwd' DEFAULT ROLE 'analyst';
GRANT ALL ON DATABASE analyst_db TO ROLE analyst;
SHOW ROLES;
systemd 服务配置
为了方便管理,建议将 StarRocks 注册为 systemd 服务。
FE 服务 (/usr/lib/systemd/system/starrocks-fe.service):
ini
[Unit]
Description=StarRocks FE Service
After=network.target
[Service]
Type=forking
ExecStart=/data/StarRocks-3.1.7/fe/bin/start_fe.sh --daemon
PIDFile=/data/StarRocks-3.1.7/fe/bin/fe.pid
ExecStop=/data/StarRocks-3.1.7/fe/bin/stop_fe.sh
PrivateTmp=true
TimeoutSec=30
Restart=always
RestartSec=5
StartLimitInterval=0
TimeoutStopSec=5
OOMScoreAdjust=1000
[Install]
WantedBy=multi-user.target
BE 服务 (/usr/lib/systemd/system/starrocks-be.service):
ini
[Unit]
Description=StarRocks BE Service
After=network.target
[Service]
Type=forking
ExecStart=/data/StarRocks-3.1.7/be/bin/start_be.sh --daemon
PIDFile=/data/StarRocks-3.1.7/be/bin/be.pid
ExecStop=/data/StarRocks-3.1.7/be/bin/stop_be.sh
PrivateTmp=true
TimeoutSec=30
Restart=always
RestartSec=5
StartLimitInterval=0
TimeoutStopSec=5
OOMScoreAdjust=1000
[Install]
WantedBy=multi-user.target
启动脚本中需要指定 Java 路径,修改 start_fe.sh 和 start_be.sh:
bash
export JAVA_HOME=/data/jdk-11.0.12
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# 根据实际安装路径修改
curdir=/data/StarRocks-3.1.7/fe/bin
启用服务:
bash
systemctl daemon-reload
systemctl enable starrocks-fe starrocks-be
systemctl start starrocks-fe starrocks-be
连接 Hive 外部表
如需查询 Hive 数据,需要将 Hadoop 的 core-site.xml 和 hdfs-site.xml 复制到 FE 和 BE 的 conf/ 目录下。
创建 hadoop_env.sh:
bash
export HADOOP_USER_NAME=root
关键参数调优
properties
# === FE 参数 ===
# Hive 元数据加载并发数
hive_meta_load_concurrency=6
# Hive 元数据缓存刷新间隔(秒)
hive_meta_cache_refresh_interval_s=900
# 建表超时时间(秒)
tablet_create_timeout_second=10
# Broker 扫描单次最小字节数
min_bytes_per_broker_scanner=16777216
# === BE 参数 ===
# 内存限制,建议设为物理内存的 70%
# mem_limit=50%
# 存储页面缓存
storage_page_cache_limit=5%
# HDFS 扫描并发数
max_hdfs_scanner_num=5
动态修改参数(无需重启):
sql
-- 修改用户最大连接数
SET PROPERTY FOR 'root' 'max_user_connections' = '5000';
-- 修改 FE 动态参数
ADMIN SET FRONTEND CONFIG ("tablet_create_timeout_second" = "3");
-- 修改查询计划优化超时
SET GLOBAL new_planner_optimize_timeout = 20000;
-- 修改执行内存限制(3.3 版本不支持 exec_mem_limit)
SET GLOBAL query_mem_limit = 25769803776;
常用运维命令
sql
-- 查看 tablet 统计信息
SHOW PROC '/statistic';
-- 查看具体库的统计
SHOW PROC '/statistic/10056';
-- 查看具体 tablet 详情
SHOW TABLET 110339;
-- 分析查询性能
ANALYZE PROFILE FROM '58d0c87c-66ca-11f0-94fb-00163e2b3fa7';
-- 查看配置变量
SHOW VARIABLES LIKE "%query_mem_limit%";
-- 查看用户属性
SHOW PROPERTY FOR 'root';
总结
StarRocks 的部署相对简单,核心步骤是:Java 环境 → 配置 priority_networks → 启动 FE → 添加 BE/Broker → 配置 FE HA → 注册 systemd。
几个容易踩坑的点:
- 多网卡机器必须配置
priority_networks - FE HA 第一次启动要用
--helper参数 - 节点时钟差不能超过 5 秒
- 数据目录不要用软链接
- 内存限制用绝对值,不要超过物理内存的 75%
下一篇将介绍 StarRocks 的备份与恢复操作。