深入分析磁盘RAID关键技术

开源Linux

共 5391字,需浏览 11分钟

 ·

2023-11-10 10:19


磁盘容错是指在子系统出现硬盘错误或硬盘故障时,可以保证数据完整性和数据处理能力。RAID控制卡通过冗余的硬盘组在RAID 1、5、6、10、50、60上实现此功能。

在RAID 1中,由于数据镜像存储于成对的硬盘上,因此在成对的硬盘中的一个产生错误或故障时,不会造成数据丢失。同理,在RAID 5中,允许1个硬盘故障;在RAID 6中,允许2个硬盘故障。

而对于包含多个子组的RAID,RAID 10、50允许故障盘的个数与子组数相同,但是要求每个子组只能包含1个故障盘。RAID 60允许故障盘的个数为子组数的2倍,要求每个子组最多包含2个故障盘。

RAID 0不支持容错特性,当RAID 0中的硬盘故障时,该RAID失效,数据丢失。

容错性能提高了系统的可用性,即硬盘故障时,系统仍可正常运行。因此,在故障修复流程中,容错是非常重要的特性。


1 一致性校验

针对有冗余功能的RAID 1、5、6、10、50、60,RAID控制卡可以对RAID组的硬盘数据进行一致性校验,对硬盘数据进行检验和计算,并与对应的冗余数据进行比较。如果发现有数据不一致的情况,会尝试做自动修复并保存错误信息。

由于RAID 0不具备冗余性,因此不支持一致性校验。

2 热备份

RAID控制卡的热备份特性由热备盘和紧急备份功能实现。

热备盘

热备盘是硬盘系统中的一个独立的硬盘,当RAID组中的硬盘故障时,热备盘自动取代故障盘作为成员盘,并在热备盘上重构故障盘数据。

在RAID控制卡的管理界面或命令行工具中,可以指定容量大于或等于RAID组成员盘,且介质类型及接口与成员盘相同的空闲盘作为RAID组的热备盘。

RAID控制卡支持的热备盘包括下面两种:

  • 全局热备盘,为RAID控制卡上所有已配置的RAID组所共有,1块RAID控制卡中可配置1个或多个全局热备盘。当任意RAID组内的成员盘故障时,全局热备盘均可自动替代。

  • 局部热备盘,为RAID控制卡上某个指定的RAID组所专有,每个RAID组都可以配置1个或多个局部热备盘。当指定RAID组内的成员盘故障时,局部热备盘可自动替换。

热备盘有如下特性:

  • 热备盘仅用于具有冗余功能的RAID组,包括RAID 1、5、6、10、50、60。
  • 热备盘仅用于替代同一RAID控制卡上的故障盘。

紧急备份

紧急备份功能,是指任意一个具备冗余功能的RAID组中出现成员盘故障且没有指定热备盘时,RAID控制卡下属的空闲盘会自动替代故障成员盘并进行重构,避免数据丢失。

紧急备份要求用于备份的空闲盘容量大于等于成员盘容量,且介质类型与成员盘相同。

3 RAID重构

当RAID组中出现故障盘时,可以通过RAID控制卡的数据重构功能,将故障盘中的数据在新盘上重构。数据重构功能仅适用于具有冗余功能的RAID 1、5、6、10、50、60。

RAID控制卡支持热备盘自动重构故障成员盘数据。当RAID组配置了可用的热备盘时,在成员盘故障的情况下,热备盘自动替换故障盘,进行数据重构;当RAID组没有可用的热备盘时,只有更换新盘后才可进行数据重构。当热备盘开始数据重构后,故障的成员盘就被标注为可移除状态。如果在数据重构过程中系统下电,那么在系统重新启动后,RAID控制卡会继续执行数据重构的任务。

重构率,即数据重构任务在系统运行的所占用CPU资源的比率,可设置为0%~100%。0%表示数据重构任务只有系统当前没有任何其他任务运行时,才会启动数据重构任务。100%表示数据重构任务占用所有CPU资源。重构率可由用户自行设置,建议根据系统的实际情况设置一个合适的取值。

4 虚拟磁盘的读写策略

在创建虚拟磁盘时,会需要对其数据读写策略进行定义,以规范后续虚拟磁盘运行过程中数据的读写方式。

数据读策略

在配置界面中一般体现为“Read Policy”。RAID控制卡支持如下两种数据读策略:

预读取方式:在配置界面中一般有“Always Read Ahead”、“Read Ahead”、“Ahead”等配置选项。使用此策略后,从虚拟磁盘中读取所需数据时,会把后续数据同时读出放在Cache中,用户随后访问这些数据时可以直接在Cache中命中,将减少硬盘寻道操作,节省响应时间,提高了数据读取速度。

要使用该策略,要求RAID控制卡支持数据掉电保护功能,但如果此时超级电容异常,可能导致数据丢失。

非预读取方式:使用此策略后,RAID控制卡接收到数据读取命令时,才从虚拟磁盘读取数据,不会做预读取的操作。

数据写策略

在配置界面中一般体现为“Write Policy”。RAID控制卡支持如下数据写策略:

回写:在配置界面中一般体现为“Write Back”等字样。使用此策略后,需要向虚拟磁盘写数据时,会直接写入Cache中,当写入的数据积累到一定程度,RAID控制卡才将数据刷新到虚拟磁盘,这样不但实现了批量写入,而且提升了数据写入的速度。当控制卡Cache收到所有的传输数据后,将给主机返回数据传输完成信号。

要使用该策略,要求RAID控制卡支持数据掉电保护功能,但如果此时超级电容异常,可能导致数据丢失。

直写:在配置界面中一般有“Write Through”等选项。使用此策略后,RAID控制卡向虚拟磁盘直接写入数据,不经过Cache。当硬盘子系统接收到所有传输数据后,控制卡将给主机返回数据传输完成信号。

此种方式不要求RAID控制卡支持数据掉电保护功能,即使超级电容故障,也无影响。该写策略的缺点是写入速度较低。

与BBU相关的回写:在配置界面中一般有“Write Back with BBU”等选项。使用此策略后,当RAID控制卡BBU在位且状态正常时,RAID控制卡到虚拟磁盘的写操作会经过Cache中转(即回写方式);当RAID控制卡BBU不在位或BBU故障时,RAID控制卡到虚拟磁盘的写操作会自动切换为不经过Cache的直接写入(即写通方式)。

强制回写:在配置界面中一般体现为“Write Back Enforce”、“Always Write Back”等字样。在RAID控制卡无电容或电容损坏的情况下,强制使用“Write Back”模式。

当服务器出现异常下电时,如果电容不在位或在充电状态下,RAID控制卡中DDR(即Cache)的写数据将会丢失。不推荐使用该模式。

5 数据掉电保护

掉电保护的原理

数据写入RAID控制卡高速缓存的速度大于数据写入硬盘的速度,一次在服务器进行大量写操作时,都使用RAID控制卡高速缓存来提升系统性能。

  • 开启RAID控制卡高速缓存可提升整机写性能,当服务器写压力减小或RAID控制卡高速缓存将写满时,数据再由RAID控制卡高速缓存写入硬盘。
  • 开启RAID控制卡高速缓存提升写性能的同时,也增大了数据丢失的风险,在整机意外掉电时,RAID控制卡高速缓存中的数据将会丢失。

为了提升整机的高读写性能和RAID控制卡高速缓存中数据的安全,可为RAID控制卡配置超级电容。超级电容保护模块的原理是在发生系统意外掉电时,利用超级电容供电,将RAID控制卡高速缓存中的数据写入超级电容模块中的NAND Flash中永久保存。

超级电容电量校准

由于数据保护需要超级电容的配合,为了记录超级电容的放电曲线,以便RAID控制卡了解超级电容的状态,例如最大和最小电压等,同时为了延长超级电容的寿命,RAID控制卡默认启动超级电容自动校准模式。

RAID控制卡通过如下所述的三段式充放电操作对超级电容的电量进行校准,使其保持在一个相对稳定的值。

1.RAID控制卡将超级电容的电量充到最大值。
2.自动启动校准进程,将超级电容完全放电。

3.重新开始充电,直至达到最大电量。

超级电容电量校准过程中,RAID控制卡写策略自动调整为“Write Through”模式以保证数据完整性,此时RAID控制卡性能会降低。电量校准的时间取决于超级电容充放电速度。

6 硬盘条带化

当多个进程同时访问一个硬盘时,可能会出现硬盘冲突。大多数硬盘系统都对访问次数(每秒的I/O操作)和数据传输率(每秒传输的数据量)有限制。当达到这些限制时,后面需要访问硬盘的进程就需要等待。

条带化是一种自动的将I/O的负载均衡到多个物理硬盘上的技术。条带化技术将一块连续的数据分成多个小部分并将其分别存储到不同硬盘上去。这就能使多个进程同时访问数据的多个不同部分而不会造成硬盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的I/O并行能力。

硬盘的条带化,是将硬盘空间按照设定的大小分为多个条带,数据写入时也按照条带的大小来划分数据模块。

例如,在一个由四个成员盘组成的硬盘系统中(例如RAID 0),第一个数据块写入第一块成员盘,第二个数据块写入第二个成员盘,以此类推,如图1-11所示。由于是同时对多个硬盘进行写入,因此极大地提升了系统性能,但是,此特性并不能保证数据的冗余性。

硬盘分条包含下面的概念:

  • 条带宽度:一个硬盘组在进行分条时所使用的硬盘的个数,例如一个由四个成员盘组成的硬盘组,其条带宽度为“4”。
  • 硬盘组的条带大小:RAID控制卡同时在一个硬盘组中所有硬盘上的写入的数据块的大小。
  • 硬盘的条带大小:RAID控制卡在每块硬盘上写入的数据块的大小。

例如,针对一个硬盘组,在写入数据时,一个1MB的数据条带,在每个成员盘上分配的数据块为64KB,那么此硬盘组的条带大小为1MB,硬盘的条带大小为64KB。

7 磁盘镜像

磁盘镜像,适用于RAID 1和RAID 10,是指执行写数据的任务时,会将同样的数据同时写入两块硬盘,以实现100%的数据冗余度。由于两块硬盘上的数据完全相同,当一块硬盘故障时,数据不会丢失。另外,同一时间,两块盘上的数据是完全相同的,当一块硬盘故障时,由于数据是同时读写,因此数据流不会中断。

磁盘镜像带来的是100%的完全冗余,但是其代价是比较昂贵的,因为在镜像过程中,每个硬盘都需要一个备份盘。

8 外部配置

外部配置,是区别于当前RAID控制卡的配置来说的,在配置界面中一般体现为“Foreign Configuration”之类的字样。

一般在下述情况下,会有外部配置出现:

  • 一个新安装到服务器上的物理硬盘中存在RAID配置信息,RAID控制卡会将此类信息识别为外部配置。
  • 服务器更换了RAID控制卡后,新RAID控制卡会将当前存在的RAID信息识别为外部配置。
  • 热插拔RAID组的成员盘后,该成员盘会被标记为携带外部配置。

对检测出来的外部配置,可以根据服务器实际情况进行处理。例如,当新插入的硬盘携带的RAID信息不符合当前使用场景时,可以删除此配置。更换RAID控制卡后,如果仍然想使用之前的配置,就可以导入该配置,使其在新RAID控制卡上生效。

9 硬盘节能

RAID控制卡具备硬盘节能功能。此功能根据硬盘配置和I/O活动允许硬盘停转。所有SAS和SATA机械硬盘均支持此功能。

当硬盘节能功能开启时,RAID控制卡下挂载的空闲状态的硬盘和空闲热备盘均处于节能状态。当有相关操作(例如创建RAID组,创建热备盘,动态扩盘,进行热备重构)时可唤醒正处于节能状态的硬盘。

10 硬盘直通

硬盘直通,即“JBOD”功能,又称指令透传,是不经过传输设备处理,仅保证传输质量的一种数据传输方式。

打开硬盘直通功能后,RAID控制卡可对所连接的硬盘进行指令透传,在不配置RAID组的情况下,用户指令可以直接透传到硬盘,方便上层业务软件或管理软件访问控制硬盘。

例如,服务器操作系统安装过程中,可以直接找到挂载在RAID控制卡下的硬盘作为安装盘;而不支持硬盘直通的RAID控制卡,在操作系统安装过程中,只能找到该RAID控制卡下已经配置好的虚拟磁盘作为安装盘。



10T 技术资源大放送!包括但不限于:Linux、虚拟化、容器、云计算、网络、Python、Go 等。在 开源Linux 公众号内回复 10T,即可免费获取!

有收获,点个在看 

浏览 1006
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报