StarRocks 集群部署与性能优化实战

一、前言

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)** 等场景,适配更大规模与实时性需求。

相关推荐
木雷坞2 小时前
【2026年最新实测】NAS Docker镜像拉取性能优化方案:从3小时到3分钟的技术实战
docker·容器·性能优化
空中海19 小时前
第七章:安卓性能优化
android·性能优化
全栈工程师修炼指南19 小时前
Nginx | 磁盘IO层面性能优化秘诀:error 日志内存环形缓冲区及小文件 sendfile 零拷贝技术
运维·网络·nginx·性能优化
MU在掘金9169520 小时前
在Perfetto里框选一段卡顿,AI直接告诉你哪行代码有问题
性能优化
迷藏49421 小时前
**TiDB 在高并发场景下的性能优化实战:从慢查询到极致吞吐的跃迁**在现代分布式系统中,数据库不仅是数据存储的
java·数据库·python·性能优化·tidb
3DVisionary1 天前
新拓三维XTOM系统:汽车模具全场3D检测深度技术问答
性能优化·降本增效·storm·蓝光3d扫描·汽车模具制造·数字化质检·xtom测量仪
00后程序员张1 天前
前端可视化大屏制作全指南:需求分析、技术选型与性能优化
前端·ios·性能优化·小程序·uni-app·iphone·需求分析
得物技术1 天前
生成式召回在得物的落地技术分享与思考
算法·性能优化·程序员
lwf0061641 天前
JPA批量操作性能优化
性能优化