StarRocks 4.X实战

1、集群部署

1.1、集群规划

FE:node-17、node-18、node-19

BE:node-17、node-18、node-19

1.2、基础环境

1、指令集检查

拓展:可通过lscpu命令查看完整的CPU架构、核数、型号、指令集等信息

powershell 复制代码
cat /proc/cpuinfo | grep avx2
2、操作系统检查

SR要求内核版本不低于3.10,glibc版本不低于2.17,相关检查命令

powershell 复制代码
系统查看:cat /etc/os-release 
内核查看:cat /proc/version
Glibc: ldd --version
3、端口冲突检查
powershell 复制代码
FE节点检查:    ss -antpl | grep -E '8030|9010|9020|9030|6090'
BE/CN节点检查: ss -antpl | grep -E '9060|9050|8040|8060|9070'
Broker节点检查:ss -antpl | grep -E '8000'
4、主机名检查

启用FQDN访问,注意事项:主机名唯一,配置hosts

5、JDK配置

说明:第21步执行完成再配置

powershell 复制代码
cat >> ~/.bashrc << 'EOF'

# jdk
export JAVA_HOME=/usr/java/jdk-17.0.8
export PATH=$JAVA_HOME/bin:$PATH
EOF
6、CPU性能模式设置

cpufreq是一个动态调整CPU频率的模块,选用performance模式可将CPU频率固定工作在其支持的最高运行频率上,而不再动态调节。

检查是否支持(虚拟机不支持):

powershell 复制代码
dnf install -y cpupowerutils
cpupower frequency-info --policy

若CPU不支持,执行后提示:Unable to determine current policy

若CPU支持,零时配置命令:

powershell 复制代码
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

永久配置:

powershell 复制代码
echo 'echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor' >> /etc/rc.d/rc.local

chmod +x /etc/rc.d/rc.local
7、Overcommit参数设置
powershell 复制代码
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf

sysctl -p /etc/sysctl.conf
8、mmap参数设置
powershell 复制代码
echo "vm.max_map_count=2000000" >> /etc/sysctl.conf

sysctl -p /etc/sysctl.conf
9、透明大页设置
powershell 复制代码
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local

echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local

chmod a+x /etc/rc.d/rc.local
10、Swap分区设置
powershell 复制代码
sed -ri 's/.*swap.*/#&/' /etc/fstab

echo "vm.swappiness=0" >> /etc/sysctl.conf

sysctl -p
11、磁盘调度算法

HDD硬盘建议磁盘调度算法为deadline,而SSD存储介质,内核的I/O调度操作会导致性能损失,将调度器设置为noop后,内核不做任何操作,直接将I/O请求下发给硬件,以获取更好的性能。

powershell 复制代码
获取磁盘名:lsblk
逐块磁盘检查:cat /sys/block/sdb/queue/scheduler
通常返回值为:noop[deadline] cfq

逐台逐盘调整调度算法,假设BE挂载了三块数据盘,则需要分别执行:

powershell 复制代码
echo 'echo noop | tee /sys/block/sdb/queue/scheduler' >> /etc/rc.d/rc.local
echo 'echo noop | tee /sys/block/sdc/queue/scheduler' >> /etc/rc.d/rc.local
echo 'echo noop | tee /sys/block/sdd/queue/scheduler' >> /etc/rc.d/rc.local
12、SELinux设置
powershell 复制代码
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
13、防火墙设置
powershell 复制代码
systemctl stop firewalld

systemctl disable firewalld
14、语言环境设置
powershell 复制代码
echo $LANG

echo "export LANG=en_US.UTF-8" >> /etc/profile

source /etc/profile
15、时区设置
powershell 复制代码
timedatectl

修改时区:
timedatectl set-timezone Asia/Shanghai

hwclock
16、ulimit设置
powershell 复制代码
ulimit -n

cat >> /etc/security/limits.conf <<EOF
*       soft    noproc  655350
*       hard    noproc  655350
*       soft    nofile  131072
*       hard    nofile  131072
*       hard    memlock unlimited
*       soft    memlock unlimited
EOF

普通用户

powershell 复制代码
cat >> /etc/security/limits.d/99-nproc.conf <<EOF
# 为所有用户设置最大进程数
*    soft    nproc    65535
*    hard    nproc    65535
EOF
17、文件系统设置
powershell 复制代码
推荐使用ext4或xfs文件系统,查看命令:df -Th 
18、网络参数设置

1、tcp_abort_on_overflow

powershell 复制代码
cat /proc/sys/net/ipv4/tcp_abort_on_overflow

# 设置
echo 'echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow' >> /etc/rc.d/rc.local

2、somaxconn

powershell 复制代码
cat /proc/sys/net/core/somaxconn

# 设置
echo 'echo 1024 > /proc/sys/net/core/somaxconn' >> /etc/rc.d/rc.local
19、时钟同步
20、MySQL客户端
21、创建用户和目录
powershell 复制代码
# 设置用户密码的方式为明文
ansible cluster -m user -a "name=starrocks password='123456'"

grep starrocks /etc/shadow

ansible cluster -m shell -a "mkdir -p /data/starrocks/log/{fe,be}"
ansible cluster -m shell -a "mkdir -p /data/starrocks/data/{meta,storage}"
ansible cluster -m shell -a "chown -R starrocks:starrocks /data/starrocks"

1.3、集群部署

1、解压
powershell 复制代码
ansible cluster -m copy -a 'src=/usr/bigtop/3.3.0/usr/lib/starrocks-4.1.4/fe/conf/fe.conf dest=/usr/bigtop/3.3.0/usr/lib/starrocks-4.1.4/fe/conf'

ansible cluster -m copy -a 'src=/usr/bigtop/3.3.0/usr/lib/starrocks-4.1.4/be/conf/be.conf dest=/usr/bigtop/3.3.0/usr/lib/starrocks-4.1.4/be/conf'

ansible cluster -m shell -a "chown -R starrocks:starrocks /usr/bigtop/3.3.0/usr/lib/starrocks-4.1.4"
2、修改FE配置

说明:分发到其他节点,修改priority_networks为其他节点IP即可

powershell 复制代码
cat > fe/conf/fe.conf <<EOF
# the output dir of stderr/stdout/gc
LOG_DIR = /data/starrocks/log/fe
JAVA_HOME=/usr/java/jdk-17.0.8
DATE = "\$(date +%Y%m%d-%H%M%S)"
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx2048m -XX:+UseG1GC -Xlog:gc*:\${LOG_DIR}/fe.gc.log.\$DATE:time -XX:ErrorFile=\${LOG_DIR}/hs_err_pid%p.log -Djava.security.policy=\${STARROCKS_HOME}/conf/udf_security.policy"
sys_log_level = INFO
meta_dir = /data/starrocks/data/meta
http_port = 18030
rpc_port = 19020
query_port = 19030
edit_log_port = 19010
priority_networks =192.168.18.17
sys_log_dir = /data/starrocks/log/fe
audit_log_dir = /data/starrocks/log/fe
EOF
3、修改BE配置

说明:分发到其他节点,修改priority_networks为其他节点IP即可

powershell 复制代码
cat > be/conf/be.conf <<EOF
sys_log_level = INFO
# ports for admin, web, heartbeat service 
be_port = 19060
be_http_port = 18040
heartbeat_service_port = 19050
brpc_port = 18060
starlet_port = 19070
priority_networks = 192.168.18.17
storage_root_path = /data/starrocks/data/storage,medium:SSD
sys_log_dir = /data/starrocks/log/be
JAVA_HOME=/usr/java/jdk-17.0.8
JAVA_OPTS="--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED"
EOF
4、修改hadoop_env.sh

说明:分别修改所有节点的FE、BE的配置

fe/conf/hadoop_env.sh、be/conf/hadoop_env.sh

powershell 复制代码
# 最上面添加
export HADOOP_USER_NAME=hive
5、启动并添加FE

启动FE服务

powershell 复制代码
cd /usr/bigtop/3.3.0/usr/lib/starrocks-4.1.4/

./fe/bin/start_fe.sh --daemon

登录StarRocks

powershell 复制代码
 mysql -h192.168.18.17 -P19030 -uroot
# 以root用户为例,生产环境建议设置复杂密码
set password=password('StarRocks*2308');
powershell 复制代码
mysql -h192.168.18.17 -P19030 -ustarrocks -pStarRocks*2308 --skip-ssl

添加FE服务

powershell 复制代码
alter system add follower "192.168.18.18:19010";
alter system add follower "192.168.18.19:19010";
6、启动并添加BE

添加BE

powershell 复制代码
alter system add backend '192.168.18.17:19050';
alter system add backend '192.168.18.18:19050';
alter system add backend '192.168.18.19:19050';

各节点启动BE

powershell 复制代码
./be/bin/start_be.sh --daemon
7、查看服务状态
powershell 复制代码
show frontends;

show backends;

2、集群操作

2.1、参数分类

1、系统参数
powershell 复制代码
变量查看:show variables [like '%xxx%'];

修改方式:

powershell 复制代码
SQL(支持配置多个变量):select /+* set_var(query_timeout=500)*/ name from people order by name;
SQL(支持配置多个变量):insert /+* set_var(enable_spill=true,spill_mode='force',enable_profile=true)*/ into table ...
Session(仅当前连接生效):set query_timeout=500;
Global(立即永久生效):set golbal query_timeout=500;
2、FE参数

https://docs.starrocks.io/zh/docs/administration/configuration/FE_parameters/

1、动态参数

支持在线修改,修改后立刻全局生效,但重启后失效。

支持动态修改的参数的查看方式(返回值的IsMutable为true表示支持):

powershell 复制代码
admin show frontend config [like "pattern"];

动态参数修改的语法为:admin set frontend config ("key"="value");
2、静态参数

仅能通过添加或修改fe.conf文件中的对应项,修改后重启FE才能生效

powershell 复制代码
查看FE实际参数:http:192.168.18.17:18030/variable
3、BE参数

https://docs.starrocks.io/zh/docs/administration/configuration/BE_parameters/

1、动态参数

支持逐台临时修改:

powershell 复制代码
curl -XPOT http:192.168.18.17:18040/api/update_config?key=value

需要逐个指定所有BE执行,执行后立刻生效,服务重启之后失效,希望配置一直生效,需在配置文件中进行修改。

2、静态参数

BE的静态参数仅支持通过be.conf修改,且修改后需要重启BE生效。

查看BE实际参数:

powershell 复制代码
http:192.168.18.17:18040/varz

2.2、性能测试

powershell 复制代码
https://docs.starrocks.io/zh/docs/benchmarking/

2.3、集群保障

powershell 复制代码
全局超时:set global query_timeout=30;
集群初始化(一个cte多处引用导致重复读,设置同一个表只读一次):set global cbo_cte_reuse_rate=0;
设置执行图优化器超时:set global new_planner_optimize_timeout=10000;
设置dop数量:set global pipeline_dop=8;
限制scan paimon外表的最大分区:set global scan_paimon_partition_num_limit=100;

2.3、报警规则

建立实例异常报警机制

powershell 复制代码
BE/CN节点CPU使用率 > 70%
BE/CN节点内存使用率 > 70%
BE/CN节点CPU可用率 < 100%
FE节点CPU使用率 > 70%
FE节点内存使用率 > 70%
FE节点可用率 < 100%
BE阻塞队列数 > 2000
查询失败次数 > N
查询延迟TP99 > N

2.4、元数据监控

元数据监控大盘:为实现有效治理,通过实时获取查询审计日志,并基于该审计日志配置元数据监控大盘,为后续的慢查询优化提供数据支撑。

powershell 复制代码
select * from _starrocks_audit_db.starrocks_audit_tbl;

数据集:消耗CU汇总 + 查询次数

判断是否可以开启: 物化 + 缓存

powershell 复制代码
数据集、数据集名称、执行总CU消耗、总查询大小、查询次数、总查询行数、失败率、失败次数、单次消耗CU、查询时间(秒)、查询人

2.5、压测发现问题和优化

1、分区裁剪失效或未配置分区过滤导致全表扫描
2、读取paimon表小文件过多

查看读取文件数的量级:

powershell 复制代码
运行SQL时加上hint /*+ set_var(enable_profile=true)*/,使运行SQL生成profile文件
在profile文件中搜索metadata:
其中nativeReaderReadNum代表读取数据块数
nativeReaderReadBytes代表读取字节数。
单个分区nativeReaderReadNum>200,建议对paimon表进行排序。
3、paimon表排序:

创建流批paimon表时,建议使用分支表,离线分支bucket设为-1,实时分支按需设置bucket;

powershell 复制代码
对于离线分支表,使用"clustering.columns"="f1,f2"指定排序字段(只适用bucket=-1),一般取OLAP查询时常用过滤字段。

仅支持flink批写入,写入表时需要使用hint /+* options('sink.parallelism'='64')*/;
4、检查是否存在MapJoin优化

如果查询中join了小表(<10MB),建议在维表前添加broadcast,效果类似与mapjoin。

powershell 复制代码
select xxx from big_table aleft join [broadcast] dim_table on d on a.id=d.id and a.ds='xxx';
5、检查是否跨地域

SR实例和读取的表要在同一个地域,如果跨地域,查询时延会大大增加。

6、检查paimon主键表是否加了dv

删除向量模式在写入时会生成vector同主键哪些数据被删除掉,读取可做过滤下推,用于加快SR查询速度,非主键表不需要加该参数。

powershell 复制代码
'deletion-vectors.enabled'='true';

2.6、SR查询Fluss

1、Union Read(实时+历史,联合查询)

默认:Union Read(实时+历史,联合查询)

powershell 复制代码
select user_id,count(*) from ods.orders where dt='20261010' group by user_id;
2、$lake(只读历史)
powershell 复制代码
select region,sum(amount) from ods.orders$lake where dt='20261010' group by region;
3、$rt(只读实时,实时点查,数据回追)
powershell 复制代码
select * from ods.orders$rt where order_id='1001' order by event_time desc limit 10;
4、FlussCatalog

FlussCatalog------>FlussScanNode(列裁剪+分区裁剪+谓词下推+DLF鉴权)

  • Fluss实时段:Arrow,短期,秒级新鲜 Paimon湖:Parquent,长周期,全量历史
  • 秒级可查-Fluss承接增量:日志表峰值3500万条/秒,主键表500万条/秒,支持部分列更新拼宽表;
  • 低成本沉淀-Paimon承接历史:自动分层同步,Parquet高压缩,类裁剪与分区裁剪使消费带宽-90%以上;
  • 一条查询路径-StarRocks统一入口:按checkpoint分段;之前查Paimon复用湖仓优化,之后的秒级增量查Fluss。

开发运维效率 + 50%以上-验证周期5天------>2天-实时链路成本-80%以上。

相关推荐
EatFan21 小时前
从T+1到分钟级:湖仓一体在大厂的真实落地收益对照(携程/网易云信/腾讯)
starrocks·flink·硬件架构·doris·湖仓一体·paimon
StarRocks_labs12 天前
当大模型调用进入执行引擎:StarRocks AI Function 全新能力解析
数据库·starrocks·sql·ai·pipeline·数据处理·join
智码看视界15 天前
大数据架构深度解析:StarRocks 实时数仓搭建:比 ClickHouse 更适合多维分析的场景
大数据·starrocks·olap·数据建模·列式存储·clickhouse对比
StarRocks_labs23 天前
StarRocks 如何查询 Paimon 半结构化数据?Variant、Shredding 与 SQL 实践
starrocks·sql·paimon·variant·shredding
StarRocks_labs1 个月前
StarRocks × Fluss × Paimon:流湖仓分析与 ETL 闭环
starrocks·flink·jni·native·paimon·湖仓·fluss
StarRocks_labs1 个月前
StarRocks 存算分离架构下的大规模实时导入优化实践
starrocks·flink·sstable·compaction·tablet·主键索引·存算分离架构
StarRocks_labs1 个月前
基于 Fluss、Paimon 与 StarRocks 构建淘天集团湖流一体数据链路
starrocks·olap·schema·paimon·fluss·湖流一体
StarRocks_labs1 个月前
从 6000+ Commit 中识别升级风险:一个 StarRocks AI 升级扫描工具的实现
starrocks·ai·commit·分析·claude code
StarRocks_labs1 个月前
StarRocks 4.1:聚焦生产实践,持续降低运维复杂度
运维·starrocks·iceberg·schema·物化视图·tablet·存算分离架构