构建可靠的磁盘系统:故障判定和自动化处理

Posted YRCloudFile

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建可靠的磁盘系统:故障判定和自动化处理相关的知识,希望对你有一定的参考价值。

存储痛点

存储系统以保证数据可靠为首要任务,传统单机存储以极低成本对外提供存储服务,但存在多处单点故障,可用性较低,扩展性差等问题。

随后演化出支持SAS接口双控双活控制器架构,在一定程度上能够避免单点故障,实现升级软硬件时业务不感知,能够保证可用性,但扩展性仍受到很大制约。

另外,以上两种传统存储方案中,均存在重构耗时过长的隐患,以目前单盘最大容量14TB磁盘而言,在不影响业务的前提下,存储单点故障后的重构时间将要以天计算,过大的重构时间窗口,出现高阶故障的概率会增大,数据面临风险也增大。

面对这些问题,为满足扩展性、无单点故障、快速重构的需求,设计者用分布式架构让更多的存储服务器参与到系统中,理论上它确实解决了以上问题,但均面临磁盘系统的软硬件故障,大规模分布式存储系统虽然能够快速处理单点故障,但单个存储系统磁盘规模可到K级别,随着业务的增长和磁盘寿命的衰减,单点故障成为常态,同时发生高阶故障的概率也会逐渐递增,给整个存储系统的稳定性和可靠性带来了挑战。

监控磁盘系统的必要性
分布式存储系统中,每个服务组件都有各自的监控逻辑,但都不涉及到OS层和硬件层面的监控。在业务层监控并处理底层异常,犹如隔靴挠痒,感知异常较滞后,有时在底层异常很长时间后,业务层才感知到,并且业务层预判异常,很容易出现误判。

因此无论在传统存储中,还是在大规模分布式存储中,都需要一套能提前感知和预判磁盘子系统软硬件健康状况的机制。一方面,生产环境的单个存储集群拥有海量磁盘,当业务运行度过磁盘稳定期后,磁盘故障率会变大,同时也面临质保过期的问题。因此能够辨别磁盘故障类别,是可修复的异常,还是直接申请售后更换,都能节约一定成本;另一方面,在配合产品定义的数据冗余特性,保证存储可靠性的前提下,给自动化运维提供可信的数据支持,实现自动化快速处理异常。短期来看,它直接提高存储的可用性和服务质量;长期来看,它让整个存储系统一直处于良好的健康状态,并且减轻运维人员的工作量,以及分析处理异常的复杂度。

故障分类

硬件类

1)磁盘硬件故障:以单盘故障居多,极少会遇到批量磁盘硬件故障,故障影响范围小,前提是软件要及时处理该异常。

2)HBA卡硬件故障:影响整台服务器的IO,故障影响范围大,会触发较多数据迁移。

软件类

1) 磁盘固件bug:有批次问题,统计故障时,在某段时间内,同型号多块磁盘发生故障,重启后又可以正常工作,健康值良好,可和厂家确认是否是磁盘固件有缺陷。

2) 磁盘驱动异常处理逻辑缺失:磁盘驱动若没及时处理异常,慢盘处理机制缺失,单盘异常可能夯死整台服务器,无法重启服务器,很难定位到异常盘,对业务影响大。

3) 低效的scsi中间层错误处理逻辑:该逻辑适合桌面级应用中,不适合企业级存储系统中,单盘异常可能会导致整台服务器IO夯,体验差,对业务影响大。

分析方法

一次异常不能认为该设备故障无法被继续使用(如震动、温度的影响),只有已经明确的故障,才能认为设备不可用,需替换。磁盘的好坏很难界定,所以一般用健康值去衡量磁盘是否可用,一般分良好、警告、错误,而健康值是个多维度给磁盘打分后的综合值。

  1. 硬件类异常: HBA的特定寄存器值异常、有硬件复位、PCIE寄存器异常都可以表明该HBA已经异常,磁盘的特定sense key可以表明磁盘是否为坏盘。
  2. 软件异常:磁盘iops和吞吐基本为0,利用率达到99%,某些异常sense key,表明磁盘有异常。
  3. 常见影响磁盘健康值的因素:G表,重映射扇区数,CRC项,各类sense key,IO超时,最大IO延迟时间等。

处理方法

软件层面优化:磁盘异常处理在磁盘驱动层实现,及时处理IO超时、IO错误、慢盘,完成磁盘异常修复。自己实现单盘异常处理逻辑,将单盘异常处理和系统隔离。

A) IO超时类:如果不是环境震动导致,说明磁盘本身有异常,可通知监控报警。

B) IO错误类:具体错误具体处理,部分错误可被scsi命令修复,而业务不感知。

C) 慢盘类:确认不是驱动bug导致,底层驱动最先感知到,可通知监控报警。

磁盘健康值打分维度:

A) smart信息中关键指标项、特定的sense key都可直接判定为坏盘。

B) smart中特性属性值,IO延迟大和超时,可以设置磁盘警告。

C) 在业务低峰期时的磁盘短检,随机抽样读取数据,若有IO报错,可设置警告

D) 离线时的磁盘长检,可判定磁盘的健康状态。

自动化运维处理

自动化运维目的是减轻运维人员的工作量和工作复杂度,提升集群服务质量和可用性。

通过给磁盘健康值评分后,业务监控层根据自己踢盘策略配置,在满足上层数据冗余条件下,在一定故障域配额下自动化完成集群移除磁盘操作,并主动触发恢复,如果在恢复期间,再次发现异常盘,继续根据踢盘策略决定是否移除磁盘。

当遇到超出配额的高阶故障时,需要人工介入,确认故障类型后再做进一步处理。

总结

故障判定和自动化处理是个逐步完善的过程,需要对底层协议、内核、平台业务相关的有深入的理解。焱融云以保障客户数据为首要任务,在所有产品发布前,均进行大量线下故障模拟演练,并在生产环境中处理故障并得以验证,积累了大量自动化运维经验。以及在产品迭代中,不断优化自动化运维机制,从而提升产品竞争力和客户体验。

以上是关于构建可靠的磁盘系统:故障判定和自动化处理的主要内容,如果未能解决你的问题,请参考以下文章

干货分享实践Jenkins集成Cobertura自动化构建SpringBoot工程

走近华佗,解析自动化故障处理系统背后的秘密

kafka使用Apache Kafka构建可靠的再处理和死信队列

系统可靠性测试

Golang Failpoint 的设计与实现

配网自动化对供电可靠性的影响