背景设计可靠系统的一个重要前提是了解故障模式,当前研究较多,应对手段较成熟的故障模式有亚健康检测:
Fail-stop,停止类故障Fail-partial,部分故障Fail-transient,暂时性故障Corruption,数据损坏Byzantine failure,拜占庭故障当前,对于Fail-slow的故障模式,研究较少,我们把这种故障模式(Fail-slow)称之为亚健康亚健康检测。处于亚健康的硬件,是指仍然可以工作,但是性能严重降级的硬件。服务器主要的硬件部件都可能出现亚健康的情况,比如,震动可以导致硬盘带宽降低3个数量级,降到100KB/s;SSD固件的bug可以导致操作阻塞数秒;NVDIMM卡由于松动,性能可以降低到正常性能的25%;CPU由于供电不足,性能下降50%;网卡由于缓存数据受损和重传导致速度降低到Kbps。
以前亚健康的情况出现频率不高,现在,由于大规模部署以及系统操作之前存在不可避免的耦合,导致亚健康类的系统问题出现频率增高亚健康检测。随着硬件向着小型化和复杂化发展,只会恶化这类问题。多种故障类型可能会转化成亚健康:
Fail-stop to Fail-slow:多个硬件连接在一起,一个停止的硬件可能会导致其他部件亚健康。比如,一个坏掉的电源导致CPU降速50%(单备用电源供电不足)。一个坏掉的硬盘消耗掉Raid卡的所有资源,导致性能降级。这说明亚健康与故障往往结合在一起。另外,健壮的系统设计时就应当保证故障停止的硬件不会转化为亚健康。Fail-transient to Fail-slow:许多硬件可能表现出暂时性的故障。比如,硬盘偶尔会返回错误,CPU有时会计算错误,内存也经常会出现比特跳变。由于这类故障的暂时性,硬件固件/软件一般会掩盖这类故障。最简单的方法是重试,或者纠错(如使用ECC)。但是,如果暂时故障出现频率太高,故障掩盖机制会成为双刃剑。因为故障掩盖一般会有开销,比如时延,当故障反复发生时,会导致亚健康的症状。典型的例子,比如硬盘固件反复进行写后读操作导致性能降低;DRAM内存的反复纠错会导致系统降级;PCIe接口松动会让驱动反复重试,导致降级;丢包/错包,反复重传导致网络性能降低几个数量级。Fail-partial to Fail-slow:有些部件在部分故障时仍可持续工作,此时有可能会表现出亚健康。比如,SSD部分颗粒故障,会减少备用空间,触发更多的垃圾回收动作,影响性能。硬盘在坏道增多时,重映射会增加寻道时间。亚健康的症状可能是持续的,暂时的,也可能是有时亚健康,有时停止;亚健康也有可能是多个事件互相影响,故障扩散的结果。在亚健康现象与真正的根因之间,经常存在一个扩散链。比如服务器风扇损坏,导致其他风扇全负荷工作,增加震动,进而导致硬盘性能下降。
亚健康还有一个特征是检测时间长。主要原因是当前的许多软硬件,在设计时未考虑亚健康的场景,主要考虑的是停止类故障场景;另外,外部环境的影响导致亚健康的根因难以定位,比如海拔,温度,噪音,震动的影响等。
针对亚健康的故障类型,分布式存储按照故障资源,有以下三类检测和处理机制:
盘亚健康检测与处理网络亚健康检测与处理节点服务亚健康检测与处理盘亚健康检测与处理OceanStor分布式存储对其使用的主存盘、缓存盘、系统盘、元数据盘均实现了全方位的亚健康状态监控,主要监控内容包含但不限于:
SMART信息IO时延,含单IO级时延、IO平均时延等IO错误,含静默数据错误数等当采集到上述数据后,通过与智能训练的阈值比较、智能聚类算法(一种机器学习算法)诊断等识别盘是否处于亚健康状态,如果是,则主动触发隔离并告警。在隔离前会先判断此盘上的数据在其他盘上是否还有完整的冗余数据,如果没有,则不会触发隔离。基本原理如下:
OSD周期性获取DISK的SMART信息、实时记录IO时延、IO错误信息;周期性对收集的数据进行初步诊断,主要采用多级阈值比较的方法,如有异常则上报MDC进行综合诊断。MDC根据多OSD上报的信息进行综合诊断,诊断完毕后上报告警,同时根据数据冗余决定是否对该亚健康盘进行隔离。网络亚健康检测与处理网卡降速,丢包/错包率增加等都会导致集群网络性能降级,进入亚健康状态。系统通过检测网络资源状态的变化,定位受到网络亚健康影响的节点,进行bond主备切换或者节点隔离。基本原理是:
1.多级检测机制
节点本地网络快速检测闪断、错包、协商速率等异常。并智能选择节点自适应发送探测包,识别链路时延异常和丢包等问题。
2.智能诊断
结合组网模型和异常信息进行智能诊断,识别网口/网卡/链路等异常。
3.逐级隔离与预警
根据诊断结果进行网口隔离、链路隔离、节点隔离等并上报告警。
以网络连接亚健康触发本地网口切换为例:
1.节点1持续向集群内其他节点发送探测包,检测是否有丢包或时延增高的现象。
2.节点1发现当前网口向多个目标节点发送的探测包都出现异常,进行网口切换的操作;网口切换后,网络服务恢复正常。
节点服务亚健康检测与处理分布式集群节点在运行过程中出现软硬件问题是普遍现象。由于节点软硬件问题导致节点进入亚健康状态,比如CPU降速,内存反复纠错导致访问降速等;在这种场景下,整系统服务时延受到单个节点影响而降级。针对这一类问题场景,系统通过收集时延信息检测出处于亚健康状态的节点,对问题节点或节点的问题资源进行隔离。基本原理是:
1.跨进程/服务检测
A访问B,在A上统计访问B的IO时延,如时延超阈值则上报综合诊断。
2.智能诊断
结合各个进程/服务上报的异常时延,使用基于大多数的判断、聚类算法等诊断出时延异常的进程/服务。
3.隔离与预警
将诊断出异常的进程/服务上报控制节点进行隔离(业务分摊到集群内的其他进程中)并上报告警。
以EDS进程检测OSD进程服务亚健康为例:
1.EDS进程检测到OSD进程的时延,统计时延是否有持续异常升高的现象。
2.EDS检测到某OSD服务时延异常,上报MDC。
3.MDC判断是否大多数访问OSD的EDS都上报该OSD服务时延异常,满足条件则对此OSD启动隔离操作。
Fast-Fail机制Fast-Fail(快速换路重试)确保单点亚健康的IO时延可控
换路重试每IO检测是否超阈时间未返回,如未返回则启动换路重试。
换路重试对于读IO则读其他副本或降级读,对于写IO则在其他盘上重新分配空间来存放数据。
以慢盘触发Fast-Fail换路重试为例:
1.EDS统计下发到盘的IO时延,通过聚类算法挑出访问时延比正常盘高的盘。
2.EDS对异常盘进行标记,将读写IO切换到其他健康盘,恢复读写服务时延。