海量分布式 KV 存储系统 Doris 临时失效过程分析
Doris(https://github.com/itisaid/Doris)是一个海量分布式 KV 存储系统,其设计目标是支持中等规模高可用可伸缩的 KV 存储集群。
对于一个数据存储系统而言,高可用意味着两个意思:
高可用的服务:任何时候,包括宕机、硬盘损坏、系统升级、停机维护、集群扩容等各种情况下,都可以对系统进行读写访问操作。
高可靠的数据:任何情况下,数据可靠存储,不丢失。
Doris高可用系统架构
系统架构层面,保证高可用的主要手段是冗余:服务器热备,数据多份存储。使整个集群在部分机器故障的情况下可以进行灵活的失效转移(Failover),保证系统整体依然可用,数据持久可靠。
Doris 系统架构如下图所示。
存储服务器根据应用的可用性级别设置数据复制份数,即每个数据实际物理存储的拷贝数目。为了便于管理和访问数据的多个拷贝,将存储服务器划分为多个序列,数据的多个拷贝放在不同的序列中(序列可以理解为存储集群中的子集群)。
应用服务器写入数据时,根据集群配置和应用可用性级别使用路由算法在每个序列中计算得到一个服务器,然后同时向这些服务器并发写入;在读取数据时,只要随机选择1个序列,根据相同路由算法得到服务器编号和地址进行读取即可。
不同故障情况下的高可用解决方案
故障分类
在讨论解决方案之前,我们先对故障进行分类,针对不同故障情况,分别处理对待。
对于一个分布式存储系统而言,影响系统整体可用性的故障可以分成三类:
瞬时故障 :引起这类故障的主要原因是网络通讯瞬时中断;服务器内存垃圾回收或后台线程繁忙停止数据访问操作响应。其特点是故障时间短,在秒级甚至毫秒级系统即可自行恢复正常响应。
临时故障 :引起这类故障的主要原因是交换机宕机、网卡松动等导致的网络通讯中断;系统升级、停机维护等一般运维活动引起的服务关闭;内存损坏、CPU过热等硬件原因导致的服务器宕机;这类故障的主要特点是需要人工干预(更换硬件、重启机器等)才能恢复正常。通常持续时间需要几十分钟甚至几小时。故障时间可分为两个阶段:临时故障期间,临时故障恢复期间。
永久故障 :引起这类故障主要原因只有一个:硬盘损坏,数据丢失。虽然损坏硬盘和损坏内存一样,可以通过更换硬盘来重新启动机器,但是丢失的数据却永远找不回来,因此其处理策略也和前面两种故障完全不同,恢复系统到正常状态也需要更长的时间。故障时间可分为两个阶段:永久故障期间,永久故障恢复期间。
瞬时故障的高可用 解决 方案
瞬时故障是一种严重性较低的故障,一般系统经过较短暂的时间即可自行恢复,遇到瞬时故障,只需要经过多次重试,就可以重新连接到服务器,正常访问。
如果应用多次重试后,仍然失败,那么有可能不是瞬时故障,而是更严重的临时故障,这时候需要执行临时故障处理策略。当然也有可能是应用服务器自己的故障,比如系统文件句柄用光导致连接不能建立等,这时候需要请求管理中心服务器进行故障仲裁,以判定故障种类。
临时故障的高可用解决方案
临时故障要比瞬时故障严重,系统需要人工干预才能恢复正常,在故障服务器未能恢复正常前,系统也必须保证高可用。由于数据有多份拷贝,因此读数据的时候只需要路由选择正常服务的机器即可;写数据的时候,正常服务的机器依然正常写入,发生故障的机器需要将数据写入到临时存储服务器,等待故障服务器恢复正常后再将临时服务器中的数据迁移到该机器,整个集群就恢复正常了。
下面根据三个阶段的时序图来解析临时故障的整个处理过程:
判断系统进入临时故障状态的时序图,如下所示:
临时失效中的读写过程的时序图,如下所示:
临时失效故障解决,系统恢复过程时序图,如下所示:
对应的访问模型如下:
永久故障的高可用解决方案
永久故障是指服务器上的数据永久丢失,不能恢复。由于故障服务器上的数据永久丢失,从临时服务器迁移数据就没有意义,必须要从其他序列中正常的服务器中拷贝全部数据才能恢复正常状态。
永久故障发生期间,由于系统无法判断该故障时临时故障还是永久故障,因此系统访问结构和临时故障一样。当系统出现临时故障超时(超过设定时间临时故障服务器仍旧没有启动)或者人工确认为永久故障,系统启用备用服务器替代原来永久失效的服务器,进入永久故障恢复,访问模型如图所示:
CAP
分析分布式系统,一般都离不开CAP理论。从CAP理论所讨论的对象(节点间进行数据共享和数据交换)来看,Doris系统中的数据存储服务集群间其实是互不感知的,所以严格来说Doris系统并不是CAP理论所要讨论的范畴。
CAP理论部分的详细分析可参考以下文章:
版权声明: 本文为 InfoQ 作者【林昱榕】的原创文章。
原文链接:【http://xie.infoq.cn/article/5a37905fce58bfa0e593cebc1】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论