StarRocks 存算分离集群采用了存储计算分离架构,特别为云存储设计。在存算分离的模式下,StarRocks 将数据存储在对象存储(例如 AWS S3、GCS、OSS、Azure Blob 以及 MinIO)或 HDFS 中,而本地盘作为热数据缓存,用以加速查询。通过存储计算分离架构,可以降低存储成本并且优化资源隔离,集群的弹性扩展能力也得以加强。
StarRocks存算分离集群由以下三部分组成:
FE节点:负责维护和管理StarRocks数据库集群元数据和接受处理用户的查询请求,并返回结果
CN节点:用于执行SQL计算任务和缓存数据
分布式存储服务:用于存储数据库数据
这里以部署到S3兼容的对象存储为例,分享如何部署一个StarRocks存算分离集群,这里的S3兼容的对象存储我们选择MinIO。
下面是测试环境信息:
| 机器 | 系统 | IP | 服务 |
|---|---|---|---|
| StarRocks-01 | RockyLinux 9.4 | 10.1.4.1 | StarRocks FE节点+CN节点 |
| StarRocks-02 | RockyLinux 9.4 | 10.1.4.2 | StarRocks CN节点 |
| StarRocks-03 | RockyLinux 9.4 | 10.1.4.3 | StarRocks CN节点 |
| StarRocks-S3 | RockyLinux 9.4 | 10.1.4.6 | 部署MinIO服务,用于提供StarRocks存算分离所需的S3兼容服务 |
部署MinIO服务
通过RPM包下载和安装MinIO
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240510014138.0.0-1.x86_64.rpm -O minio.rpm
dnf install minio.rpm
通过RPM包安装minio会默认创建systemd服务文件:/usr/lib/systemd/system/minio.service
在/etc/default/minio下创建环境变量文件:
# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
# Omit to use the default values 'minioadmin:minioadmin'.
# MinIO recommends setting non-default values as a best practice, regardless of environment
MINIO_ROOT_USER=myminioadmin
MINIO_ROOT_PASSWORD=rootR00t
# MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.
MINIO_VOLUMES="/mnt/data"
# MINIO_OPTS sets any additional commandline options to pass to the MinIO server.
# For example, `--console-address :9001` sets the MinIO Console listen port
MINIO_OPTS="--console-address :9001"
# MINIO_SERVER_URL sets the hostname of the local machine for use with the MinIO Server
# MinIO assumes your network control plane can correctly resolve this hostname to the local machine
# Uncomment the following line and replace the value with the correct hostname for the local machine and port for the MinIO server (9000 by default).
MINIO_SERVER_URL="http://10.1.4.6:9000
启动MinIO服务
# 启动minio服务
systemctl start minio.service
# 检查MinIO服务是否有效
# 设置开机自启
systemctl enable minio.service
安装MinIO客户端
curl https://dl.min.io/client/mc/release/linux-amd64/mc \
--create-dirs \
-o $HOME/minio-binaries/mc
chmod +x $HOME/minio-binaries/mc
echo "export PATH=\$PATH:\$HOME/minio-binaries" >> ~/.bashrc
source ~/.bashrc
mc --help
设置一个新的别名
mc alias set myminio http://localhost:9000 myminioadmin rootR00t
使用mc创建一个存储桶sr
mc mb myminio/starrocks
登录MinIO控制台,用户名和密码是在/etc/default/minio中指定的用户和密码。
通过Administrator->Identity->Users新增一个用户并授予存储桶读写权限,然后在用户的Service Accounts里创建一个Access Key用于后续StarRocks访问该存储桶,Access Key信息仅出现一次,请先记下来。
Access Key: y0LMj1675a6ImKhyQABw
Secret Key: nQ5MyAqpf9nuYqT1edqYml0aVvv0YJBrEIhRlh3C
部署StarRocks存算分离集群
检查配置环境(所有节点)
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
为每一个主机设置一个唯一的主机名
hostnamectl hostname set StarRocks-xx
JDK设置
检查机器是否安装有jdk11,如果没有安装,则使用下面的命令安装jdk11,2.5以上版本建议安装jdk11
dnf install java-11-openjdk java-11-openjdk-devel -y
检查环境变量是否正确
echo $JAVA_HOME
如果不正确,则编辑/etc/profile文件
export JAVA_HOME=/usr/lib/jvm/java-11
export PATH=$JAVA_HOME/bin:$PATH
刷新配置
source etc/profile
使用下面命令验证变更
java -version
设置内存
# 修改配置文件。
cat >> etc/sysctl.conf << EOF
vm.overcommit_memory=1
EOF
# 使修改生效。
sysctl -p
禁用Transparent Huge Pages
# 临时变更。
echo madvise | sudo tee sys/kernel/mm/transparent_hugepage/enabled
echo madvise | sudo tee sys/kernel/mm/transparent_hugepage/defrag
# 永久变更。
cat >> etc/rc.d/rc.local << EOF
if test -f sys/kernel/mm/transparent_hugepage/enabled; then
echo madvise > sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f sys/kernel/mm/transparent_hugepage/defrag; then
echo madvise > sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x etc/rc.d/rc.local
禁用swap
关闭swap
swapoff -a
从/etc/fstab文件中删除Swap Space信息
/<path_to_swap_space> swap swap defaults 0 0
确认Swap已关闭
free -m
禁用 Swappiness
# 修改配置文件。
cat >> etc/sysctl.conf << EOF
vm.swappiness=0
EOF
# 使修改生效。
sysctl -p
禁用SELinux
# 临时变更。
setenforce 0
# 永久变更。
sed -i 's/SELINUX=.*/SELINUX=disabled/' etc/selinux/config
sed -i 's/SELINUXTYPE/#SELINUXTYPE/' etc/selinux/config
配置LANG变量
# 修改配置文件。
echo "export LANG=en_US.UTF8" >> etc/profile
# 使修改生效。
source etc/profile
设置时区
cp -f usr/share/zoneinfo/Asia/Shanghai etc/localtime
hwclock
设置ulimit
cat >> etc/security/limits.conf << EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 655350
* hard nofile 655350
* soft stack unlimited
* hard stack unlimited
* hard memlock unlimited
* soft memlock unlimited
EOF
cat >> etc/security/limits.d/20-nproc.conf << EOF
* soft nproc 65535
root soft nproc 65535
EOF
配置网络
tcp_abort_on_overflow
# 修改配置文件。
cat >> etc/sysctl.conf << EOF
net.ipv4.tcp_abort_on_overflow=1
EOF
# 使修改生效。
sysctl -p
somaxconn(socket队列最大连接请求数)
# 修改配置文件。
cat >> etc/sysctl.conf << EOF
net.core.somaxconn=1024
EOF
# 使修改生效。
sysctl -p
检查NTP
rpm -qa | grep ntp
systemctl status chrony
高并发下的内核调整
# 修改配置文件。
cat >> etc/sysctl.conf << EOF
vm.max_map_count = 262144
EOF
# 使修改生效。
sysctl -p
echo 120000 > proc/sys/kernel/threads-max
echo 200000 > proc/sys/kernel/pid_max
部署前的准备
下载StarRocks二进制包到所有的节点并解压
cd opt
wget https://releases.starrocks.io/starrocks/StarRocks-3.2.7.tar.gz
tar -xzvf StarRocks-3.2.7.tar.gz
部署FE节点
创建元数据目录
mkdir -p data/fe
修改FE配置文件fe/conf/fe.conf
run_mode = shared_data
priority_networks = 10.1.0.0/20
cloud_native_meta_port = 6090
enable_load_volume_from_conf = true
cloud_native_storage_type = S3
meta_dir = data/meta
aws_s3_path = starrocks/sr1
aws_s3_endpoint = http://10.1.4.6:9000
aws_s3_region = us-west-2
aws_s3_access_key = y0LMj1675a6ImKhyQABw
aws_s3_secret_key = nQ5MyAqpf9nuYqT1edqYml0aVvv0YJBrEIhRlh3C
JAVA_HOME = usr/lib/jvm/java-11
启动fe
./fe/bin/start_fe.sh --daemon
部署CN节点
创建数据缓存目录
mkdir -p data/cn
修改 CN配置文件 be/conf/cn.conf
storage_root_path = data/cn
starlet_port = 9070
priority_networks = 10.1.0.0/20
JAVA_HOME = usr/lib/jvm/java-11
启动CN节点
./be/bin/start_cn.sh --daemon
搭建集群
在fe节点,使用MYSQL客户端连接
mysql -uroot -P9030 -h 127.0.0.1
添加cn节点
ALTER SYSTEM ADD COMPUTE NODE "10.1.4.1:9050";
查看FE节点和BE节点状态
SHOW FRONTENDS\G;
SHOW PROC '/compute_nodes'\G
停止集群
停止FE
./fe/bin/stop_fe.sh --daemon
停止BE
./be/bin/stop_be.sh --daemon
存算分离集群性能测试
ssb测试
[root@StarRocks-01 output]# sh bin/benchmark.sh ssb-flat
SQL Time(ms)
Q1.1 10
Q1.2 6
Q1.3 3
Q2.1 10
Q2.2 3
Q2.3 3
Q3.1 10
Q3.2 3
Q3.3 0
Q3.4 6
Q4.1 6
Q4.2 3
Q4.3 3
Total 66
TPCH测试
[root@StarRocks-01 tpch-poc-1.0]# sh bin/benchmark.sh
SQL Time(ms)
Q1 736
Q2 63
Q3 210
Q4 176
Q5 433
Q6 30
Q7 640
Q8 343
Q9 1010
Q10 343
Q11 143
Q12 86
Q13 610
Q14 53
Q15 86
Q16 136
Q17 203
Q18 613
Q19 116
Q20 106
Q21 643
Q22 140
Total 6919
点击关注乘数科技





