0、前言
独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同地方的方法。
RAID技术主要包含RAID 0~RAID 50等数个规范,常见的规范有RAID 0、RAID 1、RAID 3、RAID 5、RAID 6、RAID 10和RAID 50等。
一、技术概述
01
常见RAID级别下的读写原理
1.1 RAID 0(How does RAID 0 work?)
RAID 0又称为条带化(Stripe)或分条(Striping),它代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个硬盘上存取。这样,系统有数据请求就可以被多个硬盘并行的执行,每个硬盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高硬盘整体读写性能。
如图1-1所示,系统向三块硬盘组成的逻辑硬盘(RAID 0硬盘组)发出的I/O数据请求被转化为同时对三块硬盘进行I/O操作。通过建立RAID 0,原先顺序的数据请求被分散到所有的三块硬盘中同时执行。三块硬盘的并行操作在理论上使同一时间内硬盘读写速度提升了3倍。虽然由于总线带宽等多种因素的影响,实际的提升速率会低于理论值,但是大量数据并行传输与串行传输比较,提速效果显著。
图1-1RAID 0数据分布
1.2 RAID 1(How does RAID 1 work?)
RAID 1又称为镜像(Mirror或Mirroring),它能最大限度的保证用户数据的可用性和可修复性。RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。
如图1-2所示,系统向两块硬盘组成的逻辑硬盘(RAID 1硬盘组)发出I/O数据请求。通过建立RAID 1,向硬盘Disk 0写入数据时,系统会同时把用户写入Disk 0的数据自动复制到Disk 1上。读取数据时,系统先从源盘Disk 0读取数据,如果读取数据成功,则系统不去读取镜像盘Disk 1上的数据;如果读取源盘数据失败,系统自动转而读取镜像盘上的数据。这种情况下不会造成用户工作任务的中断。
图1-2RAID 1数据分布
1.3 RAID 5(How does RAID 5 work?)
RAID 5是一种存储性能、数据安全和存储成本兼顾的存储解决方案。为保障存储数据的可靠性,采用循环冗余校验方式,并将校验数据分散存储在RAID组的各成员盘上。当RAID组的某个成员盘出现故障时,通过其他成员盘上的数据可以重新构建故障硬盘上的数据。
如图1-3所示,P0为D0、D1和D2的奇偶校验信息,P1为D3、D4和D5的奇偶校验信息,以此类推。RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID 5的成员盘上,并且奇偶校验信息和相对应的数据分别存储于不同的硬盘上。当RAID 5的一个硬盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息可以恢复被损坏的数据。
图1-3RAID 5数据分布
1.4 RAID 10(How does RAID 10 work?)
RAID 10是将镜像和条带进行两级组合的RAID级别,即RAID 0+RAID 1的组合形式,第一级是RAID 1,第二级是RAID 0。RAID 10是存储性能和数据安全兼顾的方案。它在提供与RAID 1一样的数据安全保障的同时,也提供了与RAID 0近似的存储性能。
如图1-4所示,Disk 0和Disk 1组成一个子组0,Disk 2和Disk 3组成一个子组1,子组内的硬盘互为镜像。系统向硬盘发出I/O数据请求时,原先顺序的数据请求按照RAID 0的方式,被分散到两个子组中并行执行,同时通过RAID 1的方式,系统在向硬盘Disk 0写入数据的同时把数据自动复制到硬盘Disk 1上,向硬盘Disk 2写入数据的同时把数据自动复制到硬盘Disk 3上。
图1-4RAID 10数据分布
02
常用RAID级别的比较
在进行RAID级别选择时,需考虑到以下三点:
可靠性
读写性能
硬盘利用率
不同RAID级别的可靠性、读写性能和硬盘利用率不同。各RAID级别的对比分析如表1-1所示。
表1-1各RAID级别比较
RAID策略配置可参考以下意见:
建议对于核心业务(如运营商的计费等系统或金融A类在线交易系统等),性能层RAID策略配置为RAID 6(8D 2P)。对于非核心业务,性能层RAID策略配置为RAID 5(8D 1P)。
容量层(NL-SAS)的RAID策略推荐配置为RAID 6。
表1-2表1存储池保护级别
二、基本原理
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。RAID 是一类多磁盘管理技术,其向主机环境提供了成本适中、数据可靠性高的高性能存储。SNIA 对 RAID 的定义是 [2] :一种磁盘阵列,部分物理存储空间用来记录保存在剩余空间上的用户数据的冗余信息。当其中某一个磁盘或访问路径发生故障时,冗余信息可用来重建用户数据。磁盘条带化虽然与 RAID 定义不符,通常还是称为 RAID (即 RAID0 )。
RAID 思想从提出后就广泛被业界所接纳,存储工业界投入了大量的时间和财力来研究和开发相关产品。而且,随着处理器、内存、计算机接口等技术的不断发展, RAID 不断地发展和革新,在计算机存储领域得到了广泛的应用,从高端系统逐渐延伸到普通的中低端系统。RAID 技术如此流行,源于其具有显著的特征和优势,基本可以满足大部分的数据存储需求。总体说来, RAID 主要优势有如下几点:
(1) 大容量
这是 RAID 的一个显然优势,它扩大了磁盘的容量,由多个磁盘组成的 RAID 系统具有海量的存储空间。现在单个磁盘的容量就可以到 1TB 以上,这样 RAID 的存储容量就可以达到 PB 级,大多数的存储需求都可以满足。一般来说, RAID 可用容量要小于所有成员磁盘的总容量。不同等级的 RAID 算法需要一定的冗余开销,具体容量开销与采用算法相关。如果已知 RAID 算法和容量,可以计算出 RAID 的可用容量。通常, RAID 容量利用率在 50% ~ 90% 之间。
(2) 高性能
RAID 的高性能受益于数据条带化技术。单个磁盘的 I/O 性能受到接口、带宽等计算机技术的限制,性能往往很有 限,容易成为系统性能的瓶颈。通过数据条带化, RAID 将数据 I/O 分散到各个成员磁盘上,从而获得比单个磁盘成倍增长的聚合 I/O 性能。
(3) 可靠性
可用性和可靠性是 RAID 的另一个重要特征。从理论上讲,由多个磁盘组成的 RAID 系统在可靠性方面应该比单个磁盘要差。这里有个隐含假定:单个磁盘故障将导致整个 RAID 不可用。RAID 采用镜像和数据校验等数据冗余技术,打破了这个假定。镜像是最为原始的冗余技术,把某组磁盘驱动器上的数据完全复制到另一组磁盘驱动器上,保证总有数据副本可用。比起镜像 50% 的冗余开销 ,数据校验要小很多,它利用校验冗余信息对数据进行校验和纠错。RAID 冗余技术大幅提升数据可用性和可靠性,保证了若干磁盘出错时,不 会导致数据的丢失,不影响系统的连续运行。
(4) 可管理性
实际上, RAID 是一种虚拟化技术,它对多个物理磁盘驱动器虚拟成一个大容量的逻辑驱动器。对于外部主机系统来说, RAID 是一个单一的、快速可靠的大容量磁盘驱动器。这样,用户就可以在这个虚拟驱动器上来组织和存储应用系统数据。从用户应用角度看,可使存储系统简单易用,管理也很便利。由于 RAID 内部完成了大量的存储管理工作,管理员只需要管理单个虚拟驱动器,可以节省大量的管理工作。RAID 可以动态增减磁盘驱动器,可自动进行数据校验和数据重建,这些都可以 大大简化管理工作。
三、关键技术
3.1 镜像
镜像是一种冗余技术,为磁盘提供保护功能,防止磁盘发生故障而造成数据丢失。对于 RAID 而言,采用镜像技术 典型地 将会同时在阵列中产生两个完全相同的数据副本,分布在两个不同的磁盘驱动器组上。镜像提供了完全的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可正常访问另一副本,不会对应用系统运行和性能产生影响。而且,镜像不需要额外的计算和校验,故障修复非常快,直接复制即可。镜像技术可以从多个副本进行并发读取数据,提供更高的读 I/O 性能,但不能并行写数据,写多个副本会会导致一定的 I/O 性能降低。
镜像技术提供了非常高的数据安全性,其代价也是非常昂贵的,需要至少双倍的存储空间。高成本限制了镜像的广泛应用,主要应用于至关重要的数据保护,这种场合下数据丢失会造成巨大的损失。另外,镜像通过“ 拆分 ”能获得特定时间点的上数据快照,从而可以实现一种备份窗口几乎为零的数据备份技术。
3.2 数据条带
磁盘存储的性能瓶颈在于磁头寻道定位,它是一种慢速机械运动,无法与高速的 CPU 匹配。再者,单个磁盘驱动器性能存在物理极限, I/O 性能非常有限。RAID 由多块磁盘组成,数据条带技术将数据以块的方式分布存储在多个磁盘中,从而可以对数据进行并发处理。这样写入和读取数据就可以在多个磁盘上同时进行,并发产生非常高的聚合 I/O ,有效提高了整体 I/O 性能,而且具有良好的线性扩展性。这对大容量数据尤其显著,如果不分块,数据只能按顺序存储在磁盘阵列的磁盘上,需要时再按顺序读取。而通过条带技术,可获得数倍与顺序访问的性能提升。
3.3 数据校验
镜像具有高安全性、高读性能,但冗余开销太昂贵。数据条带通过并发性来大幅提高性能,然而对数据安全性、可靠性未作考虑。数据校验是一种冗余技术,它用校验数据来提供数据的安全,可以检测数据错误,并在能力允许的前提下进行数据重构。相对镜像,数据校验大幅缩减了冗余开销,用较小的代价换取了极佳的数据完整性和可靠性。数据条带技术提供高性能,数据校验提供数据安全性, RAID 不同等级往往同时结合使用这两种技术。
采用数据校验时, RAID 要在写入数据同时进行校验计算,并将得到的校验数据存储在 RAID 成员磁盘中。校验数据可以集中保存在某个磁盘或分散存储在多个不同磁盘中,甚至校验数据也可以分块,不同 RAID 等级实现各不相同。当其中一部分数据出错时,就可以对剩余数据和校验数据进行反校验计算重建丢失的数据。校验技术相对于镜像技术的优势在于节省大量开销,但由于每次数据读写都要进行大量的校验运算,对计算机的运算速度要求很高,必须使用硬件 RAID 控制器。在数据重建恢复方面,检验技术比镜像技术复杂得多且慢得多。
海明校验码和 异或校验是两种最为常用的 数据校验算法。海明校验码是由理查德.海明提出的,不仅能检测错误,还能给出错误位置并自动纠正。海明校验的基本思想是:将有效信息按照某种规律分成若干组,对每一个组作奇偶测试并安排一个校验位,从而能提供多位检错信息,以定位错误点并纠正。可见海明校验实质上是一种多重奇偶校验。异或校验通过异或逻辑运算产生,将一个有效信息与一个给定的初始值进行异或运算,会得到校验信息。如果有效信息出现错误,通过校验信息与初始值的异或运算能还原正确的有效信息。
四、实现方式
通常计算机功能既可以由硬件来实现,也可以由软件来实现。对于 RAID 系统而言,自然也不例外,它可以采用软件方式实现,也可以采用硬件方式实现,或者采用软硬结合的方式实现。[3][8]
5.1 软 RAID
软 RAID 没有专用的控制芯片和 I/O 芯片,完全由操作系统和 CPU 来实现所的 RAID 的功能。现代操作系统基本上都提供软 RAID 支持,通过在磁盘设备驱动程序上添加一个软件层,提供一个物理驱动器与逻辑驱动器之间的抽象层。目前,操作系统支持的最常见的 RAID 等级有 RAID0 、 RAID1 、 RAID10 、 RAID01 和 RAID5 等。比如, Windows Server 支持 RAID0 、 RAID1 和 RAID5 三种等级, Linux 支持 RAID0 、 RAID1 、 RAID4 、 RAID5 、 RAID6 等, Mac OS X Server 、 FreeBSD 、 NetBSD 、 OpenBSD 、 Solaris 等操作系统也都支持相应的 RAID 等级。
软 RAID 的配置管理和数据恢复都比较简单,但是 RAID 所有任务的处理完全由 CPU 来完成,如计算校验值,所以执行效率比较低下,这种方式需要消耗大量的运算资源,支持 RAID 模式 较少,很难广泛应用。
软 RAID 由操作系统来实现,因此系统所在分区不能作为 RAID 的逻辑成员磁盘,软 RAID 不能保护系统盘 D 。对于部分操作系统而言, RAID 的配置信息保存在系统信息中,而不是单独以文件形式保存在磁盘上。这样当系统意外崩溃而需要重新安装时, RAID 信息就会丢失。另外,磁盘的容错技术并不等于完全支持在线更换、热插拔或热交换,能否支持错误磁盘的热交换与操作系统实现相关,有的操作系统热交换。
5.2 硬 RAID
硬 RAID 拥有自己的 RAID 控制处理与 I/O 处理芯片,甚至还有阵列缓冲,对 CPU 的占用率和整体性能是三类实现中最优的,但实现成本也最高的。硬 RAID 通常都支持热交换技术,在系统运行下更换故障磁盘。 硬 RAID 包含 RAID 卡和主板上集成的 RAID 芯片, 服务器平台多采用 RAID 卡。RAID 卡由 RAID 核心处理芯片( RAID 卡上的 CPU )、端口、缓存和电池 4 部分组成。其中,端口是指 RAID 卡支持的磁盘接口类型,如 IDE/ATA 、 SCSI 、 SATA 、 SAS 、 FC 等接口。
5.3 软硬混合 RAID
软 RAID 性能欠佳,而且不能保护系统分区,因此很难应用于桌面系统。而硬 RAID 成本非常昂贵,不同 RAID 相互独立,不具互操作性。因此,人们采取软件与硬件结合的方式来实现 RAID ,从而获得在性能和成本上的一个折中,即较高的性价比。
这种 RAID 虽然采用了处理控制芯片,但是为了节省成本,芯片往往比较廉价且处理能力较弱, RAID 的任务处理大部分还是通过固件驱动程序由 CPU 来完成。
六、RAID 应用选择
RAID 等级的选择主要有三个因素,即数据可用性、 I/O 性能和成本。 目前,在实际应用中常见的主流 RAID 等级是 RAID0 , RAID1 , RAID3 , RAID5 , RAID6 和 RAID10 ,它们之间的技术对比情况如表 1 所示。如果不要求可用性,选择 RAID0 以获得高性能。如果可用性和性能是重要的,而成本不是一个主要因素,则根据磁盘数量选择 RAID1 。如果可用性,成本和性能都同样重要,则根据一般的数据传输和磁盘数量选择 RAID3 或 RAID5 。在实际应用中,应当根据用户的数据应用特点和具体情况,综合考虑可用性、性能和成本来选择合适的 RAID 等级。[10]
表1 主流 RAID 等级技术对比
RAID等级RAID0RAID1RAID3RAID5RAID6RAID10别名条带镜像专用奇偶校验条带分布奇偶校验条带双重奇偶校验条带镜像加条带容错性无有有有有有冗余类型无有有有有有热备份选择无有有有有有读性能高低高高高高随机写性能高低低一般低一般连续写性能高低低低低一般需要磁盘数n≥12n (n≥1)n≥3n≥3n≥42n(n≥2)≥4可用容量全部50%(n-1)/n(n-1)/n(n-2)/n50%
五、RAID 有哪些?
RAID方案常见的可以分为:
RAID0
RAID1
RAID5
RAID6
RAID10
下面来分别介绍一下。
RAID0
RAID0 是一种非常简单的的方式,它将多块磁盘组合在一起形成一个大容量的存储。当我们要写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写,那么这N份数据会同时并发的写到磁盘中,因此执行性能非常的高。
RAID0 的读写性能理论上是单块磁盘的N倍(仅限理论,因为实际中磁盘的寻址时间也是性能占用的大头)
但RAID0的问题是,它并不提供数据校验或冗余备份,因此一旦某块磁盘损坏了,数据就直接丢失,无法恢复了。因此RAID0就不可能用于高要求的业务中,但可以用在对可靠性要求不高,对读写性能要求高的场景中。
那有没有可以让存储可靠性变高的方案呢?有的,下面的RAID1就是。
RAID1
如图,
RAID1 是磁盘阵列中单位成本最高的一种方式。因为它的原理是在往磁盘写数据的时候,将同一份数据无差别的写两份到磁盘,分别写到工作磁盘和镜像磁盘,那么它的实际空间使用率只有50%了,两块磁盘当做一块用,这是一种比较昂贵的方案。
RAID1其实与RAID0效果刚好相反。RAID1 这种写双份的做法,就给数据做了一个冗余备份。这样的话,任何一块磁盘损坏了,都可以再基于另外一块磁盘去恢复数据,数据的可靠性非常强,但性能就没那么好了。
了解了RAID0和RAID1之后,我们发现这两个方案都不完美啊。这时候就该 性能又好、可靠性也高 的方案 RAID5 登场了。
RAID5
这是目前用的最多的一种方式。因为 RAID5 是一种将 存储性能、数据安全、存储成本 兼顾的一种方案。
在了解RAID5之前,我们可以先简单看一下RAID3,虽然RAID3用的很少,但弄清楚了RAID3就很容易明白RAID5的思路。
RAID3的方式是:将数据按照RAID0的形式,分成多份同时写入多块磁盘,但是还会另外再留出一块磁盘用于写「奇偶校验码」。例如总共有N块磁盘,那么就会让其中额度N-1块用来并发的写数据,第N块磁盘用记录校验码数据。一旦某一块磁盘坏掉了,就可以利用其它的N-1块磁盘去恢复数据。
但是由于第N块磁盘是校验码磁盘,因此有任何数据的写入都会要去更新这块磁盘,导致这块磁盘的读写是最频繁的,也就非常的容易损坏。
RAID5的方式可以说是对RAID3进行了改进。
RAID5模式中,不再需要用单独的磁盘写校验码了。它把校验码信息分布到各个磁盘上。例如,总共有N块磁盘,那么会将要写入的数据分成N份,并发的写入到N块磁盘中,同时还将数据的校验码信息也写入到这N块磁盘中(数据与对应的校验码信息必须得分开存储在不同的磁盘上)。一旦某一块磁盘损坏了,就可以用剩下的数据和对应的奇偶校验码信息去恢复损坏的数据。
RAID5校验位算法原理:P = D1 xor D2 xor D3 … xor Dn (D1,D2,D3 … Dn为数据块,P为校验,xor为异或运算)
RAID5的方式,最少需要三块磁盘来组建磁盘阵列,允许最多同时坏一块磁盘。如果有两块磁盘同时损坏了,那数据就无法恢复了。
RAID6
为了进一步提高存储的高可用,聪明的人们又提出了RAID6方案,可以在有两块磁盘同时损坏的情况下,也能保障数据可恢复。
为什么RAID6这么牛呢,因为RAID6在RAID5的基础上再次改进,引入了双重校验的概念。
RAID6除了每块磁盘上都有同级数据XOR校验区以外,还有针对每个数据块的XOR校验区,这样的话,相当于每个数据块有两个校验保护措施,因此数据的冗余性更高了。
但是RAID6的这种设计也带来了很高的复杂度,虽然数据冗余性好,读取的效率也比较高,但是写数据的性能就很差。因此RAID6在实际环境中应用的比较少。
RAID10
RAID10其实就是RAID1与RAID0的一个合体。
我们看图就明白了:
RAID10兼备了RAID1和RAID0的有优点。首先基于RAID1模式将磁盘分为2份,当要写入数据的时候,将所有的数据在两份磁盘上同时写入,相当于写了双份数据,起到了数据保障的作用。且在每一份磁盘上又会基于RAID0技术讲数据分为N份并发的读写,这样也保障了数据的效率。
但也可以看出RAID10模式是有一半的磁盘空间用于存储冗余数据的,浪费的很严重,因此用的也不是很多。
整体对比一下RAID0、RAID1、RAID5、RAID6、RAID10 的几个特征: