本文档中,创建存算分离集群指的是在存算分离模式下,创建由多个 Doris 节点组成的分布式系统,包含 FE 和 BE 节点。随后,在存算分离模式的 Doris 集群下可创建计算集群,即创建由一个或多个 BE 节点组成的计算资源组。

一套 FoundationDB + Meta Service + Recycler 基础环境可以支撑多个存算分离集群,一个存算分离集群又称为一个数仓实例(Instance)。

存算分离架构下,数仓实例的节点构成信息由 Meta Service 维护(注册 + 变更)。FE、BE 和 Meta Service 交互以实现服务发现和身份验证。

创建存算分离集群主要涉及与 Meta Service 的交互,Meta Service 提供了标准的 HTTP 接口进行资源管理操作。

Doris 存算分离模式采用服务发现的机制进行工作,创建存算分离集群可以归纳为以下步骤:

  1. 注册声明数仓实例以及它的存储后端。
  2. 注册声明数仓实例中的 FE 和 BE 节点组成,分别包含哪些机器,以及如何组成集群。
  3. 配置并启动所有的 FE 和 BE 节点。

创建集群 - 图1备注

  1. 本文后续示例中提及的 127.0.0.1:5000 指的是 Meta Service 的地址,实际操作时请替换为真实的 Meta Service IP 地址和 bRPC 监听端口。
  2. 请结合实际需求修改本文档中的示例。

创建存算分离集群及其存储后端

这一步骤的主要目的是在 Meta Service 注册一个存算分离模式的 Doris 数仓实例(一套 Meta Service 可支持多个不同的 Doris 数仓实例(即多套 FE-BE), 包括描述该数仓实例所需的存储后端(Storage Vault,即概览中所提及的共享存储层), 可以选择 HDFS 或者 S3(包括支持 S3 协议的对象存储,如 AWS S3、GCS、Azure Blob、阿里云 OSS 以及 MinIO、Ceph 等)。 存储后端是 Doris 在存算分离模式中所使用的远程共享存储,可配置一个或多个存储后端,可将不同表存储在不同存储后端上。

此步骤需要调用 Meta Service 的 create_instance 接口,主要参数包括:

  • instance_id:存算分离架构下数仓实例的 ID,一般使用 UUID 字符串,需要匹配模式[0-9a-zA-Z_-]+,例如 6ADDF03D-4C71-4F43-9D84-5FC89B3514F8。本文档中为了简化使用普通字符串。
  • name:数仓实例名称,根据实际需求填写。要求匹配模式 [a-zA-Z][0-9a-zA-Z_]+,一般填写业务名称。
  • user_id:创建数仓实例的用户 ID,要求匹配模式 [a-zA-Z][0-9a-zA-Z_]+,用于标识创建人,按需填写。
  • vault:HDFS 或者 S3 的存储后端信息,如 HDFS 属性、S3 Bucket 信息等。不同后端的详细参数不同。

更多信息请参考 Meta Service API 参考文档 “创建存储后端的 Instance” 章节。

通过多次调用 Meta Service create_instance 接口可以创建多个不同的存算分离集群(即数仓实例/instance)。

创建基于 HDFS 的存算分离模式 Doris 集群

创建基于 HDFS 的存算分离模式 Doris 集群,需要正确描述所有信息,并保证所有的节点(包括 FE / BE 节点、Meta Service 和 Recycler) 均有权限访问所指定的 HDFS,包括提前完成机器的 Kerberos 授权配置和连通性检查(可在对应的每个节点上使用 Hadoop Client 进行测试)等。

参数名描述是否必须备注
instanceidinstance_id全局唯一(包括历史上),一般使用一个 UUID 字符串
nameInstance 别名, 要求匹配模式 [a-zA-Z][0-9a-zA-Z]+
userid创建 Instance 的用户 ID 要求匹配模式 [a-zA-Z][0-9a-zA-Z]+
vaultStorage Vault 的信息
vault.hdfs_info描述 HDFS 存储后端的信息
vault.build_conf描述 HDFS 存储后端主要信息
vault.build_conf.fs_nameHDFS 的名称,一般为连接的地址
vault.build_conf.user连接该 HDFS 使用的 User
vault.build_conf.hdfs_kerberos_keytabKerberos Keytab 的路径使用 Kerberos 鉴权时需要提供
vault.build_conf.hdfs_kerberos_principalKerberos Principal 的信息使用 Kerberos 鉴权时需要提供
vault.build_conf.hdfs_confsHDFS 的其他描述属性按需填写
vault.prefix数据存放的路径前缀,用于数据隔离一般按照业务名称 例:big_data

示例

  1. curl -s "127.0.0.1:5000/MetaService/http/create_instance?token=greedisgood9999" -d \
  2. '{
  3. "instance_id": "sample_instance_id",
  4. "name": "sample_instance_name",
  5. "user_id": "sample_user_id",
  6. "vault": {
  7. "hdfs_info" : {
  8. "build_conf": {
  9. "fs_name": "hdfs://172.21.0.44:4007",
  10. "user": "hadoop",
  11. "hdfs_kerberos_keytab": "/etc/emr.keytab",
  12. "hdfs_kerberos_principal": "hadoop/172.30.0.178@EMR-XXXYYY",
  13. "hdfs_confs" : [
  14. {
  15. "key": "hadoop.security.authentication",
  16. "value": "kerberos"
  17. }
  18. ]
  19. },
  20. "prefix": "sample_prefix"
  21. }
  22. }
  23. }'

创建基于 S3 的存算分离模式 Doris 集群

基于对象存储的所有属性均为必填项,其中:

  • 使用 MinIO 等支持 S3 协议的对象存储时,需要自行测试连通性以及 AK / SK 的正确性。具体做法可参考使用 AWS CLI 验证 MinIO 是否工作
  • Bucket 字段的值为 Bucket 名称,不包含 s3:// 等 schema。
  • external_endpoint 保持与 endpoint 值相同即可。
  • 如果使用非云厂商对象存储,region 和 provider 可填写任意值。
参数名描述是否必须备注
instanceid存算分离架构下数仓实例的 ID,一般使用 UUID 字符串,需要匹配模式[0-9a-zA-Z-]+例如 6ADDF03D-4C71-4F43-9D84-5FC89B3514F8
nameInstance 别名, 要求匹配模式 [a-zA-Z][0-9a-zA-Z]+
user_id创建 Instance 的用户 ID 要求匹配模式 [a-zA-Z][0-9a-zA-Z]+
vault.obj_info对象存储配置信息
vault.obj_info.ak对象存储的 Access Key
vault.obj_info.sk对象存储的 Secret Key
vault.obj_info.bucket对象存储的 Bucket 名
vault.obj_info.prefix对象存储上数据存放位置前缀若不填写该参数,则默认存放位置在 Bucket 的根目录,例:big_data
obj_info.endpoint对象存储的 Endpoint 信息值为 域名或 IP:端口,不包含 http:// 等 scheme 前缀
obj_info.region对象存储的 Region 信息若使用 MinIO,该参数可填任意值
obj_info.external_endpoint对象存储的 External Endpoint 信息一般与 Endpoint 一致即可,兼容 OSS,注意 OSS 有 External 和 Internal 之分
vault.obj_info.provider对象存储的 Provider 信息,可选值包括:OSS, S3, COS, OBS, BOS, GCP, AZURE若使用 MinIO,直接填 S3 即可

示例(腾讯云 COS)

  1. curl -s "127.0.0.1:5000/MetaService/http/create_instance?token=greedisgood9999" -d \
  2. '{
  3. "instance_id": "sample_instance_id",
  4. "name": "sample_instance_name",
  5. "user_id": "sample_user_id",
  6. "vault": {
  7. "obj_info": {
  8. "ak": "ak_xxxxxxxxxxx",
  9. "sk": "sk_xxxxxxxxxxx",
  10. "bucket": "sample_bucket_name",
  11. "prefix": "sample_prefix",
  12. "endpoint": "cos.ap-beijing.myqcloud.com",
  13. "external_endpoint": "cos.ap-beijing.myqcloud.com",
  14. "region": "ap-beijing",
  15. "provider": "COS"
  16. }
  17. }
  18. }'

示例(AWS S3)

  1. curl -s "127.0.0.1:5000/MetaService/http/create_instance?token=greedisgood9999" -d \
  2. '{
  3. "instance_id": "sample_instance_id",
  4. "name": "sample_instance_name",
  5. "user_id": "sample_user_id",
  6. "vault": {
  7. "obj_info": {
  8. "ak": "ak_xxxxxxxxxxx",
  9. "sk": "sk_xxxxxxxxxxx",
  10. "bucket": "sample_bucket_name",
  11. "prefix": "sample_prefix",
  12. "endpoint": "s3.amazonaws.com",
  13. "external_endpoint": "s3.amazonaws.com",
  14. "region": "us-east1",
  15. "provider": "AWS"
  16. }
  17. }
  18. }'

操作存储后端

用户可配置一个或多个存储后端,或将不同表存储在不同存储后端上。

名词解释

  • vault name:每个存储后端的名称为数仓实例内全局唯一,除 built-in vault 外,vault name 由用户创建存储后端时指定。
  • built-in vault:存算分离模式下,用于存储 Doris 系统表的远程共享存储。须在创建数仓实例时配置。built-in vault 的固定名称为 built_in_storage_vault。配置 built-in vault后,数仓实例(FE)才能启动。
  • default vault:数仓实例级别的默认存储后端,用户可以指定某个存储后端为默认存储后端,包括 built-in vault 也可作为默认存储后端。由于存算分离模式中,数据必须要存储在某个远程共享存储上,因此如果用户建表时未在 PROPERTIES 中指定 vault_name,该表数据会存储在 default vault 上。default vault 可被重新设置,但是已经创建的表所使用的存储后端不会随之改变。

配置 built-in vault 后,还可按需创建更多存储后端。FE 启动成功后,可通过 SQL 语句进行存储后端操作,包括创建存储后端,查看存储后端以及指定存储后端进行建表等。

创建存储后端

语法

  1. CREATE STORAGE VAULT [IF NOT EXISTS] <vault_name>
  2. PROPERTIES
  3. ("key" = "value",...)

<vault_name> 是用户定义的存储后端名称,是用户接口用于访问存储后端的标识。

示例

创建 HDFS 存储后端

  1. CREATE STORAGE VAULT IF NOT EXISTS ssb_hdfs_vault
  2. PROPERTIES (
  3. "type"="hdfs", -- required
  4. "fs.defaultFS"="hdfs://127.0.0.1:8020", -- required
  5. "path_prefix"="big/data", -- optional, 一般按照业务名称填写
  6. "hadoop.username"="user" -- optional
  7. "hadoop.security.authentication"="kerberos" -- optional
  8. "hadoop.kerberos.principal"="hadoop/127.0.0.1@XXX" -- optional
  9. "hadoop.kerberos.keytab"="/etc/emr.keytab" -- optional
  10. );

创建 S3 存储后端

  1. CREATE STORAGE VAULT IF NOT EXISTS ssb_s3_vault
  2. PROPERTIES (
  3. "type"="S3", -- required
  4. "s3.endpoint" = "oss-cn-beijing.aliyuncs.com", -- required
  5. "s3.external_endpoint" = "oss-cn-beijing.aliyuncs.com", -- required
  6. "s3.bucket" = "sample_bucket_name", -- required
  7. "s3.region" = "bj", -- required
  8. "s3.root.path" = "big/data/prefix", -- required
  9. "s3.access_key" = "ak", -- required
  10. "s3.secret_key" = "sk", -- required
  11. "provider" = "cos", -- required
  12. );

创建集群 - 图2备注

新创建的存储后端对 BE 集群不一定实时可见,短时间(< 1min)内向使用新创建存储后端的表导入数据发生报错是正常现象。

Properties 参数

参数说明是否必须示例
type目前支持 S3 和 HDFSs3hdfs
fs.defaultFSHDFS Vault 参数hdfs://127.0.0.1:8020
path_prefixHDFS Vault 参数,数据存储的路径前缀,一般按照业务名称区分big/data/dir
hadoop.usernameHDFS Vault 参数hadoop
hadoop.security.authenticationHDFS Vault 参数kerberos
hadoop.kerberos.principalHDFS Vault 参数hadoop/127.0.0.1@XXX
hadoop.kerberos.keytabHDFS Vault 参数/etc/emr.keytab
dfs.client.socket-timeoutHDFS Vault 参数,单位毫秒60000
s3.endpiontS3 Vault 参数oss-cn-beijing.aliyuncs.com
s3.external_endpointS3 vault 参数oss-cn-beijing.aliyuncs.com
s3.bucketS3 vault 参数sample_bucket_name
s3.regionS3 Vault 参数bj
s3.root.pathS3 Vault 参数,实际存储数据的路径前缀/big/data/prefix
s3.access_keyS3 Vault 参数
s3.secret_keyS3 Vault 参数
providerS3 Vault 参数,目前支持腾讯 COS,阿里 OSS,AWS S3,微软 AZURE,百度 BOS,华为 OBS,谷歌 GCP;若使用 MinIO,直接填写 S3 即可cos

查看存储后端

语法

  1. SHOW STORAGE VAULT

返回结果包含 4 列,分别为存储后端名称、存储后端 ID、属性以及是否为默认存储后端。

示例

  1. mysql> show storage vault;
  2. +------------------------+----------------+-------------------------------------------------------------------------------------------------------------+-----------+
  3. | StorageVaultName | StorageVaultId | Propeties | IsDefault |
  4. +------------------------+----------------+-------------------------------------------------------------------------------------------------------------+-----------+
  5. | built_in_storage_vault | 1 | build_conf { fs_name: "hdfs://127.0.0.1:8020" } prefix: "_1CF80628-16CF-0A46-54EE-2C4A54AB1519" | false |
  6. | hdfs_vault | 2 | build_conf { fs_name: "hdfs://127.0.0.1:8020" } prefix: "big/data/dir_0717D76E-FF5E-27C8-D9E3-6162BC913D97" | false |
  7. +------------------------+----------------+-------------------------------------------------------------------------------------------------------------+-----------+

设置默认存储后端

语法

  1. SET <vault_name> AS DEFAULT STORAGE VAULT

建表时指定存储后端

建表时在 PROPERTIES 中指定 storage_vault_name,则数据会存储在指定 vault name 所对应的存储后端上。建表成功后,该表不允许再修改 storage_vault,即不支持更换存储后端。

示例

  1. CREATE TABLE IF NOT EXISTS supplier (
  2. s_suppkey int(11) NOT NULL COMMENT "",
  3. s_name varchar(26) NOT NULL COMMENT "",
  4. s_address varchar(26) NOT NULL COMMENT "",
  5. s_city varchar(11) NOT NULL COMMENT "",
  6. s_nation varchar(16) NOT NULL COMMENT "",
  7. s_region varchar(13) NOT NULL COMMENT "",
  8. s_phone varchar(16) NOT NULL COMMENT ""
  9. )
  10. UNIQUE KEY (s_suppkey)
  11. DISTRIBUTED BY HASH(s_suppkey) BUCKETS 1
  12. PROPERTIES (
  13. "replication_num" = "1",
  14. "storage_vault_name" = "ssb_hdfs_vault"
  15. );

内置存储后端

用户在创建实例时,可以选择 Vault Mode 或非 Vault Mode,如果选择 Vault Mode,所传入的 Vault 会被设置为 built-in storage vaultbuilt-in storage vault 用于保存内部表信息(如统计信息表),在 Vault 模式下,如果未创建 built-in storage vault,FE 将无法正常启动。

用户也可以选择将自己的新表数据存储在 built-in storage vault 之上,可以通过将 built-in storage vault 设置为 default storage vault 或者在建表时将表的 storage_vault_name 属性设置为 built-in storage vault 实现。

更改存储后端

用于更新 Storage Vault 配置的可修改属性。

Coming soon

删除存储后端

只有非默认存储后端且没有被任何表引用的存储后端才可被删除。

Coming soon

存储后端权限

向指定的 MySQL 用户授予某个存储后端的使用权限,使该用户可以进行建表时指定该存储后端或查看存储后端等操作。

语法

  1. GRANT
  2. USAGE_PRIV
  3. ON STORAGE VAULT <vault_name>
  4. TO { ROLE | USER } {<role> | <user>}

仅 Admin 用户有权限执行 GRANT 语句,该语句用于向 User / Role 授予指定存储后端的权限。拥有某个存储后端的 USAGE_PRIV 权限的 User / Role 可进行以下操作:

  • 通过 SHOW STORAGE VAULT 查看该存储后端的信息;
  • 建表时在 PROPERTIES 中指定使用该存储后端。

示例

  1. grant usage_priv on storage vault my_storage_vault to user1

撤销指定的 MySQL 用户的存储后端权限。

语法

  1. REVOKE
  2. USAGE_PRIV
  3. ON STORAGE VAULT <vault_name>
  4. FROM { ROLE | USER } {<role> | <user>}

仅 Admin 用户有权限执行 REVOKE 语句,用于撤销 User / Role 拥有的对指定存储后端的权限。

示例

  1. revoke usage_priv on storage vault my_storage_vault from user1

添加 FE

存算分离模式下,FE 以及 BE 的节点管理使用的接口相同,仅参数配置不同, 可通过 Meta Service add_cluster 接口进行 FE 以及 BE 的初始节点添加。

add_cluster 接口的参数列表如下:

参数名描述是否必须备注
instanceidinstanceid,存算分离架构下数仓实例的 ID,一般使用 UUID 字符串,需要匹配模式[0-9a-zA-Z</em>-]+全局唯一(包括历史上,每次调用此接口使用不一样的值)
clusterCluster 对象
cluster.cluster_nameCluster 名称,需要匹配模式 [a-zA-Z][0-9a-zA-Z]+其中 FE 的 Cluster 名称特殊,默认为 RESERVED_CLUSTER_NAME_FOR_SQL_SERVER,可在 fe.conf 中配置 cloud_observer_cluster_name 修改
cluster.cluster_idCluster 的 ID其中 FE 的 Cluster ID 特殊,默认为 RESERVED_CLUSTER_ID_FOR_SQL_SERVER,可在 fe.conf 中配置 cloud_observer_cluster_id 修改
cluster.typeCluster 中节点的类型支持:”SQL”,”COMPUTE” 两种 Type,”SQL”表示 SQL Service 对应 FE, “COMPUTE”表示计算机节点对应 BE
cluster.nodesCluster 中的节点数组
cluster.nodes.cloud_unique_id节点的 cloudunique_id, 格式为 1:<instance_id>:<string>, 其中string要求匹配模式 [0-9a-zA-Z</em>-]+ 每个节点选用不同的值fe.conf、be.conf 中的 cloud_unique_id 配置项
cluster.nodes.ip节点的 IP使用 FQDN 模式部署 FE/BE 时,该字段填写域名
cluster.nodes.host节点的域名使用 FQDN 模式部署 FE/BE 时,需设置该字段
cluster.nodes.heartbeat_portBE 的 Heartbeat PortBE 必填be.conf 中的 heartbeat_service_port 配置项
cluster.nodes.edit_log_portFE 节点的 Edit Log PortFE 必填是 fe.conf 中的 edit_log_port 配置项
cluster.nodes.node_typeFE 节点的类型FE 必填当 Cluster 的 Type 为 SQL 时,需要填写,分为”FE_MASTER” 和 “FE_OBSERVER”,其中 “FE_MASTER” 表示此节点为 Master, “FE_OBSERVER” 表示此节点为 Observer,注意:一个 Type 为 “SQL” 的 Cluster 的 Nodes 数组中只能有一个 “FE_MASTER” 节点,和若干 “FE_OBSERVER” 节点

以下为添加一个 FE 的示例:

  1. # 添加 FE
  2. curl '127.0.0.1:5000/MetaService/http/add_cluster?token=greedisgood9999' -d '{
  3. "instance_id":"sample_instance_id",
  4. "cluster":{
  5. "type":"SQL",
  6. "cluster_name":"RESERVED_CLUSTER_NAME_FOR_SQL_SERVER",
  7. "cluster_id":"RESERVED_CLUSTER_ID_FOR_SQL_SERVER",
  8. "nodes":[
  9. {
  10. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_sql_server00",
  11. "ip":"172.21.16.21",
  12. "edit_log_port":12103,
  13. "node_type":"FE_MASTER"
  14. }
  15. ]
  16. }
  17. }'
  18. # 创建成功后,可以通过 get_cluster 返回值 进行确认
  19. curl '127.0.0.1:5000/MetaService/http/get_cluster?token=greedisgood9999' -d '{
  20. "instance_id":"sample_instance_id",
  21. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_sql_server00",
  22. "cluster_name":"RESERVED_CLUSTER_NAME_FOR_SQL_SERVER",
  23. "cluster_id":"RESERVED_CLUSTER_ID_FOR_SQL_SERVER"
  24. }'

上述接口中如果需在初始操作即添加 2 个 FE,可在 nodes 数组增加一个声明节点。 如下为增加一个 observer 的例子:

  1. ...
  2. "nodes":[
  3. {
  4. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_sql_server00",
  5. "ip":"172.21.16.21",
  6. "edit_log_port":12103,
  7. "node_type":"FE_MASTER"
  8. },
  9. {
  10. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_sql_server00",
  11. "ip":"172.21.16.22",
  12. "edit_log_port":12103,
  13. "node_type":"FE_OBSERVER"
  14. }
  15. ]
  16. ...

如果需要增加或者减少 FE 节点,可以参考后续 “计算集群操作” 章节。

创建计算集群

用户可创建一个或多个计算集群,一个计算集群由任意多个 BE 节点组成。 创建计算集群操作也可通过 Meta Service add_cluter 接口进行。

接口描述详见前文 “添加 FE” 章节。

用户可根据实际需求调整计算集群的数量及其所包含的节点数量,不同的计算集群需要使用不同的 cluster_namecluster_id

如下是创建包含 1 个 BE 的 计算集群:

  1. # 172.19.0.11
  2. # 添加 BE
  3. curl '127.0.0.1:5000/MetaService/http/add_cluster?token=greedisgood9999' -d '{
  4. "instance_id":"sample_instance_id",
  5. "cluster":{
  6. "type":"COMPUTE",
  7. "cluster_name":"cluster_name0",
  8. "cluster_id":"cluster_id0",
  9. "nodes":[
  10. {
  11. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_compute_node0",
  12. "ip":"172.21.16.21",
  13. "heartbeat_port":9455
  14. }
  15. ]
  16. }
  17. }'
  18. # 创建成功后,通过 get_cluster 进行确认
  19. curl '127.0.0.1:5000/MetaService/http/get_cluster?token=greedisgood9999' -d '{
  20. "instance_id":"sample_instance_id",
  21. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_compute_node0",
  22. "cluster_name":"cluster_name0",
  23. "cluster_id":"cluster_id0"
  24. }'

上述接口中如果需在初始操作就添加 2 个 BE,可在 nodes 数组增加一个声明节点。 如下为声明一个包含 2 个 BE 的计算集群的例子:

  1. ...
  2. "nodes":[
  3. {
  4. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_compute_node0",
  5. "ip":"172.21.16.21",
  6. "heartbeat_port":9455
  7. },
  8. {
  9. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_compute_node0",
  10. "ip":"172.21.16.22",
  11. "heartbeat_port":9455
  12. }
  13. ]
  14. ...

如果需要增加或减少 BE 节点,可以参考后续 “计算集群操作” 章节。 如果需要继续增加计算集群,重复本章节操作即可。

FE/BE 配置

相较于存算一体模式,存算分离模式下的 FE 和 BE 增加了部分配置,其中:

  • meta_service_endpoint:Meta Service 的地址,需在 FE 和 BE 中填写。
  • cloud_unique_id:根据创建存算分离集群发往 Meta Service add_cluster 请求中的实际值填写即可;Doris 通过该配置的值确定是否在存算分离模式下工作。

fe.conf

  1. meta_service_endpoint = 127.0.0.1:5000
  2. cloud_unique_id = 1:sample_instance_id:cloud_unique_id_sql_server00

be.conf

下述示例中, meta_service_use_load_balancerenable_file_cache 均可复制,其他配置项需根据实际情况填写。

file_cache_path 是一个 JSON 数组(根据实际缓存盘的个数配置),其各个字段含义如下:

  • path:缓存数据存放路径,类似于存算一体模式下的 storage_root_path
  • total_size:期望使用的缓存空间上限
  • query_limit:单个查询在缓存未命中时最多可淘汰的缓存数据量(为了防止大查询将缓存全部淘汰);因缓存需要存放数据,所以最好使用 SSD 等高性能磁盘作为缓存存储介质。
  1. meta_service_endpoint = 127.0.0.1:5000
  2. cloud_unique_id = 1:sample_instance_id:cloud_unique_id_compute_node0
  3. meta_service_use_load_balancer = false
  4. enable_file_cache = true
  5. file_cache_path = [{"path":"/mnt/disk1/doris_cloud/file_cache","total_size":104857600000,"query_limit":10485760000}, {"path":"/mnt/disk2/doris_cloud/file_cache","total_size":104857600000,"query_limit":10485760000}]

启停 FE/BE

Doris 存算分离模式下,FE/BE 启停方式和存算一体模式下的启停方式一致。 存算分离模式属于服务发现的模式,不需通过 alter system add/drop frontend/backend 等命令操作节点。

  1. bin/start_be.sh --daemon
  2. bin/stop_be.sh
  3. bin/start_fe.sh --daemon
  4. bin/stop_fe.sh

启动后观察日志,如果上述配置均正确,则说明已进入正常工作模式,可通过 MySQL 客户端连接 FE 进行访问。

计算集群操作

加减 FE/BE 节点

加减节点的操作和与创建计算集群的步骤类似,即向 Meta Service 声明需要增加的节点,然后启动对应的节点即可(请注意确保新增节点的配置正确),不需要使用 alter system add / drop 语句进行额外操作。

存算分离模式下,可以同时增加/减少若干个节点,然而,建议实际操作时每次只操作一个节点。

示例

为计算集群 cluster_name0 增加两个 BE 节点。

  1. curl '127.0.0.1:5000/MetaService/http/add_node?token=greedisgood9999' -d '{
  2. "instance_id":"sample_instance_id",
  3. "cluster":{
  4. "type":"COMPUTE",
  5. "cluster_name":"cluster_name0",
  6. "cluster_id":"cluster_id0",
  7. "nodes":[
  8. {
  9. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_compute_node1",
  10. "ip":"172.21.16.22",
  11. "heartbeat_port":9455
  12. },
  13. {
  14. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_compute_node2",
  15. "ip":"172.21.16.23",
  16. "heartbeat_port":9455
  17. }
  18. ]
  19. }
  20. }'

为计算集群 cluster_name0 减少两个 BE 节点

  1. curl '127.0.0.1:5000/MetaService/http/drop_node?token=greedisgood9999' -d '{
  2. "instance_id":"sample_instance_id",
  3. "cluster":{
  4. "type":"COMPUTE",
  5. "cluster_name":"cluster_name0",
  6. "cluster_id":"cluster_id0",
  7. "nodes":[
  8. {
  9. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_compute_node1",
  10. "ip":"172.21.16.22",
  11. "heartbeat_port":9455
  12. },
  13. {
  14. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_compute_node2",
  15. "ip":"172.21.16.23",
  16. "heartbeat_port":9455
  17. }
  18. ]
  19. }
  20. }'

增加一个 FE Observer,以下示例中,node_typeFE_OBSERVER

目前尚不支持添加 FE Follower 角色。

  1. curl '127.0.0.1:5000/MetaService/http/add_node?token=greedisgood9999' -d '{
  2. "instance_id":"sample_instance_id",
  3. "cluster":{
  4. "type":"SQL",
  5. "cluster_name":"RESERVED_CLUSTER_NAME_FOR_SQL_SERVER",
  6. "cluster_id":"RESERVED_CLUSTER_ID_FOR_SQL_SERVER",
  7. "nodes":[
  8. {
  9. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_sql_server00",
  10. "ip":"172.21.16.22",
  11. "edit_log_port":12103,
  12. "node_type":"FE_OBSERVER"
  13. }
  14. ]
  15. }
  16. }'

删除一个 FE 节点

  1. curl '127.0.0.1:5000/MetaService/http/drop_node?token=greedisgood9999' -d '{
  2. "instance_id":"sample_instance_id",
  3. "cluster":{
  4. "type":"SQL",
  5. "cluster_name":"RESERVED_CLUSTER_NAME_FOR_SQL_SERVER",
  6. "cluster_id":"RESERVED_CLUSTER_ID_FOR_SQL_SERVER",
  7. "nodes":[
  8. {
  9. "cloud_unique_id":"1:sample_instance_id:cloud_unique_id_sql_server00",
  10. "ip":"172.21.16.22",
  11. "edit_log_port":12103,
  12. "node_type":"FE_MASTER"
  13. }
  14. ]
  15. }
  16. }'

加减计算集群

新增一个计算集群,参考前文创建计算集群章节即可。

删除一个计算集群,调用 Meta Service 接口之后,关停响应节点即可。

示例

删除名为 cluster_name0 的计算集群(以下所有参数均为必填项)。

  1. curl '127.0.0.1:5000/MetaService/http/add_cluster?token=greedisgood9999' -d '{
  2. "instance_id":"sample_instance_id",
  3. "cluster":{
  4. "type":"COMPUTE",
  5. "cluster_name":"cluster_name0",
  6. "cluster_id":"cluster_id0"
  7. }
  8. }'