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

摘要 :一份面向日常查阅的速查。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_mode fe.conf / be.conf 存算分离填 cloud 其他取值为存算一体
cluster_id fe.conf 整数,集群间唯一 存算分离架构下集群标识
meta_service_endpoint fe.conf / be.conf host:5000,多个用逗号分隔 只填具备元数据功能的 Meta Service 进程
brpc_listen_port doris_cloud.conf 5000 Meta Service 监听端口
fdb_cluster doris_cloud.conf 与部署机 fdb.cluster 一致 FoundationDB 连接串,依赖 FDB 7.1.x
file_cache_path be.conf JSON 数组,含 path 与 total_size 缓存目录与容量,total_size 单位字节
enable_file_cache be.conf false,存算分离建议 true 是否启用文件缓存
clear_file_cache be.conf false 设为 true 时每次重启清空缓存
enable_evict_file_cache_in_advance be.conf true 缓存使用率达阈值后主动淘汰
s3.root.path vault 属性 桶内独立前缀 多集群共桶时用于隔离

3.3 Storage Vault 命令片段

ini 复制代码
-- 建存储库: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 计算组命令片段

sql 复制代码
-- 加节点并指定计算组;不写 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_name vault 名 决定数据落哪个共享存储层 建表后不可修改
replication_num 1 计算侧单副本 多副本由共享存储层保证
compression zstd 列式压缩算法 日志表常用
dynamic_partition.enable true 开启动态分区 配合下面三项使用
dynamic_partition.time_unit DAY 分区粒度 日志场景按天
dynamic_partition.start -30 保留历史分区数 负值表示保留过去
dynamic_partition.end 3 提前创建未来分区数 正值表示预建
dynamic_partition.buckets 32 动态分区分桶数 与建表分桶数对齐

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

3.6 建表完整片段

ini 复制代码
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 写入与核对片段

bash 复制代码
# 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
sql 复制代码
-- 分区是否按天滚动
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 Doris Elasticsearch
部署形态 自管集群,存算一体与存算分离两种架构可选 自管集群或 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。

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

相关推荐
SelectDB1 小时前
Workload Group 参数速查:排队与并发配置、CPU 软硬限切换与常见配置问题清单
大数据·数据库·数据分析
智享 AI 科技1 小时前
2026年AI私域系统怎么选?从功能到服务的全维度对比
大数据·人工智能·经验分享
mister_guo1 小时前
Elasticsearch:原理、Docker 安装与常用命令
大数据·运维·elasticsearch
DBA_G1 小时前
南大通用GBase 8c数据库-两阶段提交事务状态保持讲解(下)
数据库
NineData2 小时前
MySQL 到 Doris 实时数据同步:订单、用户和日志数据入仓方案
数据库·mysql
starzy19902 小时前
Flink 注册Slot源码深度剖析:从TaskManager注册到Slot状态机的完整链路
大数据·flink
0+1112 小时前
算法 --哈希表
数据结构·算法·散列表
出海客2 小时前
跨境客服工单如何跨时区交接:队列分流、SLA计时与异常兜底
大数据
小小AK2 小时前
采购订单同步策略实战:金蝶云星空到旺店通的字段映射与调度设计
大数据·数据库