RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列),它的基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使得性能达到甚至超过一个价格昂贵、容量巨大的硬盘。算法
RAID一般被用在服务器上,使用彻底相同的硬盘组成一个逻辑扇区,所以操做系统只会把它当作一个硬盘。缓存
RAID分为不一样的等级,各个不一样的等级均在数据可靠性及读写性能上作了不一样的权衡。在实际应用中,能够依据本身的实际需求选择不一样的RAID方案。安全
RAID 的两个关键目标是提升数据可靠性和 I/O 性能。磁盘阵列中,数据分散在多个磁盘中,然而对于计算机系统来讲,就像一个单独的磁盘。经过把相同数据同时写入到多块磁盘(典型地如镜像),或者将计算的校验数据写入阵列中来得到冗余能力,当单块磁盘出现故障时能够保证不会致使数据丢失。有些 RAID 等级容许更多地 磁盘同时发生故障,好比 RAID6 ,能够是两块磁盘同时损坏。在这样的冗余机制下,能够用新磁盘替换故障磁盘, RAID 会自动根据剩余磁盘中的数据和校验数据重建丢失的数据,保证数据一致性和完整性。数据分散保存在 RAID 中的多个不一样磁盘上,并发数据读写要大大优于单个磁盘,所以能够得到更高的聚合 I/O 带宽。固然,磁盘阵列会减小全体磁盘的总可用存储空间,牺牲空间换取更高的可靠性和性能。好比, RAID1 存储空间利用率仅有 50% , RAID5 会损失其中一个磁盘的存储容量,空间利用率为 (n-1)/n 。服务器
RAID 中主要有三个关键概念和技术:镜像( Mirroring )、数据条带( Data Stripping )和数据校验( Data parity )。镜像,将数据复制到多个磁盘,一方面能够提升可靠性,另外一方面可并发从两个或多个副本读取数据来提升读性能。显而易见,镜像的写性能要稍低, 确保数据正确地写到多个磁盘须要更多的时间消耗。数据条带,数据校验,利用冗余数据进行数据错误检测和修复,冗余数据一般采用海明码、异或操做等算法来计算得到。利用校验功能,能够很大程度上提升磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验须要从多处读取数据并进行计算和对比,会影响系统性能。 不一样等级的 RAID 采用一个或多个以上的三种技术,来得到不一样的数据可靠性、可用性和 I/O 性能。至于设计何种 RAID (甚至新的等级或类型)或采用何种模式的 RAID ,须要在深刻理解系统需求的前提下进行合理选择,综合评估可靠性、性能和成原本进行折中的选择。微信
数据条带并发
数据条带思想相似于分布式存储,将一个文件数据存储于不一样磁盘中。譬如:文件大小为100M的A,[0-19M]的内容写入磁盘1,[20-40M]的内容写入磁盘2,[40-60M]的内容写入磁盘3,[60-80M]的内容写入磁盘4,[80-100M]的内容写入磁盘5。这种方式能够提高性能,可是它也存在一个问题:数据不安全,由于将数据分不到不一样的磁盘上,存在单点故障。分布式
镜像性能
镜像是一种冗余技术,为磁盘提供保护功能,防止磁盘发生故障而形成数据丢失。对于 RAID 而言,采用镜像技术 典型地 将会同时在阵列中产生两个彻底相同的数据副本,分布在两个不一样的磁盘驱动器组上。镜像提供了彻底的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可正常访问另外一副本,不会对应用系统运行和性能产生影响。并且,镜像不须要额外的计算和校验,故障修复很是快,直接复制便可。镜像技术能够从多个副本进行并发读取数据,提供更高的读 I/O 性能,但不能并行写数据,写多个副本会会致使必定的 I/O 性能下降。测试
数据校验操作系统
镜像具备高安全性、高读性能,但冗余开销太昂贵。数据条带经过并发性来大幅提升性能,然而对数据安全性、可靠性未做考虑。数据校验是一种冗余技术,它用校验数据来提供数据的安全,能够检测数据错误,并在能力容许的前提下进行数据重构。相对镜像,数据校验大幅缩减了冗余开销,用较小的代价换取了极佳的数据完整性和可靠性。数据条带技术提供高性能,数据校验提供数据安全性, RAID 不一样等级每每同时结合使用这两种技术。
采用数据校验时, RAID 要在写入数据同时进行校验计算,并将获得的校验数据存储在 RAID 成员磁盘中。校验数据能够集中保存在某个磁盘或分散存储在多个不一样磁盘中,甚至校验数据也能够分块,不一样 RAID 等级实现各不相同。当其中一部分数据出错时,就能够对剩余数据和校验数据进行反校验计算重建丢失的数据。校验技术相对于镜像技术的优点在于节省大量开销,但因为每次数据读写都要进行大量的校验运算,对计算机的运算速度要求很高,必须使用硬件 RAID 控制器。在数据重建恢复方面,检验技术比镜像技术复杂得多且慢得多。
海明校验码和 异或校验是两种最为经常使用的数据校验算法。海明校验码不只能检测错误,还能给出错误位置并自动纠正。海明校验的基本思想是:将有效信息按照某种规律分红若干组,对每个组做奇偶测试并安排一个校验位,从而能提供多位检错信息,以定位错误点并纠正。可见海明校验实质上是一种多重奇偶校验。异或校验经过异或逻辑运算产生,将一个有效信息与一个给定的初始值进行异或运算,会获得校验信息。若是有效信息出现错误,经过校验信息与初始值的异或运算能还原正确的有效信息。
标准的RAID等级包含RAID0 、 RAID1 、 RAID2 、 RAID3 、 RAID4 、 RAID5 、 RAID6 七个等级,另外,也能够对单个RAID等级进行组合,造成RAID 01 、RAID 10 、RAID 50等组合等级。
RAID 0采用的就是数据条带技术,它的读写速率为单个磁盘的N倍(N为组成RAID0的磁盘个数),可是却没有数据冗余,单个磁盘的损失会致使数据的不可修复。数据无校验。RAID0因为存在单点,因此不安全。
RAID 1采用的就是镜像技术,它的写入速度会比较慢,但读取速度会比较快。读取速度能够接近全部磁盘吞吐量的总和,写入速度受限于最慢的磁盘。没有校验数据。RAID1因为是数据镜像,因此浪费了一张磁盘,而且写性能很差,读性能提高了。
RAID2 称为纠错海明码磁盘阵列,其设计思想是利用海明码实现数据校验冗余。海明码自身具有纠错能力,所以 RAID2 能够在数据发生错误的状况下对纠正错误,保证数据的安全性。它的数据传输性能至关高,设计复杂性要低于后面介绍的 RAID3 、 RAID4 和 RAID5 。
可是,海明码的数据冗余开销太大,并且 RAID2 的数据输出性能受阵列中最慢磁盘驱动器的限制。再者,海明码是按位运算, RAID2 数据重建很是耗时。因为这些显著的缺陷,再加上大部分磁盘驱动器自己都具有了纠错功能,所以 RAID2 在实际中不多应用,没有造成商业产品,目前主流存储磁盘阵列均不提供 RAID2 支持。
RAID 3采用一个专用的磁盘做为校验盘,其他磁盘做为数据盘,数据按位可字节的方式交叉存储到各个数据盘中。RAID3 至少须要三块磁盘,不一样磁盘上同一带区的数据做 XOR 校验,校验值写入校验盘中。向 RAID3 写入数据时,必须计算与全部同条带的校验值,并将新校验值写入校验盘中。一次写操做包含了写数据块、读取同条带的数据块、计算校验值、写入校验值等多个操做,系统开销很是大,性能较低。若是 RAID3 中某一磁盘出现故障,不会影响数据读取,能够借助校验数据和其余无缺数据来重建数据。并且RAID3 只须要一个校验盘,阵列的存储空间利用率高,再加上并行访问的特征,可以为高带宽的大量读写提供高性能。
RAID4 与 RAID3 的原理大体相同,区别在于条带化的方式不一样。RAID4按照块的方式来组织数据,写操做只涉及当前数据盘和校验盘两个盘,多个 I/O 请求能够同时获得处理,提升了系统性能。
RAID4 提供了很是好的读性能,但单一的校验盘每每成为系统性能的瓶颈。对于写操做, RAID4 只能一个磁盘一个磁盘地写,而且还要写入校验数据,所以写性能比较差。并且随着成员磁盘数量的增长,校验盘的系统瓶颈将更加突出。正是如上这些限制和不足, RAID4 在实际应用中不多见,主流存储产品也不多使用 RAID4 保护。
RAID 5 应该是目前最多见的 RAID 等级,它把数据和相对应的奇偶校验信息存储到组成RAID 5的各个磁盘上,而且把奇偶校验信息和相对应的数据分别存储于不一样的磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就是说至关于一块磁盘容量的空间用于存储奇偶校验信息。所以当RAID 5的一个磁盘发生损坏后,不会影响数据的完整性,从而保证数据安全。当损坏的磁盘被替换后,RAID还会自动利用剩下奇偶校验信息去重建磁盘上的数据,来保持RAID 5的高可靠性。
RAID5能够理解为是RAID0和RAID1的折中方案。RAID5能够为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间率要比镜像高。RAID5具备和RAID0近似的数据读取速度,只是由于多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用"回写缓存"可让性能改善很多。同时因为多个数据对应一个奇偶校验信息,RAID5的磁盘空间利用率要比RAID1高,存储成本相对便宜
前面所述的各个 RAID 等级都只能保护因单个磁盘失效而形成的数据丢失。若是两个磁盘同时发生故障,数据将没法恢复。 RAID6 引入双重校验的概念,它能够保护阵列中同时出现两个磁盘失效时,阵列仍可以继续工做,不会发生数据丢失。 RAID6 等级是在 RAID5 的基础上为了进一步加强数据保护而设计的一种 RAID 方式,它能够看做是一种扩展的 RAID5 等级。
RAID 6 不只要支持数据的恢复,还要支持校验数据的恢复,所以实现代价很高,控制器的设计也比其余等级更复杂、更昂贵。 RAID6 思想最多见的实现方式是采用两个独立的校验算法,假设称为 P 和 Q ,校验数据能够分别存储在两个不一样的校验盘上,或者分散存储在全部成员磁盘中。当两个磁盘同时失效时,便可经过求解两元方程来重建两个磁盘上的数据。
RAID 6 具备快速的读取性能、更高的容错能力。可是,它的成本要高于 RAID5 许多,写性能也较差,并有设计和实施很是复杂。所以, RAID6 不多获得实际应用,主要用于对数据安全等级要求很是高的场合。它通常是替代 RAID10 方案的经济性选择。
RAID 10和RAID 01很是类似,二者在读写性能上没有什么差异。可是在安全性上,RAID 10要好于RAID 01。以下图所示,假设Disk 0损坏,在RAID10中,在剩下的3块盘中,只有当Disk 1故障,整个RIAD才会失效,但在RIAD 01中,Disk 0损坏后,左边的条带将没法读取,在剩下的3块盘中,只要Disk2或Disk3两个磁盘中任何一个损坏都会致使RAID失效。所以,生产上建议使用RAID 10。
欢迎关注微信公众号:木可大大,全部文章都将同步在公众号上。