基于 AWS S3 部署
本文介绍如何部署和使用 StarRocks 存算分离集群。该功能从 3.0 版本开始支持。
说明
- StarRocks v3.1 版本对存算分离部署和配置进行了一些更改。如果您正在运行 v3.1 版本或更高版本,请使用本文档。
- 如果您需要部署 v3.0 版本,请使用 v3.0 文档。
- StarRocks 存算分离集群不支持数据备份和恢复。
StarRocks 存算分离集群采用了存储计算分离架构,特别为云存储设计。在存算分离的模式下,StarRocks 将数据存储在对象存储(例如 AWS S3、GCS、OSS、Azure Blob 以及 MinIO)或 HDFS 中,而本地盘作为热数据缓存,用以加速查询。通过存储计算分离架构,您可以降低存储成本并且优化资源隔离。除此之外,集群的弹性扩展能力也得以加强。在查询命中缓存的情况下,存算分离集群的查询性能与存算一体集群性能一致。
在 v3.1 版本及更高版本中,StarRocks 存算分离集群由 FE 和 CN 组成。CN 取代了存算一体集群中的 BE。
相对存算一体架构,StarRocks 的存储计算分离架构提供以下优势:
- 廉价且可无缝扩展的存储。
- 弹性可扩展的计算能力。由于数据不存储在 CN 节点中,因此集群无需进行跨节点数据迁移或 Shuffle 即可完成扩缩容。
- 热数据的本地磁盘缓存,用以提高查询性能。
- 可选异步导入数据至对象存储,提高导入效率。
系统架构
部署 StarRocks 存算分离集群
StarRocks 存算分离集群的部署方式与存算一体集群的部署方式类似,但存算分离集群需要部署 CN 节点而非 BE 节点。本小节仅列出部署 StarRocks 存算分离集群时需要添加到 FE 和 CN 配置文件 fe.conf 和 cn.conf 中的额外配置项。有关部署 StarRocks 集群的详细说明,请参阅 部署 StarRocks。
注意
请勿在配置完成前启动集群。
存算分离部署 FE 配置
FE 配置示例
不同认证方式需要配置不同 FE 参数。请根据业务需求参考以下各小节的示例。
如果您想在集群创建后手动创建默认存储卷,则只需添加以下配置项:
run_mode = shared_data
cloud_native_meta_port = <meta_port>
enable_load_volume_from_conf = false
默认认证方式
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例如 testbucket/subpath
aws_s3_path = <s3_path>
# 例如 us-west-2
aws_s3_region = <region>
# 例如 https://s3.us-west-2.amazonaws.com
aws_s3_endpoint = <endpoint_url>
aws_s3_use_aws_sdk_default_behavior = true
IAM User 认证方式
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例如 testbucket/subpath
aws_s3_path = <s3_path>
# 例如 us-west-2
aws_s3_region = <region>
aws_s3_access_key = <access_key>
aws_s3_secret_key = <secret_key>
Instance Profile 认证方式
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例如 testbucket/subpath
aws_s3_path = <s3_path>
# 例如 us-west-2
aws_s3_region = <region>
# 例如 https://s3.us-west-2.amazonaws.com
aws_s3_endpoint = <endpoint_url>
aws_s3_use_instance_profile = true
请确保您为集群中的 FE 和 CN 节点都授 予了访问权限。FE 节点无法将其访问权限下放授予 CN 节点。
Assumed Role 认证方式
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例如 testbucket/subpath
aws_s3_path = <s3_path>
# 例如 us-west-2
aws_s3_region = <region>
# 例如 https://s3.us-west-2.amazonaws.com
aws_s3_endpoint = <endpoint_url>
aws_s3_use_instance_profile = true
aws_s3_iam_role_arn = <role_arn>
请确保您为集群中的 FE 和 CN 节点都授予了访问权限。FE 节点无法将其访问权限下放授予 CN 节点。
外部账户 Assumed Role 认证
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例如 testbucket/subpath
aws_s3_path = <s3_path>
# 例如 us-west-2
aws_s3_region = <region>
# 例如 https://s3.us-west-2.amazonaws.com
aws_s3_endpoint = <endpoint_url>
aws_s3_use_instance_profile = true
aws_s3_iam_role_arn = <role_arn>
aws_s3_external_id = <external_id>
请确保您为 集群中的 FE 和 CN 节点都授予了访问权限。FE 节点无法将其访问权限下放授予 CN 节点。
FE 配置说明
run_mode
StarRocks 集群的运行模式。有效值:
shared_data
:在存算分离模式下运行 StarRocks。shared_nothing
(默认):在存算一体模式下运行 StarRocks。
说明
- StarRocks 集群不支持存算分离和存算一体模式混合部署。
- 请勿在集群部署完成后更改
run_mode
,否则将导致集群无法再次启动。不支持从存算一体集群转换为存算分离集群,反之亦然。
cloud_native_meta_port
云原生元数据服务监听端口。
- 默认值:
6090
enable_load_volume_from_conf
是否允许 StarRocks 使用 FE 配置文件中指定的存储相关属性创建默认存储卷。自 v3.1.0 起支持。有效值:
true
(默认):如果您在创建新的存算分离集群时指定此项为true
,StarRocks 将使 用 FE 配置文件中存储相关属性创建内置存储卷builtin_storage_volume
,并将其设置为默认存储卷。但如果您没有指定存储相关的属性,StarRocks 将无法启动。false
:如果您在创建新的存算分离集群时指定此项为false
,StarRocks 将直接启动,不会创建内置存储卷。在 StarRocks 中创建任何对象之前,您必须手动创建一个存储卷并将其设置为默认存储卷。详细信息请参见创建默认存储卷。
注意
建议您在升级现有的 v3.0 存算分离集群时,保留此项的默认配置
true
。如果将此项修改为false
,升级前创建的数据库和表将变为只读,您无法向其中导入数据。
cloud_native_storage_type
您使用的存储类型。在存算分离模式下,StarRocks 支持将数据存储在 HDFS、Azure Blob(自 v3.1.1 起支持)、以及兼容 S3 协议的对象存储中(例如 AWS S3、Google GCP、阿里云 OSS 以及 MinIO)。有效值:
S3
(默认值)AZBLOB
HDFS
说明
- 如果您将此项指定为
S3
,则必须添加以aws_s3
为前缀的配置项。- 如果您将此项指定为
AZBLOB
,则必须添加以azure_blob
为前缀的配置项。- 如果将此项指定为
HDFS
,则只需指定cloud_native_hdfs_url
。
aws_s3_path
用于存储数据的 S3 存储空间路径,由 S3 存储桶的名称及其下的子路径(如有)组成,如 testbucket/subpath
。
aws_s3_endpoint
访问 S3 存储空间的连接地址,如 https://s3.us-west-2.amazonaws.com
。
aws_s3_region
需访问的 S3 存储空间的地区,如 us-west-2
。
aws_s3_use_aws_sdk_default_behavior
是否使用 AWS SDK 默认的认证凭证。有效值:
true
false
(默认)
aws_s3_use_instance_profile
是否使用 Instance Profile 或 Assumed Role 作为安全凭证访问 S3。有效值:
true
false
(默认)
如果您使用 IAM 用户凭证(Access Key 和 Secret Key)访问 S3,则需要将此项设为 false
,并指定 aws_s3_access_key
和 aws_s3_secret_key
。
如果您使用 Instance Profile 访问 S3,则需要将此项设为 true
。
如果您使用 Assumed Role 访问 S3,则需要将此项设为 true
,并指定 aws_s3_iam_role_arn
。
如果您使用外部 AWS 账户通过 Assumed Role 认证访问 S3,则需要额外指定 aws_s3_external_id
。
aws_s3_access_key
访问 S3 存储空间的 Access Key。
aws_s3_secret_key
访问 S3 存储空间的 Secret Key。
aws_s3_iam_role_arn
有访问 S3 存储空间权限 IAM Role 的 ARN。
aws_s3_external_id
用于跨 AWS 账户访问 S3 存储空间的外部 ID。
注意
成功创建存算分离集群后,您只能修改与安全凭证相关的配置项。如果您更改了原有存储路径相关的配置项,则在此之前创建的数据库和表将变为只读,您无法向其中导入数据。