RAIDS详细分析整理

对RAID的简单了解

RAID (Redundant Array of Independent Disks) 独立磁盘冗余阵列,简称磁盘阵列。

RAID是一类多磁盘管理技术,其向主机环境提供了成本适中、数据可靠性高的高性能存储。

RAID是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余技术。

其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。


RAID常见的几种方案

RAID常见的几种方案可分为:RAID0, RAID1, RAID3, RAID5, RAID6, RAID10
(注意这不是版本升级,而是Equal level的设计方案)
在这里插入图片描述
RAID0: 将多块磁盘组合在一起形成一个大容量的存储,当我们写数据的时候,会将数据分成N份,以独立的方式实现N块磁盘的读写,那么这N份数据会同时并发的写到磁盘中,因此执行性能很高(从理论上讲,RAID0的读写性能是单块磁盘的N倍, 但是磁盘寻址有性能的开销)。听起来很好,但是RAID0不提供数据校验或冗余备份,也就是说,如果N块中,有一块磁盘损坏,数据无法恢复,这就体现了方案的不可靠性。为了解决这个不可靠,于是引入了RAID1。
在这里插入图片描述
RAID1:在写数据的时候,为了提高可靠性,为此,将同一份数据无差别的写两份到磁盘中,分别是工作磁盘和镜像磁盘,这样如果一块硬盘坏掉了,可以基于另一块硬盘去修补。可靠性很强,但是性能低了,毕竟多存储了一部分数据,导致实际空间效率仅用了50%。为此,想要既保持数据的可靠性高、又保存数据的性能好。提出了RAID3方案。
在这里插入图片描述
RAID3:相当是对RAID0和RAID1进行的改善。其采用RAID0的方案,分成多分同时写入多块磁盘中,但会留出一块磁盘用于写奇偶校验码。一旦某块磁盘坏掉了,就可以用奇偶校验码磁盘利用其他的磁盘去恢复数据,但是会导致奇偶校验码磁盘多次访问从而造成了损坏。为此提出了RAID5的方案。
在这里插入图片描述
RAID5:这种方案是将存储性能、数据安全、存储成本兼顾的一种方案。在这里我们不在需要用独立的磁盘进行校验码的保存,而是将校验码信息分布到各个磁盘上。比如N块磁盘,当写入数据的时候,不单纯的存储数据,还会将数据的校验码信息也一起写在这块磁盘中。一旦磁盘损坏,就可以用剩下的数据和对应的奇偶校验码去恢复损坏的数据。要注意的是,RAID5方式,最少需要三块磁盘进行构建磁盘阵列,允许最多同时损坏一块磁盘,如果两块磁盘同时损坏,那么数据就无法恢复了。问题来了,能不能即便两块磁盘同时损坏,也能保证数据的可恢复呢?有RAID6。
在这里插入图片描述
RAID6: 其在RAID5的基础上,引入了双重检验的概念。也就是所除了对每块磁盘上同级数据XOR校验区外,还有对每个数据块的XOR校验区,这样每个数据块就有两个校验保护措施,因此数据的冗余性更高。虽然数据的冗余性好,读取的效率也比较高,但是写数据的性能就很差,因此RAID6在实际环境中应用的比较少哦。
在这里插入图片描述
RAID10(RAID 1+0): 可以看似RAID1和RAID0的一个结合体,首先将磁盘分为两块,当要写入数据的时候,将所有的数据在两份磁盘上同时写入,也就相当是双份数据,起到了数据保障的作用。在每一份磁盘上又会基于RAID0技术将数据分为N份并发的读写,这也就保证了数据的效率。当然这种方案,浪费的也比较严重。【RAID10属于RAID组合,后续详细分析RAID组合等级】
在这里插入图片描述
下图是对以上方案的总结:
在这里插入图片描述


对RAID原理的细致分析

SNIA对RAID的定义是:一种磁盘阵列,部分物理存储空间用来记录保存在剩余空间上的用户数据的冗余信息。当其中一个磁盘或访问路径发生故障时,冗余信息可用来重建用户数据。

RAID的初衷是为大型服务器提供高端的存储功能和冗余的数据安全。

在整个系统中,RAID被看作是由两个或更多磁盘组成的存储空间,通过并发的在多个磁盘上读写数据来提高存储系统的I/O性能。

大多数RAID等级具有完备的数据校验、纠正措施、从而提高系统的容错性,甚至是镜像方式,大大增强系统的可靠性。


RAID的关键技术

RAID的两个关键技术是:1.提高数据的可靠性。2.提高I/O的性能。

磁盘阵列中,数据分散在多个磁盘中,但对于计算机系统来说,就是一个单独的磁盘。

通过把相同数据同时写入到多块磁盘,或者将计算的校验数据写出到阵列中来获得冗余能力,当单块磁盘出现故障时可以保证不会导致数据的丢失。

有些RAID等级(RAID6)允许更多的磁盘同时发生故障(要知道,多数标准系列的RAID如果两块以上的磁盘发生故障会导致数据无法恢复)可以用新的磁盘替换故障磁盘,RAID会自动根据剩余磁盘中的数据和校验数据重建丢失的数据,从而保证数据的一致性。

对于RAID,其数据分散保存在RAID中的多个不同磁盘上,并发数据读写要高于单个的硬盘读写,也为此可以获得更高的聚合I/O带宽

当然,磁盘阵列会减少全体磁盘的总可用的存储空间,牺牲空间换取更高的可靠性和性能。如上诉所说的RAID1存储空间利用率仅有50%,RAID5会损失其中一个磁盘的存储容量,空间利用率为(n-1)/n。

磁盘阵列的好处在于:磁盘阵列可以在部分磁盘损坏的情况下,仍能保持系统不中断的连续运行,在重建故障磁盘数据到新磁盘的过程中,系统可以正常运行,但是性能肯定有所降低。一些磁盘阵列在添加或删除磁盘的时候必须要停机,而有些则支持热交换,也就是不用停机的去替换磁盘驱动器,这种高磁盘阵列主要用于要求高的可能性的应用系统(系统不能停机或尽量减少停机的时间)

一般来讲,RAID不可作为一种数据备份的代替方案,他对非磁盘故障(人为破坏,意外删除)造成的数据丢失无能为力。毕竟对于RAID来说,数据是完好的,没有发生数据丢失的问题。所以数据备份、容灾等措施应于RAID相辅相成,在不同的层次进行数据的保护。


对RAID的优势分析

RAID思想从提出后,就广泛的被业界所接纳,存储工业界投入了大量的时间和财力进行研究和开发相关产品。而且随着处理器、内存、计算机接口等技术的发展,RAID不断的进行技术上的发展和革新,同样也在计算机存储领域得到了广泛的应用。从高端系统逐渐延申到普通的中低端系统。RAID的主要优势有:大容量、高性能、可靠性、可管理性。

大容量

这是RAID的一个显然优势,它扩大了磁盘的容量,由多个磁盘组成的RAID系统具有海量的存储空间。现在单个磁盘的容量可以达到1TB以上,这样的RAID的存储容量可以达到PB级,大多数的存储需求都可以满足。

一般来说,RAID可用容量要小于所有成员磁盘的总容量。不同等级的RAID算法需要一定的冗余开销,具体的容量开销与采用的存储算法有关。如果已知RAID算法和容量,是可以计算处RAID的可用容量。通常,RAID的利用率在50%~90%。

高性能

RAID的高性能受益于数据条带化技术(把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中不同磁盘上的方法)。

单个的磁盘的I/O性能受到接口、带宽等计算机技术的限制、这也成为了性能提高的瓶颈,通过数据条带化技术,将数据的I/O分散到各个成员磁盘上,从而获得比单个磁盘成倍增长的聚合I/O性能。

可靠性

从理论上讲,多个磁盘组成的RAID系统在可靠性方面比单个的磁盘要差. 因为假定单个磁盘故障会导致整个RAID不可用。

实际上对于后面的优化,RAID采用镜像和数据校验等冗余技术,打破了这个假定。

镜像是最为原始的冗余技术,把某组磁盘驱动器上的数据完全复制到另一组磁盘驱动器上,保证数据有副本(用U启给电脑操作系统做备份的时候,不就是这样么?)比起镜像的50%的冗余开销,数据校验要小很多,他利用校验冗余信息对数据进行校验和纠错。

RAID冗余技术大幅度提升数据可用性和可靠性,保证了若干磁盘出错时,不会导致数据的丢失,从而不会影响系统的运行。

可管理性

RAID是一种虚拟技术,它是将多个物理磁盘驱动器虚拟成一个大容量的逻辑驱动器。

对于外部主机系统来说,RAID是一个单一的,快速可靠的大容量磁盘驱动器。这样用户可以在这个虚拟驱动器上来组织和存储应用系统数据。从用户应用角度看,可使存储系统简单易用,管理也很方便。

由于RAID内部完成了大量的存储管理工作,管理员只需要管理单个虚拟驱动器,可以节省大量的管理工作。RAID可以动态的增删磁盘驱动器,可以自动的进行数据校验和数据重建,这些都可以大大的简化管理工作。


对RAID的关键技术分析

RAID主要有三个关键技术:镜像、数据条带、数据校验。

镜像

镜像是可以将数据复制到多个磁盘中,一方面可以提高可靠性,另一方面可以并发的从两个或多个副本读取数据来提高可读性。

显而易见,硬件的读写性能要稍微的低一些,确保数据正确的写道多个磁盘中,需要消耗更过的时间。镜像是一种冗余技术,为磁盘提供了保护功能,防止磁盘数据发生故障而造成数据的丢失。

对于RAID而言,采用镜像技术会同时在阵列之中产生两个完全相同的数据副本,并分布在两个不同的磁盘驱动器上,镜像提供了完全的数据冗余能力,当一个数据副本失效不可用的时候,外部系统依旧可以正常访问另一个副本,从而不会对系统运行和性能产生影响。

而且,镜像不需要额外的计算和校验,故修复非常快,直接复制就可以。镜像技术可以从多个副本进行并发读取数据,提供更高的读I/O性能,但是不能并行写数据,写多个副本会导致IO的性能降低。

镜像技术提供了非常高的数据安全性,其代价也是非常昂贵的,需要至少双倍的存储空间。高成本限制了镜像技术的广泛应用。主要应用于至关重要的数据保护,这种情况下数据丢失会造成巨大的损失。另外,镜像通过拆分能获得特定时间点上的数据快照。

数据条带

数据带条就是将数据分片保持在多个不同的磁盘,多个数据分片共同组成一个完整的数据副本,这与镜像的多个副本是不同的。

它通常用于性能考虑,数据条带具有更高的并发粒度。

当访问数据时,可以同时对位于不同磁盘上数据进行读写操作,从而获得非常可观的I/O性能提升。

磁盘存储的性能瓶颈在于磁头寻道定位,它是一种慢速机械运动,无法与高速的CPU匹配。

再者,单个磁盘驱动器性能存在物理极限,I/O性能非常有限。

RAID由多块磁盘组成,数据条带技术将数据以块的方式分布存储在多个磁盘中,从而可以对数据进行并发处理。

这样写入和读取数据就可以在多个磁盘上同时并行,并发产生非常高的聚合I/O,有效提高了整体的I/O性能,而且具有良好的线性扩展性。

这对大量数据尤其显著,如果不分块,数据只能按顺序存储在磁盘阵列中,需要时,还需要按顺序进行读取。而通过条带技术,可以获得数倍与顺序访问的性能提升。

数据条带技术的分块大小非常关键。条带颗粒可以是一个字节到几KB大小,分块越小,并行处理能力就越强,数据存取速度就越高,但同时就会增加快存储的随机性和快寻址时间。

实际应用中,要根据数据特征和需求来选择合适的分块大小,在数据存储随机性和并发处理能力之间进行平衡,以争取尽可能的整体性能。

数据条带是基于提高I/O性能而提出的,也就是他只关注性能,而对数据可靠性,可用性没有任何的改善,实际上,其中任何一个数据条带损坏都会导致整个数据无法使用,采用数据条带技术反而增加了数据发生丢失的情况。

数据校验

镜像具有更高的安全性、高读写性能,但是冗余开销太昂贵。

数据带条通过高并发性大幅度提升性能,但是对数据的安全性、可靠性没有做考虑。

为此,数据校验是一种冗余技术,他用校验数据来提供数据的安全,可以检测数据错误,并且能够在一定的能力范围内进行数据的重构。

相对镜像,数据校验技术减少了冗余开销,用较小的代价换取了极佳的数据完整性和可靠性。

相对数据条带,数据校验提高了数据的安全性

RAID的不同等级往往结合数据条带和数据校验技术进行结合使用。

采用数据校验时,RAID要写入数据同时进行校验计算,并将得到的校验数据存储在RAID成员磁盘中,校验数据可以集中保持在某个磁盘或分散存储在多个不同的磁盘中,甚至校验数据也可以分块。

不同的RAID等级实现各不相同,当其中一部分数据出错时,就可以对剩余数据和校验数据进行反校验计算重建丢失的数据。

校验技术相对于镜像技术的优势在于节省大量的开销,但由于每次数据读写都需要进行大量的校验运算,对计算机的运算速度要求很高,必须使用硬件RAID控制器,在数据重建恢复方面,检验技术比镜像技术复杂的多且慢的多。


补充:数据校验算法

关于数据校验算法常用的有:海明校验码和异或校验码

海明校验码:不仅能检测错误,还能给出错误位置并自动纠正。其主要思想是:将有效的信息按照某种规律分成若干组,对每一组作为奇偶测试并安排一个校验位,从而能提供多位检错信息,以定位错误点,并进行纠正,实质是一种多重奇偶校验。

异或校验码:是通过异或逻辑运算产生,将一个有效的信息与一个给定的初始值进行异或运算,会得到校验信息。如果有效信息出现错误,通过校验信息与初始值的异或运算还能还原正确的有效信息。


RAID的组合等级

通过以上内容,我们知道了RAID等级各有优势和不足。自然地,我们想到把多个RAID等级进行作何起来,实现优劣互补,从而达到性能、数据安全指标达到更高。

目前在业界和学术研究中提到的组合等级有:RAID00、RAID01、RAID10、RAID100、RAID30、RAID50、RAID53、RAID60,但实际得到的较为广泛的应用只有RAID01和RAID10两个等级,当然,组合等级的实现成本一般都非常昂贵,只是少数特定场合应用。

RAID00

RAID00是由多个RAID0组成的高级RAID0,其余RAID0的区别在于,在RAID0条带化结构的基础上,再进行条带化处理。这种阵列可以提供更大的存储容量,更高的I/O性能和更好的I/O负载均衡。

RAID01 和 RAID10

RAID01兼容了RAID0和RAID1的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化,其是将数据同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。RAID10,相比于RAID01其是先做镜像,再做条带化技术,是对虚拟磁盘实现镜像,在相同的配置下,RAID01比RAID10具有更好的容错能力。

RAID100

RAID100,也可看成是RAID1 + 0 + 0, 可以看成RAID10 + 0, 也就是带有条带化技术的RAID10。RAID10的缺陷是,任意一个RAID1损坏一次磁盘不会发生数据的丢失,但是剩下的彩票存在单点故障的危险。故RAID突破了单个RAID控制器对物理磁盘数量的限制,可以获得更高的I/O负载均衡,I/O压力分散到更多的磁盘上,进一步提高了随机读性能,并有效的降低单点故障风险。因此,RAID100通常是大数据库的最佳选择。

RAID30(RAID53)、RAID50和RAID60
这三种RAID等级和RAID00原理基本类似,区别在于磁盘换成了RAID3、RAID5以及RAID6。
利用多层RAID配置,充分利用优劣互补,从而在存储容量、数据安全以及I/O负载均衡等方面大幅度提升性能。


RAID的实现方式

对于RAID系统来说,其实现方式可分为三种:软件方式实现、硬件方式实现以及硬软混合方式实现。

软件方式实现(软RAID)

软RAID没有专用的控制芯片和I/O芯片,完全由操作系统和CPU来实现所有的RAID功能。现代操作系统基本上都提供了软RAID支持,通过在磁盘设备驱动程序上添加一个软件层,提供一个物理驱动器与逻辑驱动器之间的抽象层。

软RAID的配置管理和数据恢复都比较简单,但是RAID的所有任务的处理完全是由CPU来完成的,比如计算校验值,所以执行效率低下,这种方式需要消耗大量的运算资源,支持RAID模式较少,很难广泛应用。

软RAID是由操作系统实现的,因此系统所在的分区不能作为RAID的逻辑成员磁盘,软RIAD不能保护系统磁盘的。对于部分操作系统而言,RAID的配置信息保持在系统信息中,而不是单独的以文件袋额形成存储在磁盘上。当系统意外崩溃而需要重新安装的时候,RAID信息就会丢失,另外磁盘的容错技术并不等于完全支持在线更换、热插拔或者热交换,能够支持错误磁盘的热交换与操作系统实现相关,有的操作系统热交换。

硬件方式实现(硬RAID)

硬RAID拥有自己的RAID控制处理与I/O处理芯片,甚至还有阵列缓冲,对CPU的占用率和整体性能是三类实现中最优的,但是实现成本也是最高的。硬RAID通常支持热交换技术,在系统的运行下更换故障磁盘。

硬RAID包含RAID卡和主板上集成的RAID芯片、服务平台多采用RAID卡,RAID卡由RAID核心处理芯片、端口、缓存以及电池4部分实现。

软硬混合方式实现(硬RAID)

从上诉不难发现,软RAID性能低,不能保护系统分区,而硬RAID成本高,不同的RAID相互独立、不具互操作。因此,人们采用软件与硬件结合的方式来实现RAID,从而获得在性能和成本上的一个折中,即较高的性价比。

折中RAID虽然采用了处理控制芯片,但是为了节省成本,芯片往往处理能力较弱而大部分任务还是通过固件驱动,也就是软件由CPU完成的。


主流RAID等级技术对比
在这里插入图片描述


参考连接
1.https://zh.wikipedia.org/wiki/RAID
2.https://www.zhihu.com/question/20131784
3.https://zhuanlan.zhihu.com/p/51170719
4.http://www.hack520.com/169.html
5.https://blog.csdn.net/ensp1/article/details/81318135

Guess you like

Origin blog.csdn.net/qq_38973721/article/details/121915421