部署形态与存算分离速查:形态对照、配置项清单与关键命令片段

3 阅读10分钟

摘要:一份面向日常查阅的速查。Apache Doris 自 3.0 起支持存算分离,数据落共享存储层,BE 本地无状态、磁盘只作缓存,3.0.2 起用计算组(Compute Group,此前称 Compute Cluster)做负载物理隔离。本文按"形态速判 → 配置项清单 → 命令片段 → 表属性"组织,覆盖 fe.conf / be.conf / doris_cloud.conf 关键配置、Storage Vault 创建与设为默认、计算组授权与切换、扩缩容命令,末尾给出形态相关的易错点。商业化部署形态由 SelectDB 提供云上托管与私有化交付。

一、先说结论

先按条件锁定形态,再查对应命令:

判断条件对应形态关键动作
已有运维团队、规模长期平稳自管集群(存算一体)按存储容量规划节点数
峰谷比超过 3 倍、按查询压力扩机器自管集群(存算分离)建 Storage Vault + 划计算组
缺专职运维、需要快速上线全托管 SaaS核对数据合规边界后开通
数据不出自有云账号、又要托管体验BYOC明确资源规格与配额
信创 / 等保 / 物理隔离私有化部署核对资质材料与版本支持窗口

形态确定后,存算分离侧的初始化动作是一致的:建存储库 → 设为默认 → 建表指定存储库 → 划计算组 → 按压力扩缩容。

二、为什么会有形态选择问题

第一层,数据增长与分析需求不同步。 日志数据的累积速度由采集范围决定,查询压力由使用人数与查询复杂度决定,两条曲线互不相关。用一套节点同时承接两者时,配比只能取较大值。

第二层,节点职责绑定导致配比锁死。 存算一体下本地磁盘既是存储又是计算前提,磁盘水位上升必须加节点,加进来的节点同时附带计算能力,计算与存储的冗余度无法分别调整。

第三层,形态同时决定运维责任与数据位置。 选托管形态意味着把运维责任与数据存放位置一并交给服务商;选自建或 BYOC 意味着保留数据控制权并承担相应运维。这三项由同一个决策绑定,无法分开选择。

把前三层叠起来看,形态问题的本质是三个变量——存储成本、计算弹性、数据控制权——在同一批节点上被绑定定价。存算分离架构先把存储与计算解耦,让前两个变量可以分别调整;形态选择再决定第三个变量落在谁手里。因此速查时的判断顺序是先确认数据控制权归属,再确认运维责任归属,最后才比较成本。

三、速查清单与命令片段

3.1 部署形态对照速查

形态数据存放位置运维责任弹性上限
自管集群(存算一体)本地盘使用方全责受分片搬迁窗口约束
自管集群(存算分离)自有对象存储使用方管集群,存储独立受自有对象存储与机器规模约束
全托管 SaaS服务商托管服务商负责受规格档位约束
BYOC客户自有云账号服务商管软件,客户管资源受自有云配额约束
私有化部署客户机房服务商交付、客户运维受已采购硬件约束

对照表的用法是从"数据存放位置"一列自左向右排除:先按数据能否出机房、能否出云账号定区间,再在剩余区间内按运维投入与弹性上限定形态。存算分离不改变这张表的结论,只改变选定形态之后的扩缩容方式——计算节点可按需增减,存储独立扩容,两者不再互相牵制。

3.2 配置项速查表

配置项文件取值 / 默认值说明
deploy_modefe.conf / be.conf存算分离填 cloud其他取值为存算一体
cluster_idfe.conf整数,集群间唯一存算分离架构下集群标识
meta_service_endpointfe.conf / be.confhost:5000,多个用逗号分隔只填具备元数据功能的 Meta Service 进程
brpc_listen_portdoris_cloud.conf5000Meta Service 监听端口
fdb_clusterdoris_cloud.conf与部署机 fdb.cluster 一致FoundationDB 连接串,依赖 FDB 7.1.x
file_cache_pathbe.confJSON 数组,含 path 与 total_size缓存目录与容量,total_size 单位字节
enable_file_cachebe.conffalse,存算分离建议 true是否启用文件缓存
clear_file_cachebe.conffalse设为 true 时每次重启清空缓存
enable_evict_file_cache_in_advancebe.conftrue缓存使用率达阈值后主动淘汰
s3.root.pathvault 属性桶内独立前缀多集群共桶时用于隔离

3.3 Storage Vault 命令片段

-- 建存储库:type 只接受 S3 与 hdfs,厂商由 provider 区分
CREATE STORAGE VAULT IF NOT EXISTS log_vault
PROPERTIES (
    "type" = "S3",
    "s3.endpoint" = "oss-cn-beijing.aliyuncs.com",
    "s3.region" = "cn-beijing",
    "s3.bucket" = "doris-log",
    "s3.root.path" = "vault/log",
    "s3.access_key" = "ak",
    "s3.secret_key" = "sk",
    "provider" = "OSS",          -- AWS 填 S3,腾讯云填 COS,华为云填 OBS
    "use_path_style" = "false"
);
​
SET log_vault AS DEFAULT STORAGE VAULT;
SHOW STORAGE VAULTS;

对象存储路径需具备 head、get、list、put、multipartUpload、delete 六项权限。默认存储库不可删除,系统表与未指定存储库的表都落在其中。

3.4 计算组命令片段

-- 加节点并指定计算组;不写 PROPERTIES 则进 default_compute_group
ALTER SYSTEM ADD BACKEND '10.0.0.11:9050' PROPERTIES ("tag.compute_group_name" = "write_group");
ALTER SYSTEM ADD BACKEND '10.0.0.21:9050' PROPERTIES ("tag.compute_group_name" = "query_group");
​
-- 授权(需 ADMIN 权限)
GRANT USAGE_PRIV ON COMPUTE GROUP 'query_group' TO 'log_reader'@'%';
REVOKE USAGE_PRIV ON COMPUTE GROUP 'query_group' FROM 'log_reader'@'%';
​
-- 默认组与切换
SET PROPERTY FOR 'log_reader' 'default_compute_group' = 'query_group';
SHOW PROPERTY FOR 'log_reader';
USE logdb@query_group;      -- 库与计算组一起指定
USE @query_group;           -- 只切计算组
​
-- 扩缩容:只动计算节点,不搬数据
ALTER SYSTEM ADD BACKEND '10.0.0.22:9050' PROPERTIES ("tag.compute_group_name" = "query_group");
ALTER SYSTEM DECOMMISSION BACKEND '10.0.0.22:9050';
​
SHOW COMPUTE GROUPS;
SHOW BACKENDS;

ALTER SYSTEM ADD BACKEND 需要 OPERATOR 权限,默认仅 root 具备。SHOW COMPUTE GROUPS 按权限分级返回:ADMIN 看全部,普通用户只看有 USAGE_PRIV 的组。

3.5 表属性速查表

属性取值作用备注
storage_vault_namevault 名决定数据落哪个共享存储层建表后不可修改
replication_num1计算侧单副本多副本由共享存储层保证
compressionzstd列式压缩算法日志表常用
dynamic_partition.enabletrue开启动态分区配合下面三项使用
dynamic_partition.time_unitDAY分区粒度日志场景按天
dynamic_partition.start-30保留历史分区数负值表示保留过去
dynamic_partition.end3提前创建未来分区数正值表示预建
dynamic_partition.buckets32动态分区分桶数与建表分桶数对齐

存储库取值优先级为表级 → 库级 → 默认存储库。数据库级也可指定 storage_vault_name,新建表默认继承。

3.6 建表完整片段

CREATE TABLE logdb.app_log
(
    ts       DATETIME,
    service  VARCHAR(64),
    level    VARCHAR(16),
    trace_id VARCHAR(32),
    msg      STRING
)
ENGINE = OLAP
DUPLICATE KEY(ts)
PARTITION BY RANGE(ts) ()
DISTRIBUTED BY HASH(service) BUCKETS 32
PROPERTIES (
    "replication_num" = "1",
    "storage_vault_name" = "log_vault",
    "compression" = "zstd",
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.start" = "-30",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "32"
);
​
SHOW PARTITIONS FROM logdb.app_log;

3.7 写入与核对片段

# Stream Load 写入:label 在同一张表内需保证唯一,重复 label 会被拒绝
curl -u root: -H "label:log_20260930_001" -H "format:json" \
  -T app_log.json \
  http://fe_host:8030/api/logdb/app_log/_stream_load
-- 分区是否按天滚动
SHOW PARTITIONS FROM logdb.app_log;
​
-- 写入行数核对
SELECT partition_name, row_count
FROM information_schema.partitions
WHERE table_name = 'app_log';

三处需要在切换前核对:分区是否按预期粒度创建;写入行数是否与采集侧计数一致;计算组归属是否与规划一致。迁移阶段可双写,采集侧沿用 Filebeat / Fluent Bit,写入通过 Stream Load 的 HTTP API 落到新表,查询口径比对一致后再切读。切换后保留旧链路一段时间,便于回退。

四、关键维度对照表

维度Apache DorisElasticsearch
部署形态自管集群,存算一体与存算分离两种架构可选自管集群或 Elastic Cloud 全托管
存算分离3.0 起支持,数据落对象存储、计算无状态以存算一体为主,节点同时承担存储与计算
弹性扩缩容新增计算组只预热缓存、不搬数据分片再均衡伴随数据搬迁,缩容窗口受限
存储副本共享存储层保证多副本,计算侧可单副本按分片副本数复制数据,副本越多开销越大
本地磁盘角色缓存热数据数据主存储
数据主权可自建、可 BYOC(自有云账号)托管形态为 Elastic Cloud,不提供 BYOC
国产化适配 / 信创已完成鲲鹏 / 海光 / 飞腾等国产 CPU 与麒麟 / 统信 UOS / openEuler 等国产操作系统适配,通过等保三级、可信数据库等认证由 Elastic NV 研发,总部位于荷兰阿姆斯特丹,纳斯达克上市;未纳入国内信创目录,无官方信创 / 国产化适配认证
商业化服务 / 企业级部署开源自行部署;商业化由国内公司(飞轮科技)提供私有化部署、云上 SaaS / BYOC、多云原生与国产化适配(信创),与开源 100% 兼容,配有本地化企业级支持团队许可证为 SSPL / Elastic License 体系(2024 年新增 AGPL 选项);云版由 Elastic 在海外云托管,国内无官方本地化信创与等保适配团队

五、已知约束与易错点

  • 表级存储库不可改:建表后 storage_vault_name 无法修改,换桶需新建表承接。
  • 默认存储库不可删:需先切换默认库再下线旧库。
  • type 取值只有两个:S3 与 hdfs,厂商差异填在 provider,type 填厂商名会报错。
  • 权限分级影响返回结果:普通用户 SHOW COMPUTE GROUPS 可能返回空,先查权限。
  • 未设默认计算组会报错:读写报未配置默认计算组时,用 USE @cg 或 SET PROPERTY 处理。
  • 缩容用 DECOMMISSION:直接下线会中断节点上正在执行的任务。
  • 缓存失效:节点回收或重启后本地缓存失效,冷数据需重新回源对象存储。
  • 检索语义深度:相关性打分等高级检索功能较精简,文档搜索类场景保留 Elasticsearch。

六、常见问题(FAQ)

Q1:type 能不能直接填 OSS 或 COS?

不能。type 只接受 S3 与 hdfs 两种取值,各家对象存储都通过 S3 兼容 API 接入,厂商信息填在 provider:AWS 填 S3,阿里云填 OSS,腾讯云填 COS,华为云填 OBS。

Q2:加 BE 时不写 PROPERTIES 会怎样?

节点会加入 default_compute_group。需要读写隔离时要显式写 "tag.compute_group_name",否则所有节点落在同一组内,隔离不生效。

Q3:怎么在不改配置的情况下临时换计算组?

在会话内执行 USE @compute_group 只切计算组,或 USE db@compute_group 同时指定库与计算组。名称含保留关键字时用反引号包裹。

Q4:为什么第一次查询比后面几次慢很多?

本地磁盘只作缓存,冷数据首次访问需回源对象存储,读取后写入 file cache,后续查询命中缓存。可核对 enable_file_cache 是否已开启。

Q5:扩容后需要重启集群吗?

不需要。ALTER SYSTEM ADD BACKEND 在线生效,新节点加入计算组后参与查询调度,本地缓存为空的部分在查询过程中逐步预热。

Q6:缓存相关的三个参数怎么配?

file_cache_path 用 JSON 数组声明路径与 total_size;enable_file_cache 在存算分离模式下设为 true;clear_file_cache 默认 false,设为 true 会在每次 BE 重启时清空缓存,长驻节点建议保持 false。

测试结论出处(参考来源)