目录
1、RAID技术概述
2、RAID数据组织形式
3、RAID数据保护方式
4、常用的RAID级别
4.1 RAID 0
RAID 0工作原理
RAID 0数据的存取
4.2 RAID 1
RAID 1工作原理
RAID 1数据的存取
4.3 RAID 3
RAID 3工作原理
RAID 3数据的存取
4.4 RAID 5
RAID 5工作原理
RAID 5数据的存取
4.5 RAID 6
RAID 6 P+Q的工作原理
RAID 6 DP工作原理
数据恢复
4.6 混合RAID
RAID 10
RAID 50
RAID(redundant array of independent disks)技术,独立磁盘冗余阵列,是提高磁盘可靠性和可用性的一种技术。RAID技术出现的初衷是把多个小容量的硬盘组合起来,以获得更大的存储容量。当前我们所说的RAID技术更多则是与数据保护相关,换言之,当物理设备失效时,RAID能够用来防止数据的丢失。
RAID技术的主要功能: 通过对硬盘上的数据进行条带化,实现对数据成块存取,减少硬盘的机械寻道时间,提高了数据存取速度。 通过对一阵列中的几块硬盘同时读取(并行访问),减少了硬盘的机械寻道时间,提高了数据存取速度。 通过镜像或者存储奇偶校验信息的方式,实现了对数据的冗余保护。
随着阵列技术的发展,已经产生了很多不同类型的RAID,但现在只有少数几种RAID仍在使用。选择不同的RAID类型意味着不同的性能/成本。 在存储设备中,可以通过2种方式实现RAID功能:硬件RAID和软件RAID。
总结来说,RAID技术的优势体现在如下几个方面:
- 把多个硬盘组合成一个逻辑盘组,以提供更大容量的存储。
- 将数据分割成数据块,对多个硬盘并行进行写入/读出,提高硬盘访问速度。
- 通过提供镜像或奇偶校验来提供容错。
条带(strip):硬盘中单个或多个连续的扇区构成一个条带,它是一块硬盘上进一次数据读写的最小单元。它是组成分条的元素。
分条(stipe):同一个硬盘阵列中,多个硬盘驱动器上的相同位置的条带(或者说相同编号)。
分条深度:一个条带的大小。
分条宽度:一个分条中,数据盘成员的个数。
1.冗余备份:拿出额外的硬盘,对数据进行保存备份。
2.奇偶校验算法:使用用户数据计算出额外的信息,同样的道理使用奇偶校验的RAID类型,必须拿出额外的校验硬盘。奇偶校验算法采用的是异或算法(XOR)。
奇偶校验算法:
这样不管哪块硬盘出现了损坏,都可以通过剩余的两块硬盘来推算出损坏的数据;前提是拿出了一块额外的校验硬盘来保证数据的安全。
RAID技术将多个单独的物理硬盘以不同的方式组合成一个逻辑硬盘,提高了硬盘的读写性和数据安全性,根据不同的组合方式分为不同的RAID级别。
在所有的RAID级别中,RAID 0(也被称为条带化RAID)的具有最高的存储性能。RAID 0使用条带化技术将数据分布存储于RAID组的所有硬盘中。逻辑容量为所有物理硬盘的总和。
一个RAID 0包含至少2个成员盘。RAID 0组将数据分为大小不等的从512个字节至兆字节的数据块(通常是512字节的倍数),并行将其写入到不同的硬盘中。
如图所示的两个硬盘(驱动器)构成的RAID中:前两块数据被写入到分条0上,其中,第一个数据块被写在硬盘1的条带0上,第二个数据块并行存放在硬盘2的条带0上;这时,再下一个数据块被写到硬盘1上的下一个条带(条带1)上,以此类推。以这种方式,I/O的负载平衡分布在RAID中的所有硬盘上,由于数据传输总线上的速度远大于硬盘读写速度,因此,RAID组上的硬盘可以认为在同时进行读写。
一个RAID 0的硬盘组中的硬盘必须具有相同的大小,转速。如果一个RAID0的由4个硬盘组成,则读写速率理论上可达单个硬盘的4倍(实际上可能有系统损耗),容量为单个硬盘的4倍。RAID 0 中硬盘的容量大小不同,可用容量是最小的硬盘的容量的4倍,速度也是最小硬盘速度的4倍。
RAID 0像是提供了一个单一的大容量的硬盘,还同时具有非常快速I/O的特点。在RAID 0技术使用之前,类似RAID 0的一种技术被称为JBOD。一个JBOD(Just a Bundle Of Disks,简称一堆硬盘)是一组硬盘组合成一个虚拟的大硬盘。与RAID 0最大的区别是,一个JBOD的数据块不是同时并行写入不同硬盘的。在JBOD中,只有将第一块硬盘的存储空间使用完,才会使用第二块硬盘。所以JBOD总的可用容量是所有个硬盘容量的总和,但性能是单个硬盘的性能!
写入数据:
数据读取
RAID 1(也被称为镜像结构的硬盘阵列)旨在建立一个高安全性的RAID级别。RAID1使用2个相同的硬盘系统,并设置了镜像。一个RAID 1组存储的数据量只是单个硬盘的容量,另一硬盘保存的是数据的副本。
当数据写入到一个硬盘上时,数据的副本会同时存储在镜像硬盘上。当源硬盘(物理)失败时,镜像硬盘从源硬盘接管服务,保证服务的连续性。镜像盘作为备份,提供高数据可靠性。 相当于每一G字节的数据存储占用了2G字节的硬盘空间,所以说两个硬盘组成的RAID 1的空间利用率是50%。
RAID 1的两个硬盘必须具有相同的大小。如果两个硬盘的容量大小不同,可用容量是最小的硬盘的容量。
写入数据
数据读取
RAID3与RAID 0类似,不过RAID 3带有专用的奇偶校验分条。在RAID 3中,一块专用硬盘(校验盘)用来保存同一分条上其他硬盘的相应条带中的校验数据。如果其他盘上的数据出现丢失,或者磁盘出现损坏,我们可以使用校验盘的信息来恢复,损失的数据。
RAID 3适用于数据密集型或单用户环境,需要长期、连续访问的数据块。RAID 3将数据写入操作分配给RAID组内的数据成员盘。但是,当有新数据需要写入时,无论写入哪个硬盘,RAID 3都需要重新计算并重写校验信息。因此,当某个应用程序需要大量写入时,RAID 3的奇偶校验盘将有很大的工作量。因为需要等待奇偶校验,所以会对RAID 3组的读写性能有一定影响。此外,因为校验盘有较高的工作负载,它往往是RAID 3里最容易失效的硬盘。这就是为什么校验盘被称为RAID 3的瓶颈的原因。
假定一个RAID 3的硬盘数为N,其中有效用户数据存储容量为N-1个硬盘的容量。与其他RAID一样,RAID 3中的成员盘的容量和转速应该是相同的。
写入数据
数据读取
在RAID 3中,数据以分条的方式进行读取。RAID中的每个硬盘的硬盘驱动器被控制,所以RAID 3里同一条带上的数据块可以并行读取。所以,RAID 3的每一个硬盘被充分利用,提升了读取性能。 RAID 3使用并行数据读(写)模式。 RAID 3的读取性能取决于读取的数据量和RAID 3阵列的硬盘数量。
RAID 5是改进版的RAID 3,使用条带化并计算奇偶校验信息。在RAID 3中有一块专用硬盘负责奇偶校验数据的写入和读取,这导致了我们前面提到的性能瓶颈问题。RAID 5使用的是分布式奇偶校验,每个成员硬盘将用于存储用户数据和奇偶校验数据。所以RAID 5没有瓶颈或热点。
假定一个RAID 5的硬盘数为N,其中有效用户数据存储容量为N-1个硬盘的容量。与其他RAID一样,RAID 5阵列中的成员盘的容量和转速应该是相同的。 在RAID 3级别和RAID 5级别的硬盘阵列中,如果一个硬盘失效,该硬盘组将从在线(正常)状态转变为降级状态,直到完成重构失效硬盘。如果RAID中的另一个硬盘也出现故障,则硬盘组的数据将丢失
写入数据
数据读取
前面讨论到的RAID组数据保护都是考虑单一硬盘失效的场景(RAID 0排除在外)。现在,硬盘的容量已经增加了很多,同时重构时间也增加了。很多大容量的硬盘组合起来形成的一个RAID 5组重建失效硬盘可能需要几天,而不是几个小时。在重建过程中,系统处于降级状态,这种情况下,任何额外的硬盘故障都会导致硬盘组失效和数据丢失。
这就是为什么一些组织或单位需要一个双冗余系统。换句话说:一个RAID组应该允许2个硬盘故障时,同时所有的数据应该是可访问的。这种双重冗余数据保护类型的实现有一些不同的方式:
RAID 6的正式名称是分布式双校验RAID。本质上它是一种改进的RAID 5,也具有条带化和分布式奇偶校验。现在在RAID 6有双校验,这意味着两点: 写入用户数据时,附加的双校验计算需要进行。所以,在所有RAID 类型中,RAID 6是 “最慢”的。 额外的校验信息需要占用两个盘的存储空间。这就是为什么我们把RAID 6看作是一个N+2类型的RAID。
具有两种校验算法的RAID类型;需要至少N+2个硬盘来构成阵列,一般用在数据可用性、可靠性极高的场合。
目前,RAID 6没有一个统一的标准。不同公司以不同的方式实施RAID 6。以下2个是主要的实现方式:
- RAID P + Q:华为,HDS
- RAID DP:NetApp
这2种模式获得校验数据的方法不同。然而,在RAID组有2块硬盘故障的情况下,他们可以确保数据的完整性,并支持数据访问。
RAID6 P+Q需要计算出两个校验数据P和Q,当有两个数据丢失时,根据P和Q恢复出丢失的数据。校验数据P和Q是由以下公式计算得来的:
RAID 6采用P+Q校验时,P和Q是2个彼此独立的校验值。它们使用不同的算法,用户数据和校验数据分布在同一分条的所有硬盘上。
P是用户数据块的简单的异或运算得到的。Q是对用户数据进行GF(GF =伽罗瓦域)变换再异或运算得到,α,β和γ为常量系统,由此产生的值是一个所谓的“芦苇码”。该算法将数据硬盘相同分条的所有数据进行转换和异或运算。
如图所示,P1是通过对D0,D1,D2所在的分条0进行异或操作获得的,P2是对D3,D4,D5所在的分条1异或操作实现的。 Q1是对D0,D1,D2 所在的分条0条进行GF变换再异或操作实现的,Q2是对D3,D4,D5 所在的分条1进行GF变换再异或运算。
如果一个硬盘中的一个分条失效,只需有P校验值即可恢复失效硬盘上的数据,异或运算在P校验值和其它数据硬盘间执行。如果同一个分条有2个硬盘同时故障,不同的场景有不同的处理方法。如果Q校验值不在失效的一个硬盘上,数据可以被恢复到数据盘上,然后重新计算校验信息。如果Q在其中一个失效的硬盘上,两个的公式都需要使用才能恢复两个失效硬盘上的数据。
DP - Double Parity,就是在RAID 4所使用的一个行XOR校验硬盘的基础上又增加了一个硬盘用于存放斜向的XOR校验信息 具体实现过程如下:
RAID 6 DP也有两个独立的校验数据块。第一个校验信息与RAID 6 P+Q的第一个校验值是相同的,第二个不同于RAID 6 P+Q,采用的是斜向异或运算得到行对角奇偶校验数据块。
行奇偶校验值是同一分条的用户数据异或运算获得到,所图所示:P0是由分条0上的D0,D1,D2和D3异或运算得到,P1由分条1上的D4,D5,D6,D7异或运算,等等。所以,P0 = D0 ⊕D1⊕ D2⊕D3,P1 = D4⊕D5⊕D6⊕D7,如此类推。 第二个校验数据块是由阵列的对角线数据块进行异或运算。数据块的选择过程比较复杂。DP0是由硬盘1 的分条0上的D0,硬盘2的分条1上的D5,硬盘3上的分条2的D10,和硬盘上4 分条3上的D15异或操作得到。DP1是对硬盘2 的分条0上的D1,硬盘3的分条1上的D6,硬盘4上分条2的 D11,和的第一块校验硬盘上分条3 上的P3进行异或运算得到,如此类推。
一个RAID 6阵列能够容忍双硬盘失效。如上图所示,如果硬盘1和2失效,上面的所有数据会丢失,但其他硬盘上的数据和奇偶校验信息是有效的,我们了解一下阵列数据是如何恢复的。恢复D12采用DP2和斜向校验(D12 = D2⊕D7⊕P2⊕DP2);恢复D13利用P3和横向校验(D13 = D12⊕D14⊕D15⊕P3),通过使用DP3和斜向校验恢复D8(D8 = D3⊕P1⊕DP3⊕D13),使用P2和横向校验得到D9(D9 = D8⊕D10⊕D11⊕P2),恢复D4采用DP4和斜向校验,利用P1和横向校验得到D5等。这些操作是重复的,直到所有数据在故障盘被恢复。
一个RAID 6组的性能,无论算法是DP还是P+Q,相对都比较慢。因此,RAID 6适用两种场景: 数据非常重要,需要尽可能长的时间处于在线和可使用的状态。 使用的硬盘容量非常大(通常超过2T)。大容量硬盘的重建时间较长,两个硬盘都失效是会造成数据较长时间不能访问。在RAID 6中,可以实现一个硬盘重构时另一个硬盘失效。一些企业希望在使用大容量硬盘后,存储阵列的供应商使用一个双重保护的RAID组。
RAID 10是将镜像和条带进行组合的RAID级别,先进行RAID 1镜像然后再做RAID 0。RAID 10也是一种应用比较广泛的RAID级别。
对于大多数的企业客户而言,RAID 0并不是一个真正可以操作的选择,而RAID 1受限于硬盘容量利用率。RAID 10组合了RAID 1和RAID 0,提供了最好的解决方案,特别是在随机写入时,由于不存在写惩罚,性能优势比较明显。 RAID 10组的硬盘数量总是偶数。一半硬盘进行用户数据写入,另一半保存用户数据的镜像副本。镜像基于分条执行。
在图中,物理硬盘1和2构成一个RAID 1,物理硬盘3和物理硬盘4形成另一个RAID 1。这2个RAID 1子组再形成RAID 0。 RAID 10组写入数据时,子组间采用并行的方式写入数据块,子组内数据采用镜像的方式写入。如图所示,D0将写入物理硬盘1,副本将被写入物理硬盘2。
当硬盘在不同的RAID 1组故障(例如硬盘2和4),RAID 10组的数据访问不受影响。这是因为其他2个硬盘(3和1)上有故障盘2和4上数据的完整副本。但是,如果同一RAID 1子组的硬盘(例如,硬盘1和2)在同一时间失败,数据将不能访问。
从理论上讲,RAID 10可以忍受总数一半的物理硬盘失效,然而,从最坏的情况来看,在同一个子组的两个硬盘故障时,RAID 10也可能出现数据丢失。通常RAID 10用来保护单一的硬盘失效。
RAID 50是将RAID 5和RAID 0进行两级组合的RAID级别,第一级是 RAID 5,第二级为RAID 0。
RAID 50是RAID 0和RAID 5的组合。两个子组被配置成RAID 5,这两个子组再形成RAID 0。每个RAID 5子组完全独立于对方。RAID 50需要至少六个硬盘,因为一个RAID 5组最少需要三个硬盘。
所图所示,物理硬盘1,2,和3形成一个RAID 5,物理硬盘4,5,和6形成另一组RAID 5组。两个RAID 5子组间再构成一个RAID 0。 在RAID 50中,RAID可以同时接受多个硬盘的并发故障。然而,一旦两块硬盘在同一RAID5组同时失败,RAID 50的数据将丢失。