海量分布式存储系统 Doris 原理概述

用户头像
破晓_dawn
关注
发布于: 2020 年 07 月 16 日
海量分布式存储系统Doris原理概述

简介



Doris(https://github.com/itisaid/Doris)是一个海量分布式 KV 存储系统,其设计目 标是支持中等规模高可用可伸缩的 KV 存储集群。

Doris可以实现海量存储,线性伸缩、平滑扩容,自动容错、故障转移,高并发,且运维成本低。部署规模,建议部署4-100+台服务器。

逻辑架构

Doris采用两层架构,Client 和 DataServer+Store。

有四个核心组件,Client、DataServer、Store、Administration。

应用程序通过Client SDK进行Doris的访问,

每台服务器上部署一个Data Sever做服务器的管理,每台服务器上有自己的存储Store,整个集群的数据存储,每台机器独立部署。数据通过路由选择写入到不同的机器中。

Administration为管理中心,提供配置、管理和监控。

config指,应用程序启动一个Data Server,在启动时要配置管理中心的ip地址,通关管理中心。管理中心会修改配置项感知到集群中加了新机器,对新机器管理,扩容等。待机器处于可用状态,将该机器的配置项通知给KV Client。从而KV Client进行新的路由选择。

扩容、下线机器等的控制台界面通过Management管理。

Monitor监控机器是否正常。

KV Storage 概念模型

client写数据,绑定产品的namespace(逻辑隔离),构成新key,路由到具体机器上读写。



路由解析算法是设计的一个关键点,决定集群的管理方式,也决定了集群扩容的复杂性和难度。

Doris的算法类似redis,有桶的概念,key映射到1w个虚拟节点,虚拟节点在映射到物理节点。

由于Doris设计时,用于4-100+规模的集群。因此,Doris分了1w个虚拟节点,当服务器超过100会导致负载不均衡,1000会更差,相当于每一个集群上有10个虚拟节点,虚拟节点会有10%的影响。

扩容时,需要调节虚拟节点指向新的位置。具体过程为,暴利轮询新节点添加后,一个服务器上应该承载的虚拟节点个数,将超出的虚拟节点迁移到新机器即可。如上图左图有2个物理节点,扩容后,有3个物理节点,变为右图。

基本访问架构

为了保证高可用。doris所有服务分成2个组,两组服务器对等。两个group是可以有不同数量的服务器。

写操作时,client的路由算法在两个group分别选2个服务器,分别(同时)写入,两个服务器全部返回后,再继续向下进行。读操作时,从两个服务器随机选一个读。这样,提高可用性,数据持久性,不会丢失。

监控检测

集群管理的重要角色Config Server,有一个功能是负责发现故障服务器。

发现故障的方式有2种:

  1. ConfigServer对DataServer心跳检测

  2. Client访问时Fail报告

通常心跳检测是慢的,几秒进行一次心跳检测。更多时候,是client Fail失败报告发现无效服务器,当写入失败时,Client会告诉Config Server。Config Server校验,也访问失败,则通知其他client。

可用性关键场景

节点失效分为:瞬间失效、临时失效、永久失效

应用服务器向服务器写,如果写失败,为瞬间失效。接着应用服务器进行3次重试。3次都失败,通知管理服务器,进行服务的失效判断。

管理服务器再写一次,如果写成功,认为是客户端自己通信通信问题。如果写入失败,判断为临时失效,通知所有client,服务器失效,不要写,也不读。

如果2小时恢复,则节点为临时失效。如果2小时没有恢复,认为是永久失效

临时失效的恢复

如图,如果节点2失效,进入临时失效阶段。

将数据写入节点1同时,写入备份节点,等待节点2恢复,如左图。

注意,这里两个节点写入的数据是不同的。节点1记录的操作结果,而备份节点,类似binlog,记录操作过程。

节点2恢复后,从备份节点,将之前的操作迁移到节点2。恢复过程中,节点2只写不读。数据冲突时,根据时间戳检测。所有数据处理完成后,节点2进入正常状态。如右图。

永久失效的恢复

如图,节点2临时失效2个小时还未恢复,判定为永久失效。进入永久失效的恢复。

  1. 删除临时失效期间在备份服务器上写入的数据。

  2. 在集群里,找一个空白节点3(stand by节点),标记节点3临时失效状态,将节点1的内容拷贝到节点3,此时节点3不写不读(因为是临时失效状态)。对节点1的写入,还是记录到备份节点。如左图所示。

  3. 等待数据迁移完成,进入失效恢复状态,节点3写数据,并从日志节点恢复数据。如右图。

  4. 数据恢复完成后,节点3进入正常状态。节点2可以下掉了。

设计中,有临时日志节点(备份节点),有空白节点。实际使用中没有节点3空白节点。原因:1 自动迁移有风险,还是需要手动迁移。2 几年宕机1台,一直有一个空白节点standby浪费。一般晚上报警失效也没有事情,第二天,找机器扩容即可。认为24小时之内,同样编号的2台机器连续down掉,概率很低。

扩容数据迁移原理

物理节点分成2个group,写的时候,向2个group同时写。当其中一个group扩容机器时,该group上的所有节点进入临时失效状态。停止读写,将数据迁移到新的服务器上。

由于是虚拟节点的映射在调整,所以迁移是按照虚拟节点调整。为了迁移方便,虚拟节点物理化,一个虚拟节点对应一个文件。迁移时其实就是拷贝文件。这时,如果group1有节点失效也会出现不一致,但是,通常扩容的过程很快,因为,是scp拷贝文件,瓶颈为网络带宽,通常几十T数据,几分钟迁移完成,十来分钟进行数据恢复。



参考:极客大学-架构师训练营

发布于: 2020 年 07 月 16 日 阅读数: 76
用户头像

破晓_dawn

关注

慢慢,稳稳 2017.12.06 加入

业余选手,但是有一颗向往专业的心

评论

发布
暂无评论
海量分布式存储系统Doris原理概述