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%以上。