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
    12
    run_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
    8
    meta_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 节点是否启动成功
    1
    cat be/log/cn.INFO | grep heartbeat
    如果日志打印以下内容,则说明该 CN 节点启动成功:
    “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
    19
    mysql> 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
    23
    mysql> 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');