RAID基础知识总结

a1.数据条带 (Data Stripping)

原理:将数据分片保存到多个磁盘,多个数据分片共同组成一个完整的数据副本。

数据安全性:不提供数据安全保护。任何一个数据条带损坏都会导致整个数据不可用,增加了数据发生丢失的概率。

故障修复:一旦数据损坏将无法恢复。

读写I/O:具有更高的I/O并发粒度,当访问数据时,可以同时对位于不同磁盘上的数据进行读写操作。

成本:要根据数据特征和需求选择合适的分块大小,在数据存取随机性(块寻址时间)和并发处理能力之间进行平衡,以争取尽可能高的整体性能。

a2.镜像 (Mirroring)

原理:将数据复制到多个磁盘。

数据安全性:提供完全的数据冗余能力,当一个数据副本不可用时,外部系统仍可正常访问另一副本。

故障修复:不需要额外的计算和校验,故障修复非常快。

读写I/O:可以从多个副本并发读取数据,提供更高的读I/O性能;但不能并行写数据,写多个副本会导致一定的I/O性能降低。

成本:备份时间几乎为零;但至少需要双倍的存储空间。

a3.数据校验 (Data Parity)

原理:利用冗余数据进行数据错误检测和修复,要在写入数据同时进行校验计算,并将得到的校验数据存储在RAID成员磁盘中。

数据安全性:可以检测数据错误,当其中一部分数据出错时,可以对剩余数据和校验数据进行反校验计算,重建丢失的数据。

故障修复:比镜像技术复杂得多且慢得多。

读写I/O:数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。

成本:节省大量冗余开销;但由于每次数据读写都要进行大量的校验运算,对计算机的运算速度要求很高,必须使用硬件RAID控制器。

a4.缓存 (Cache)

原理:作为写,一般存储阵列只要求写到cache就算完成了写操作,所以,阵列的写是非常快速的,在写cache的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入,至于cache数据的保护,一般都依赖于镜像与电池(或者是UPS)。cache的读一样不可忽视,因为如果读能在cache中命中的话,将减少磁盘的寻道,因为磁盘从寻道开始到找到数据,一般都在6ms以上,而这个时间,对于那些密集型I/O的应用可能不是太理想。但是,如果cache能命中,一般响应时间则可以在1ms以内。两者应该相差3个数量级(1000倍)。

a5.回写 (Write Back)

原理:写入的时候先写入数据到缓存,然后计算校验位,数据和校验位分别写入硬盘。Cache够大控制芯片性能够强的话,硬盘可以一直处于持续写入模式。

数据安全性:RAID5如果开启回写缓存(RAID卡设置WriteBack模式),则一旦发生系统崩溃、电源故障等情况,可能会导致数据丢失,硬件RAID卡一般会有电池单元给缓存供电,系统重启/电源恢复的时候可以把缓存中未写入硬盘的数据写入硬盘。

a6.直接写 (Write Through)

原理:写入的时候先写数据到硬盘,然后从硬盘回读数据(有Cache并且启用了Write Cache的话不需要从硬盘读取)计算校验位,再写入校验位。每次读取、写入都需要硬盘寻道。

a7.平均无故障时间(MTBF)

原理:每个磁盘的平均无故障时间大约为50万至150万小时,实际在大多数散热和机械条件下,都会造成硬盘正常工作的时间大幅减少。由于每个磁盘的寿命不同,阵列中的任何磁盘都可能出现问题,从统计学角度说,阵列中 N 个磁盘发生故障的机率比单个磁盘发生故障的机率要大 N 倍。因此在磁盘阵列的预期使用寿命过程中,就很有可能发生磁盘故障(每几个月或每隔几年发生一次)。根据谷歌论文,5年内硬盘的最高年平均故障率为8.6%(按10%计算),1TB硬盘,假设平均写入速度为100MB/s,重建RAID 5需要写满一个硬盘,大概需要 [公式] 小时。如果以8盘RAID5计算的话,单个硬盘故障后还有7个硬盘,在2.78小时内单个硬盘发生故障的概率可以用 [公式] 计算。7个硬盘在2.78小时一个或一个以上硬盘出现故障的概率为2.22e-4,也就是0.022%。如果考虑到RAID 5重建过程中还有其它IO应用,或者RAID卡重建性能较差,导致重建速度降低,假设平均写入速度只有20MB/s,则重建时间约为14小时,重建过程中出现第二个硬盘故障的概率为0.11%。也就是大概每1000次重建可能出现1次第二个硬盘故障。也就是说,在一个部署了上万硬盘并且均组成RAID5阵列的数据中心中,几乎每年都会发生一例。

a8.不可恢复读取错误 (URE, Nonrecoverable Read Errors)

原理:磁盘读取错误产生的原因很多,数据写入硬盘时,数字信号转换为盘片上的模拟磁场信号过程中发生错误;数据存放过程中,因为外界的电磁干扰/宇宙射线/写入周围单元时磁头位置偏离(磁盘震动)导致的磁单元中部分磁性材料极性翻转;读取数据时,磁场信号转换为数字信号过程中发生错误;电路问题等,都有可能导致读取错误,不过每个磁盘扇区都有一段CRC数据可以用来纠错。然而纠错机制只能在一定范围内生效,单个扇区发生的错误多了就无法纠正了。

酷鱼和4TB及以下型号的铁狼硬盘,每读取1bit数据,有1/10e14的概率出现不可恢复的错误。其他6TB及以上型号硬盘的概率是1/10e15。从数字上来看,这个概率还是很小的,然而当单个硬盘容量达到1TB,也就是10e12字节,8*10e12bit的时候,这就不是一个可以忽略的数字了。当4盘组成的RAID5单盘失效后重建的时候,需要从其它三个完好的硬盘上读取数据并根据校验算法逆向推算出失效硬盘的数据,以4块1T硬盘,使用了80%空间来算,需要读取3*8*10e12*80%=1.92*10e13 bit,这个时候发生URE的概率是1-(1-1/10e14)^(1.92*10e13)=17.46%。而RAID通常是硬件实现的,RAID控制器不知道这个失效的位代表什么含义,最安全的做法是停下来——于是重建就失败了。对于4T硬盘组成的四盘RAID5,这个概率超过五成。

RAID5重建成功概率计算器

通常RAID5是在硬件层面(有独立主控芯片的RAID卡,常说的硬RAID)或者块设备驱动层面(主板或操作系统,软RAID)实现的,与文件系统独立。因此RAID控制芯片或者驱动是无法知道RAID上某一段数据,到底是存有数据的文件,还是某个已经被删除的文件;也不知道某一段全0的数据,到底是未使用空间还是某个预分配磁盘空间但未使用的数据库文件。因此即使一个1TB*8,可用空间7TB的RAID5,假设用户仅仅存放了50GB数据,重建的时候还是必须把7TB的数据全部读取一遍的。RAID 5EE、RAID 2.0,以及由文件系统本身实现类似RAID 5的RAID Z1(ZFS文件系统),则是可以仅重建已经使用的50GB数据。

a9.write hole

原理:设备写下这个条带的时候,写入的顺序是任意的(由总线信号序列、时机、线榄长度等因素随机确定),比如RAID5做成3D+1R,一个条带一次要写入4个数据,可以恢复的前提之一,是要知道这4个数据中到底哪个出了问题,所以要保证原子操作,要么成功,要么失败。这个问题有2个方式避免,一个是给设备加电池,一个是软件写入的时候记录日志。大部分的RAID5卡都没有考虑这个问题,出了问题很大概率是恢复不全或者无法正确恢复的,但软RAID如zfs可以通过日志(比如2PC提交)保证原子性,避免这个问题。

b1.JBOD (Just a Bunch of Disks)

原理:将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘。由第一块磁盘开始按顺序往后写入数据,当前磁盘存储空间用完后,再依次往后面的磁盘写入数据。

数据安全性:不提供数据安全保护。任何一个数据条带损坏都会导致整个数据不可用,增加了数据发生丢失的概率。

故障修复:一旦数据损坏将无法恢复。

读写I/O:完全等同于单块磁盘。

成本:仅提供一种扩展存储空间的机制,可用存储容量等于所有成员磁盘的存储空间之和。

b2.RAID0(无冗错的数据条带)

原理:将JBOD条带化后组成大容量存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。

数据安全性:不提供数据安全保护。任何一个数据条带损坏都会导致整个数据不可用,增加了数据发生丢失的概率。

故障修复:一旦数据损坏将无法恢复。

读写I/O:相当于数据条带的读写I/O,性能最高,但受总线带宽的限制。

成本:100%高存储空间利用率。

b3.RAID1(无校验的相互镜像)

原理:将数据完全一致地分别写到工作磁盘和镜像磁盘。

数据安全性:提供完全的数据冗余能力,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。

故障修复:不需要额外的计算和校验,故障修复非常快。

读写I/O:可以从多个副本并发读取数据,提供更高的读I/O性能;但不能并行写数据,写多个副本会导致一定的I/O性能降低。

成本:备份时间几乎为零;50%低存储空间利用率。

b4.RAID3(带有专用位校验的数据条带)

原理:至少需要三块磁盘,采用一个专用的磁盘作为校验盘,其余磁盘作为数据盘,数据按位(可字节)的方式交叉存储到各个数据盘中,不同磁盘上同一带区的数据作 XOR 校验,校验值写入校验盘中。

数据安全性:如果某一磁盘出现故障,不会影响数据读取,可以借助校验数据和其他完好数据来重建数据。

故障修复:当故障磁盘被更换后,系统需要读取所有同一条带的数据块,并根据校验值重建故障盘丢失的数据至新磁盘,系统性能将受到影响。

读写I/O:完好的RAID3读性能与RAID0完全一致,并行从多个磁盘条带读取数据,性能非常高,同时还提供了数据容错能力;假如所要读取的数据块正好位于失效磁盘,则系统需要读取所有同一条带的数据块,并根据校验值重建丢失的数据,系统性能将受到影响。写入数据时,必须计算与所有同条带的校验值,并将新校验值写入校验盘中。一次写操作包含了写数据块、读取同条带的数据块、计算校验值、写入校验值等多个操作,系统开销非常大,性能较低。

成本:只需要一个校验盘,阵列的存储空间利用率高,再加上并行访问的特征,能够为高带宽的大量读写提供高性能,适用大容量数据的顺序访问应用,如影像处理、流媒体服务等。在出现坏盘时性能会大幅下降。某些特定的写入策略下,会导致校验盘频繁读写而缩短寿命。

b5.RAID4(带有专用块级校验的数据条带)

原理:至少需要三块磁盘,按照块的方式来组织数据,写操作只涉及当前数据盘和校验盘两个盘。在不同磁盘上的同级数据块同样使用XOR校验,结果存储在校验盘中。写入数据时, 按这种方式把各磁盘上的同级数据的校验值写入校验盘,读取时进行即时校验。

数据安全性:按块存储可以保证单块的完整性,可以避免受到其他磁盘上同条带产生的不利影响。当某块磁盘的数据块损坏,可以通过校验值以及其他磁盘上的同级数据块进行数据重建。

故障修复:当故障磁盘被更换后,系统需要读取所有磁盘上的同级数据块,并根据校验值重建故障盘丢失的数据至新磁盘。

读写I/O:多个I/O请求可以同时得到处理,提供了非常好的读性能,但单一的校验盘往往成为系统性能的瓶颈。对于写操作,只能一个磁盘一个磁盘地写,并且还要写入校验数据,因此写性能比较差。而且随着成员磁盘数量的增加,校验盘的系统瓶颈将更加突出。

成本:只需要一个校验盘,阵列的存储空间利用率高,再加上并行访问的特征,能够为高带宽的大量读提供高性能,但写性能比较差。

b6.RAID5(带分散校验的数据条带)

原理:按照块的方式来组织数据,校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。磁盘上同时存储数据和校验数据,数据块和对应的校验信息保存在不同的磁盘上。

数据安全性:阵列中出现一个磁盘失效时,降级为RAID0,阵列仍能够继续工作,不会发生数据丢失。

故障修复:当故障磁盘被更换后,系统需要读取所有磁盘上的同条带数据块,并根据校验值重建故障盘丢失的数据至新磁盘。重建时,性能会受到较大的影响。

读写I/O:多个I/O请求可以同时得到处理,并行从多个磁盘条带的数据块读取数据,提供了非常好的读性能。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上,不存在RAID4中的并发写操作时的校验盘性能瓶颈问题。RAID卡只要带Cache而且启用Write Back,四盘RAID5的持续读写性能相当于3盘RAID0。阵列中出现一个磁盘失效时,读取失效磁盘数据时需要利用所有磁盘上的同条带数据块,并根据校验值重建失效数据,写数据时需要改写校验值,总体性能低于N-1盘的RAID0。

成本:阵列的存储空间利用率高,具备很好的扩展性。当阵列磁盘数量增加时,并行操作量的能力也随之增长,可比RAID4支持更多的磁盘,从而拥有更高的容量以及更高的性能。在大数据量读取时能够模拟RAID3,运行具有持续性、高带宽、大量随机读写特征的应用。

b7.RAID6(带双重分散校验的数据条带)

原理:引入双重校验的概念,不仅要支持数据的恢复,还要支持校验数据的恢复。最常见的实现方式是采用两个独立的校验算法,假设称为P和Q,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解两元方程来重建两个磁盘上的数据。

数据安全性:阵列中出现一个磁盘失效时,降级为RAID5;阵列中同时出现两个磁盘失效时,降级为RAID0,阵列仍能够继续工作,不会发生数据丢失。

故障修复:当故障磁盘被更换后,系统需要读取所有磁盘上的同级数据块,通过求解两元方程来重建两个磁盘上的数据。重建时,性能会受到较大的影响。

读写I/O:多个I/O请求可以同时得到处理,具有快速的读取性能。写性能比RAID3更差,一次写操作包含了写数据块、读取同条带的数据块、计算校验值(两个)、写入校验值(两个)等多个操作,系统开销非常大,性能较低。阵列中出现一个磁盘失效时,相当于N-1盘的RAID5。

成本:实现代价很高,控制器的设计也比其他等级更复杂、更昂贵,设计和实施非常复杂。主要用于对数据安全等级要求非常高的场合,是替代RAID10方案的经济性选择。

c1.RAID00(两层条带化结构的磁盘阵列)

原理:对多个RAID0 阵列进行条带化。

数据安全性:与RAID0相同。

故障修复:与RAID0相同。

读写I/O:提供比RAID0更高的I/O性能和更好的I/O负载均衡。

成本:提供比RAID0更大的存储容量。

c2.RAID01(虚拟磁盘阵列镜像)

原理:先做条带化再对虚拟磁盘作镜像,本质是对虚拟磁盘实现镜像。以6个盘为例,RAID01就是先利用3块盘做RAID0,然后将另外3块盘做为RAID0的镜像。

数据安全性:任意一个RAID1损坏一个磁盘不会发生数据丢失,但是另一个RAID1所有的磁盘都存在单点故障的危险。因此数据安全性低于RAID10。

故障修复:不需要额外的计算和校验,故障修复非常快。

读写I/O:RAID卡只要带Cache而且启用Write Back,4盘RAID10持续读性能相当于4盘RAID0,持续写性能相当于2盘RAID0。当损坏一个磁盘时,读写性能受损。

成本:备份时间几乎为零;50%低存储空间利用率。

c3.RAID10(镜象阵列条带)

原理:先对物理磁盘做镜像再作条带化,本质是对物理磁盘实现镜像。以6个盘为例,RAID10就是先将盘分成3组镜像,然后再对这3个RAID1做条带。

数据安全性:任意一个RAID1损坏一个磁盘不会发生数据丢失,但是该RAID1剩下的磁盘存在单点故障的危险。

故障修复:不需要额外的计算和校验,故障修复非常快。

读写I/O:RAID卡只要带Cache而且启用Write Back,4盘RAID10持续读性能相当于4盘RAID0,持续写性能相当于2盘RAID0。当损坏一个磁盘时,不影响读写。

成本:备份时间几乎为零;50%低存储空间利用率。

c4.RAID100(条带化的 RAID10)

原理:最顶层的 RAID0,即条带化任务,通常由软件层来完成。

数据安全性:有效降低热点盘故障风险。任意一个RAID1损坏一个磁盘不会发生数据丢失,但是剩下的磁盘存在单点故障的危险。

故障修复:不需要额外的计算和校验,故障修复非常快。

读写I/O:突破了单个RAID控制器对物理磁盘数量的限制,可以获得更高的I/O负载均衡,I/O压力分散到更多的磁盘上,进一步提高随机读性能。

成本:备份时间几乎为零;50%低存储空间利用率。

 d.常见RAID性能比较

posted @ 2020-08-26 20:44  linjingf  阅读(999)  评论(0)    收藏  举报