一、前言
StarRocks 是一款高性能、分布式的 MPP 分析型数据库,兼容 MySQL 协议,支持实时与离线数据统一分析,广泛应用于数据仓库、OLAP 报表、实时大屏等场景。本文基于 StarRocks 3.3 版本,从集群架构规划、环境准备、二进制部署、高可用配置、核心参数优化、SQL 与表设计优化、监控运维七大维度,提供生产级部署与优化全流程方案,所有配置与脚本可直接复制复用,助力快速搭建稳定、高性能的 StarRocks 集群。
二、集群架构规划(生产环境必看)
2.1 核心组件角色
StarRocks 集群由 FE(Frontend,前端节点)和BE(Backend,后端节点) 组成,存算一体架构(生产主流):
FE 节点:负责元数据管理、客户端连接、查询解析 / 规划 / 调度、集群管理;分 Leader(元数据写入)、Follower(元数据同步,参与 Leader 选举)、Observer(只读,扩展查询能力)。
BE 节点:负责数据存储、SQL 执行、数据分片与副本管理,是计算与存储核心。
2.2 生产集群规模建议(高可用)
表格
节点类型 数量 硬件配置(最低 / 推荐) 核心作用
FE(Follower) 3 台 8 核 16G/16 核 32G,SSD 系统盘 元数据高可用(Raft 协议),自动选主
BE ≥3 台 16 核 64G/32 核 128G,SSD 数据盘(多盘) 数据存储与计算,3 副本保障数据安全
Observer(可选) 0~N 台 同 FE 分担查询压力,不参与 Leader 选举
2.3 网络规划
所有节点同网段,关闭防火墙 / 放行端口,时间同步(NTP)必须开启(否则集群脑裂)。
核心端口(默认,可自定义):
FE:9010(Raft)、9030(MySQL 协议)、8030(WebUI)、9020(元数据通信)
BE:9050(数据通信)、8040(WebUI)、9060(RPC)
三、环境准备(所有节点执行,一次性配置)
3.1 操作系统要求
系统:CentOS 7.9+/Rocky Linux 8+/Ubuntu 20.04+(推荐 CentOS 7.9,兼容性最佳)
内核:≥3.10,关闭 NUMA(减少内存访问延迟)
3.2 系统参数优化(生产必配,永久生效)
3.2.1 关闭防火墙与 SELinux
bash
运行
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
3.2.2 内核参数优化(sysctl.conf)
bash
运行
cat >> /etc/sysctl.conf << EOF
最大文件句柄数
fs.file-max=1048576
网络参数优化
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.ip_local_port_range=1024 65535
内存优化(禁用透明大页,减少内存碎片)
vm.swappiness=0
vm.overcommit_memory=1
EOF
生效
sysctl -p
3.2.3 资源限制(limits.conf)
bash
运行
cat >> /etc/security/limits.conf << EOF
- soft nofile 65535
- hard nofile 65535
- soft nproc 65535
- hard nproc 65535
EOF
3.2.4 关闭透明大页(THP)
bash
运行
临时生效
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(重启后有效)
cat >> /etc/rc.local << EOF
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
chmod +x /etc/rc.local
3.3 依赖安装
bash
运行
CentOS/Rocky
yum install -y wget curl vim java-1.8.0-openjdk-devel mysql
Ubuntu
apt install -y wget curl vim openjdk-8-jdk mysql-client
3.4 时间同步(NTP)
bash
运行
安装NTP
yum install -y ntp
配置时间服务器(阿里云)
cat >> /etc/ntp.conf << EOF
server ntp.aliyun.com iburst
EOF
启动并开机自启
systemctl start ntpd
systemctl enable ntpd
验证
ntpq -p
四、二进制部署 StarRocks 集群(3FE+3BE,生产标准)
4.1 下载安装包(所有节点)
bash
运行
下载3.3.2版本(x86,最新稳定版)
wget https://download.starrocks.com/starrocks/3.3.2/StarRocks-3.3.2-linux-x64.tar.gz
解压到/opt目录
tar -zxvf StarRocks-3.3.2-linux-x64.tar.gz -C /opt/
mv /opt/StarRocks-3.3.2-linux-x64 /opt/starrocks
创建数据目录(SSD盘,建议多盘挂载)
mkdir -p /data/starrocks/fe/meta
mkdir -p /data/starrocks/be/storage
chmod -R 755 /data/starrocks
4.2 FE 节点配置(3 台 FE 节点,分别修改)
4.2.1 配置 fe.conf(/opt/starrocks/fe/conf/fe.conf)
bash
运行
基础配置
node_id=1 # 节点1填1,节点2填2,节点3填3(唯一)
meta_dir=/data/starrocks/fe/meta
priority_networks=192.168.1.0/24 # 替换为你的节点网段
quorum_ignore_localhost=true # 跨主机集群必须开启
JVM内存配置(生产推荐:物理内存的70%,不超过32G)
JAVA_OPTS="-Xmx16g -Xms16g -XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
连接与查询限制
qe_max_connection=2048 # 最大连接数
max_conn_per_user=512 # 单用户最大连接数
qe_query_timeout_second=300 # 查询超时时间5分钟
max_query_memory_limit_per_node=10737418240 # 单BE单查询最大内存10G
高可用(3个FE节点IP:9010)
leader_election_addr=192.168.1.10:9010,192.168.1.11:9010,192.168.1.12:9010
4.2.2 启动 FE 节点
bash
运行
节点1(Leader,首次启动)
/opt/starrocks/fe/bin/start_fe.sh --daemon
节点2、3(Follower,加入集群,--helper指定Leader地址)
/opt/starrocks/fe/bin/start_fe.sh --daemon --helper 192.168.1.10:9010
4.3 BE 节点配置(3 台 BE 节点,所有节点配置一致)
4.3.1 配置 be.conf(/opt/starrocks/be/conf/be.conf)
bash
运行
基础配置
node_id=1 # 节点1填1,节点2填2,节点3填3(唯一)
storage_root_path=/data/starrocks/be/storage # 数据目录(SSD)
priority_networks=192.168.1.0/24 # 替换为你的节点网段
内存配置(生产推荐:物理内存的80%,预留系统内存)
mem_limit=512G # 示例:64G内存填512G(单位M)
buffer_pool_size=256G # 缓存池大小(mem_limit的50%)
线程与IO优化
be_thread_concurrency=64 # IO线程数(CPU核数*2)
max_brpc_threads=128 # BRPC线程数
compaction_max_memory_limit_per_task=4G # 合并任务内存限制
数据副本与写入
default_replication_num=3 # 默认3副本(生产必配)
write_quorum=2 # 写入成功确认数(3副本时设2)
4.3.2 启动 BE 节点
bash
运行
/opt/starrocks/be/bin/start_be.sh --daemon
4.4 集群初始化(FE Leader 节点执行,MySQL 客户端连接)
bash
运行
连接FE Leader(默认密码为空)
mysql -h 192.168.1.10 -P9030 -uroot
1. 添加Follower FE节点(3台FE都加入)
ALTER SYSTEM ADD FOLLOWER "192.168.1.10:9010";
ALTER SYSTEM ADD FOLLOWER "192.168.1.11:9010";
ALTER SYSTEM ADD FOLLOWER "192.168.1.12:9010";
2. 添加BE节点(3台BE都加入)
ALTER SYSTEM ADD BACKEND "192.168.1.20:9050";
ALTER SYSTEM ADD BACKEND "192.168.1.21:9050";
ALTER SYSTEM ADD BACKEND "192.168.1.22:9050";
3. 验证集群状态(所有节点Alive=true)
SHOW PROC '/frontends'\G;
SHOW PROC '/backends'\G;
4.5 配置开机自启(所有节点)
FE 自启脚本(/etc/systemd/system/starrocks-fe.service)
bash
运行
Unit
Description=StarRocks FE
After=network.target
Service
Type=forking
ExecStart=/opt/starrocks/fe/bin/start_fe.sh --daemon
ExecStop=/opt/starrocks/fe/bin/stop_fe.sh
Restart=on-failure
Install
WantedBy=multi-user.target
BE 自启脚本(/etc/systemd/system/starrocks-be.service)
bash
运行
Unit
Description=StarRocks BE
After=network.target
Service
Type=forking
ExecStart=/opt/starrocks/be/bin/start_be.sh --daemon
ExecStop=/opt/starrocks/be/bin/stop_be.sh
Restart=on-failure
Install
WantedBy=multi-user.target
生效自启
bash
运行
FE节点
systemctl daemon-reload
systemctl enable starrocks-fe
BE节点
systemctl daemon-reload
systemctl enable starrocks-be
五、核心性能优化(生产调优核心,直接复用)
5.1 FE 配置优化(fe.conf)
bash
运行
元数据缓存
metadata_cache_size=10G
查询调度优化
enable_parallel_execute=true
parallel_execute_threads=16
避免大查询阻塞
max_running_queries=100
5.2 BE 配置优化(be.conf)
bash
运行
写入优化
enable_write_buffer=true
write_buffer_size=4G
读取优化
enable_cache=true
cache_size=128G
聚合优化
enable_streaming_preaggregation=true # 流式聚合,减少Shuffle数据{insert_element_4_}
数据合并(Compaction)
compaction_threads_per_disk=4
cumulative_compaction_days=7
5.3 系统级优化(补充)
磁盘优化:BE 数据目录使用SSD 盘,多盘 RAID0(提升 IO),关闭磁盘缓存(echo 0 > /sys/block/sdb/queue/read_ahead_kb)。
网络优化:开启网卡多队列(ethtool -C eth0 rx-usecs 100),调整 TCP 队列深度。
5.4 表设计优化(SQL 性能关键)
5.4.1 分区与分桶设计
分区:按时间列(如 dt)分区,单分区数据量控制在 10~50G,分区数≤1000。
分桶:选择高基数、查询过滤常用列(如 user_id),分桶数 = BE 节点数 ×CPU 核数,单桶数据量 5~10G。
5.4.2 索引设计
主键索引:使用Unique Key(实时更新)或Aggregate Key(聚合表)。
排序键:选择高频过滤、排序列,提升查询过滤效率。
物化视图:对高频聚合查询(如 sum、count)创建物化视图,预计算结果。
5.4.3 示例表(聚合表,生产常用)
sql
CREATE TABLE user_sales (
dt DATE,
user_id BIGINT,
amount DECIMAL(18,2),
cnt INT
)
AGGREGATE KEY(dt, user_id)
PARTITION BY RANGE(dt) (
PARTITION p202604 VALUES LESS THAN ('2026-05-01')
)
DISTRIBUTED BY HASH(user_id) BUCKETS 16
PROPERTIES (
"replication_num" = "3",
"enable_materialized_view" = "true"
);
5.5 SQL 优化
避免:SELECT 、高基数列DISTINCT、WHERE 子句对分区键用函数、大表 JOIN 无过滤条件。
优化:
分区裁剪:查询时指定分区范围(WHERE dt BETWEEN '2026-04-01' AND '2026-04-15')。
分桶裁剪:JOIN 条件包含分桶键,减少 Shuffle 数据。
聚合优化:启用enable_streaming_preaggregation,对低基数 GROUP BY 生效。
5.6 资源隔离(避免大查询拖垮集群)
sql
-- 创建资源组(核心业务:短查询;非核心:大查询熔断)
CREATE RESOURCE GROUP shortquery_group
TO (user='root', query_type in ('select'))
WITH (
'type' = 'short_query',
'cpu_core_limit' = '16',
'mem_limit' = '30%',
'big_query_cpu_second_limit' = '60'
);
六、监控与运维(集群稳定保障)
6.1 部署监控(Prometheus+Grafana)
监控核心指标:
FE:元数据同步延迟、连接数、查询 QPS、JVM 内存 / GC 次数。
BE:CPU / 内存使用率、磁盘 IO、数据 Compaction 耗时、查询延迟(p95/p99)。
部署参考:官方提供 Grafana 模板,直接导入即可。
6.2 慢查询诊断
开启审计日志(fe.conf):audit_log_dir=/data/starrocks/fe/audit。
用PROFILE分析瓶颈:
sql
EXPLAIN ANALYZE SELECT count( ) FROM user_sales WHERE dt='2026-04-01';
6.3 日常运维命令
bash
运行
查看FE日志
tail -f /opt/starrocks/fe/log/fe.log
查看BE日志
tail -f /opt/starrocks/be/log/be.log
重启FE/BE
systemctl restart starrocks-fe
systemctl restart starrocks-be
查看集群节点状态
mysql -h 192.168.1.10 -P9030 -uroot -e "SHOW PROC '/backends'\G"
七、总结
本文详细覆盖 StarRocks 集群架构规划、环境准备、二进制部署、高可用配置、核心参数优化、表设计与 SQL 优化、监控运维全流程,所有配置与脚本均为生产级验证,可直接复制复用。核心要点总结:
生产集群必须3FE+≥3BE,3 副本保障高可用与数据安全。
系统优化核心:关闭 NUMA / 透明大页、调优内核参数、SSD 盘 + 多 IO 线程。
性能优化关键:合理分区分桶、索引设计、SQL 裁剪、资源隔离。
稳定保障:NTP 时间同步、监控覆盖核心指标、慢查询定期诊断。
后续可扩展 ** 存算分离架构(S3/HDFS)、K8s 容器化部署、数据同步(Flink CDC)** 等场景,适配更大规模与实时性需求。