设计目标与高可用定义

Doris是海量分布式KV存储系统,目标是为中等规模集群提供高可用(HA)可伸缩存储能力。其高可用包含两层含义:

  • 服务高可用:在宕机、扩容、维护等场景下仍可读写。
  • 数据高可靠:数据持久存储,不丢失。

分布式存储系统高可用架构

核心设计原则:冗余与失效转移

  • 数据冗余存储
    每个数据保存多份副本(默认至少两份),分布于不同的物理服务器或存储序列中,避免单点故障。
  • 灵活失效转移(Failover)
    通过分布式集群的健康监测与动态路由,在部分节点故障时自动切换至可用节点,保证服务连续性。

架构组成部分

应用服务器层

  • 管理中心服务器 获取存储节点元数据,根据路由算法发起数据操作请求。
  • 支持多路径并发写入,随机选择副本读取,降低单个存储节点压力。

数据存储服务器集群

  • 副本分布策略
    数据按可用性级别分序列存储(序列指逻辑子集群),每个序列独立承载部分副本。
  • 去中心化设计
    节点间不直接通信,各节点独立存储数据,仅依赖管理中心实现元数据同步。

管理中心服务器

  • 管理集群节点信息,通过 主-主热备模式 监控存储节点健康状态。
  • 负责故障检测、扩容控制及向应用服务器提供集群配置信息。

数据读写流程

  • 写入:根据路由算法并发写入多个序列的目标服务器。
  • 读取:随机选择序列,按路由计算单节点访问,减少开销。
应用服务器 (客户端) 管理中心服务器 (主备集群) 数据存储服务器集群 存储集群_序列A 存储集群_序列B 存储集群_序列n 存储集群_序列X **写流程** 启动时获取存储集群信息 返回序列列表/路由规则 根据路由算法选择服务器写入数据 写入同一数据的另一个副本 (最多按N副本配置执行) loop [多副本并发写入] 数据持久化至多个序列的节点[^1] **读流程** 获取当前有效存储集群信息(仅在集群变更时) 随机选择一个序列 根据相同路由算法计算目标节点 返回指定数据 应用服务器 (客户端) 管理中心服务器 (主备集群) 数据存储服务器集群 存储集群_序列A 存储集群_序列B 存储集群_序列n 存储集群_序列X

应对不同故障的高可用方案

瞬时故障处理流程

特征:网络抖动/短暂阻塞(秒级恢复)

应用服务器 存储节点A 存储节点B 管理中心 读/写请求 请求失败 **立即重试(3~5次)** 成功响应 发起故障仲裁 节点降级为临时故障 读写切至副本节点 alt [瞬时失败] [多次重试仍失败] 应用服务器 存储节点A 存储节点B 管理中心

临时故障处理流程

特征:人工干预修复(故障持续分钟/小时)

故障期间读写

应用服务器 存储节点A 临时存储 存储节点B 写请求(失败) 写入副本(临时区) 写入其他正常副本 读请求 故障期间数据流向临时存储,读取仅访问存活节点 应用服务器 存储节点A 临时存储 存储节点B

恢复期间数据迁移

临时存储 存储节点A(恢复后) 管理中心 存储节点A 重新注册状态 触发迁移任务 写入临时区数据 迁移完成通知 临时存储 存储节点A(恢复后) 管理中心 存储节点A

永久故障处理流程

特征:硬盘损坏导致数据完全丢失

故障期间读写

应用服务器 备份节点 存储节点B 存储节点A 存储节点B/备份节点 写请求(失败超时) 激活备用节点,分配新ID 同步写入存活副本 写入数据 读请求(随机选择) 应用服务器 备份节点 存储节点B 存储节点A 存储节点B/备份节点

恢复期间数据重建

备份节点 存储节点B 管理中心 应用服务器 增量数据同步(全量复制) 完成重建声明 更新集群路由表 备份节点 存储节点B 管理中心 应用服务器

Logo

2万人民币佣金等你来拿,中德社区发起者X.Lab,联合德国优秀企业对接开发项目,领取项目得佣金!!!

更多推荐