StarRocks 编译安装与部署指南

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.shstart_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.xmlhdfs-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

几个容易踩坑的点:

  1. 多网卡机器必须配置 priority_networks
  2. FE HA 第一次启动要用 --helper 参数
  3. 节点时钟差不能超过 5 秒
  4. 数据目录不要用软链接
  5. 内存限制用绝对值,不要超过物理内存的 75%

下一篇将介绍 StarRocks 的备份与恢复操作。