StarRocks之CVM基于cos存算分离架构实践
存算分离是真香
StarRocks 存算分离集群采用了存储计算分离架构,特别为云存储设计。在存算分离的模式下,StarRocks 将数据存储在对象存储(例如 AWS S3、GCS、OSS、Azure Blob 以及 MinIO)或 HDFS 中,而本地盘作为热数据缓存,用以加速查询。通过存储计算分离架构,您可以降低存储成本并且优化资源隔离。除此之外,集群的弹性扩展能力也得以加强。在查询命中缓存的情况下,存算分离集群的查询性能与存算一体集群性能一致。
在 v3.1 版本及更高版本中,StarRocks 存算分离集群由 FE 和 CN 组成。CN 取代了存算一体集群中的 BE。
相对存算一体架构,StarRocks 的存储计算分离架构提供以下优势:
- 廉价且可无缝扩展的存储。
- 弹性可扩展的计算能力。由于数据不存储在 CN 节点中,因此集群无需进行跨节点数据迁移或 Shuffle 即可完成扩缩容。
- 热数据的本地磁盘缓存,用以提高查询性能。
- 可选异步导入数据至对象存储,提高导入效率。
背景
本例背景以腾讯云COS作为存储卷,starrocks-3.2.2,1fe1cn进行部署
腾讯云服务器:172.16.0.4,4C8G,确保有jdk11环境
启动FE节点
1、创建元数据存储路径
1
mkdir -p /opt/downloads/StarRocks-3.2.2/fe/meta
在配置项 meta_dir 中指定元数据路径
1
meta_dir = /opt/downloads/StarRocks-3.2.2/fe/meta
2、增加存算分离配置
fe.conf 增加 run_mode,将原来的默认:
shared_nothing
变更为shared_data
其他的不用变更,会有默认值如:cloud_native_meta_port
默认6090
,enable_load_volume_from_conf
默认true
cloud_native_storage_type
默认S3
我们按照官方示例:1
2
3
4
5
6
7
8
9
10
11
12run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 如 testbucket/subpath
aws_s3_path = <s3_path>
# 例如:ap-beijing
aws_s3_region = <region>
# 例如:https://cos.ap-beijing.myqcloud.com
aws_s3_endpoint = <endpoint_url>
aws_s3_access_key = <access_key>
aws_s3_secret_key = <secret_key>结合我们实际最终在fe.conf添加如下配置
1
2
3
4
5
6
7
8meta_dir = /opt/downloads/StarRocks-3.2.2/fe/meta
run_mode = shared_data
aws_s3_path = dev-files-1253767413/starrocks
aws_s3_region = ap-guangzhou
aws_s3_endpoint = https://cos.ap-guangzhou.myqcloud.com
aws_s3_access_key = <access_key>
aws_s3_secret_key = <secret_key>3、启动 FE 节点
1
./fe/bin/start_fe.sh --daemon
4、查看 FE 日志,检查 FE 节点是否启动成功。
1
cat fe/log/fe.log | grep thrift
如果日志打印以下内容,则说明该 FE 节点启动成功:
“2024-01-13 16:12:29,911 INFO (UNKNOWN x.x.x.x_9010_1660119137253(-1)|1) [FeServer.start():52] thrift server started with port 9020.”
启动 CN 服务
Compute Node(CN)是一种无状态的计算服务,本身不存储数据。您可以通过添加 CN 节点为查询提供额外的计算资源。您可以使用 BE 部署文件部署 CN 节点。
因为使用默认端口配置,所以我们无需修改任何CN配置,如果需要变更,可到be/conf/cn.conf进行变更端口
- 1、启动 CN 节点
1
./be/bin/start_cn.sh --daemon
- 查看 CN 日志,检查 CN 节点是否启动成功如果日志打印以下内容,则说明该 CN 节点启动成功:
1
cat be/log/cn.INFO | grep heartbeat
“I0313 15:03:45.820030 412450 thrift_server.cpp:375] heartbeat has started listening port on 9050”
搭建集群
我们下面通过 MySQL 客户端来连接 Starrocks FE,下载免安装的 MySQL 客户端
- 1、通过 MySQL 客户端连接到 StarRocks。您需要使用初始用户 root 登录,密码默认为空。
1
2# mysql -h <fe_address> -P<query_port> -uroot
mysql -uroot -P9030 -h127.0.0.1 - 2、执行以下 SQL 查看 Leader FE 节点状态。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19mysql> SHOW PROC '/frontends'\G
*************************** 1. row ***************************
Name: 172.16.0.4_9010_1705155779443
IP: 172.16.0.4
EditLogPort: 9010
HttpPort: 8030
QueryPort: 9030
RpcPort: 9020
Role: LEADER
ClusterId: 66234781
Join: true
Alive: true
ReplayedJournalId: 1895
LastHeartbeat: 2024-01-14 00:07:14
IsHelper: true
ErrMsg:
StartTime: 2024-01-13 22:23:08
Version: 3.2.2-269e832
1 row in set (0.04 sec)- 如果字段 Alive 为 true,说明该 FE 节点正常启动并加入集群。
- 如果字段 Role 为 FOLLOWER,说明该 FE 节点有资格被选为 Leader FE 节点。
- 如果字段 Role 为 LEADER,说明该 FE 节点为 Leader FE 节点。
- 3、添加 CN 节点至集群。
1
ALTER SYSTEM ADD COMPUTE NODE "172.16.0.4:9050"
- 4、执行以下 SQL 查看 CN 节点状态。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23mysql> SHOW PROC '/compute_nodes'\G
*************************** 1. row ***************************
ComputeNodeId: 11083
IP: 172.16.0.4
HeartbeatPort: 9050
BePort: 9060
HttpPort: 8040
BrpcPort: 8060
LastStartTime: 2024-01-13 23:24:02
LastHeartbeat: 2024-01-14 00:09:59
Alive: true
SystemDecommissioned: false
ClusterDecommissioned: false
ErrMsg:
Version: 3.2.2-269e832
CpuCores: 4
NumRunningQueries: 0
MemUsedPct: 1.61 %
CpuUsedPct: 0.2 %
HasStoragePath: true
StarletPort: 9070
WorkerId: 1
1 row in set (0.00 sec)- 如果字段 Alive 为 true,说明该 CN 节点正常启动并加入集群。
其他
- 停止 FE 节点。
1
./fe/bin/stop_fe.sh --daemon
- 停止 BE 节点。
1
./be/bin/stop_be.sh --daemon
- 停止 CN 节点。
1
./be/bin/stop_cn.sh --daemon
- 重置root密码
1
SET PASSWORD for root = PASSWORD('xxxxxx');