存储 频道

存储那点事:关于RAID保护

  【IT168 技术】

  前言

  在部署存储器时,我们还会经常碰到一个需要选择RAID保护级别的问题,那么RAID是个什么东东呢,RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列。冗余磁盘阵列技术诞生于1987年,由美国加州大学伯克利分校提出。简单来讲就是将N个硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单台大容量的硬盘使用。

  以上解释可能有点文绉绉的,那么通俗的解释一下,可以把每个磁盘想象成汽车上的轮胎,普通的汽车一般是四个轮胎就可以行使了,但是为了以防万一,一般在后备箱还会再备一个轮胎,这五个轮胎组合在一起(4+1),其目的是为了保证车子在坏了一个轮胎的倒霉情景下仍然能够继续行使,这种组合的机制这就是我们所说的RAID 5保护机制,而那个备胎的概念相当于磁盘组里面的spare磁盘。

  那么有人会问,如果你运气差到家了,再坏一个轮胎,这辆车不还是不能运行了么,ok,那么我们可以准备两个备胎来保护这四个车子里面的轮胎,这种六个轮胎组合在一起的保护机制我们称作RAID 6。

  那么还有人要问,如果我有一个车队,虽然不是每个车都会发生轮胎问题,但是为了提高安全性,可不可以把这些备胎统一管理起来,哪一台坏了我就从备胎库里面拿一个顶上去呢,当然是可以的,这种把备胎组成一个池统一管理分配给需要的车子的做法我们就叫作全局热备,在RAID保护里面也经常碰到这样的情况,一个有数十块磁盘的存储器里面额外配置几块磁盘做为全局热备盘(global spare)。

  最后又有人举手问问题了(哪里来的这么多问题啊,真是十万个为什么),说如果我把备胎换好了,车子能够正常运行了,等到了4S店,我想重新买一个新的轮胎,要把原来的备胎换回去呢,还是说不换了而把新买的轮胎直接作为备胎处理呢。车子是你的,当然主意你来定。但是这种在存储器里面换下坏盘插入新盘后,是否把已经写入到hot spare盘的数据回拷回新插入磁盘里面去的功能我们称之为存储器hot spare盘自动回拷设置,全局漫游功能。是否回拷回去各有优缺点:回拷回去则存储器还是按照存储管理员第一次的部署来分配磁盘数据的,便与管理,但是回拷动作会带来一定的磁盘内部IO的开销。

  下面的文章中笔者将和大家探讨一下各种RAID保护的底层技术原理,并谈到各种应用相结合时该怎么选择合适的RAID保护机制。

  RAID保护技术综述

  RAID-5是在存储系统中广泛采用的数据保护技术。该技术是通过把应用数据分成数段,连同这些数据段的校验信息写入一组磁盘来实现的。如果其中有个磁盘出现了故障,就会利用其余的磁盘中的数据和检验信息把故障盘中的数据恢复到热备盘中以保证数据不会丢失。这样RAID-5就存在一种风险,如果在数据重建的过程中,RAID组中的第二块硬盘出现故障,就会出现数据。

  而RAID 1(准确来讲应该是RAID 10)技术是另外一种相对成本较高的数据保护技术,通过把一份数据写到两个磁盘中做到镜像保护,这样即使一块磁盘坏了,另外一块磁盘上也存有同样的数据从而实现了数据的可靠性保护。如果其中有个磁盘出现了故障,其重构机制也要比RAID 5快很多(避免了相对复杂的XOR计算,只需要重新复制一次),而且从概率上来讲数据可靠性比RAID 5要更高。

  从上面的分析我们可以发现,不管是RAID 10还是RAID5,都无法逃避同一个RAID组中两块磁盘同时损坏这个“点背”到家的情况,事实上以前,两块盘同时坏的情况是超级小概率事件,几乎不可能发生。但是近来随着光纤通道磁盘和SATA磁盘的容量和密度不断增加(出现了450GB/600GB的光纤盘和1TB/2TB的SATA盘),使得RAID-5的重建时间也不断增加。这样两块盘同时坏的概率也增加了,在企业级存储上,这种风险必须得到重视。

  为了应对这种情况,存储厂商推出了全新的RAID技术。RAID-6技术就是可以保证两块盘同时出故障而不会丢失数据的技术。存储器技术发展到今天,各种存储系统除了支持RAID5,RAID1技术以外都增加了对于RAID6保护技术的支持,提供给用户多种保护方式的选择。

  RAID 技术总览

  RAID技术是为了防止存储系统因为磁盘故障而丢失数据而研发出来的。该技术把数据和校验信息分布到一组盘中(RAID组),当有盘坏的时候,丢失的那部分数据可以通过其他盘上的数据和校验信息计算恢复。这样就增强了存储系统的可靠性。

  一个好的存储系统应当可以同时支持RAID0,RAID-1,RAID-5和RAID-6技术,这样该存储器不但可以提供更好的可靠性,而且也可以比以往的存储系统有更出色的性能。

  比如说高端存储器一般以4个磁盘为一个组,称为磁盘组Array Group,而一个RAID组则包含一个或者多个Array Group。例如:RAID-1(镜像)可以是2D + 2P或者4D + 4P的配置,也就是说2块数据盘,2块镜像盘,或者4块数据盘和4块镜像盘的配置。RAID-5(带校验的条带化)可以是3D + 1P的配置,其中3块数据盘,1块检验盘,或者是7D + 1P的配置,其中7块数据盘,1块检验盘的配置。实际上,RAID-5的数据和校验都是条带化后分散在RAID组中的各个磁盘中的。

  RAID-1提供了最高的可靠性,一块盘上的数据都镜像到RAID组中的另外一块磁盘上。但是这种方式对磁盘的率用率不高,只有一半的磁盘空间能够存放数据,存放同样的数据要多买一倍的磁盘。RAID-5改善了率用率的问题,但是因为要计算校验信息而使得写性能有所下降。有些存储器也能支持RAID-0技术(没有校验的条带化),RAID-0技术有很好的性能表现,但是RAID-0没有冗余保护功能,RAID组中任何一块磁盘的损坏都会造成数据的丢失。在SATA盘上绝对不提倡采用RAID-0,同时建议用户不要在关键数据上采用RAID-0技术。

  当采用RAID-1或者RAID-5技术的时候,如果其中有个磁盘出现了故障,就会利用RAID组中其余的磁盘中的数据和检验信息把故障盘中的数据恢复到热备盘中以保证数据不会丢失。工程师用新盘替换坏掉的磁盘,这时候存储系统会把热备盘中的数据拷贝回新换上的盘中(也有一些存储器支持RAID保护环境下的磁盘漫游技术,可以不回拷以减轻存储器的负担)。当回拷完成后,系统又回到了正常工作状态,可以再次抵御磁盘故障。

  如今磁盘的容量和密度一再变大,出现了450GB/600GB的光纤盘和1TB/2TB的SATA盘,每个盘中存放的数据比以往大了很多,磁盘故障影响的数据量也跟着增加。这样从磁盘故障,到磁盘系统恢复正常状态的时间也会比以往长很多,这个过程中同一个RAID组里面第二块磁盘出现故障而导致数据丢失的可能性也变大。

  为了防止两块磁盘故障而引起的数据丢失,存储器提供了RAID-6解决方案。和RAID-5相似的是,RAID-6采用了校验数据,和RAID-5不同的是RAID-6有两份检验数据,可以保证同一RAID组中两块磁盘同时故障而不丢失数据。

  RAID 6底层原理探讨

  1、概述

  和RAID-5相似,RAID-6(6D + 2P)根据条带化的数据生成校验信息,条带化数据和校验数据一起分散存储到RAID组的各个磁盘上。在图1中,D0,D1,D2,D3,D4和D5是条带化的数据,P代表校验数据,Q是第二份校验数据。

  图1 RAID-6校验数据生成公式

 RAID 6底层原理探讨

  图1:RAID-6(6D + 2P)根据条带化的数据生成校验信息,条带化数据和校验数据一起分散存储到RAID组的各个磁盘上

  校验数据生成公式(P和Q):

  P的生成用了异或

  P = D0 XOR D1 XOR D2 XOR D3 XOR D4 XOR D5

  Q的生成用了系数和异或

  Q = A0*D0 XOR A0*D1 XOR A0*D2 XOR A0*D3 XOR A0*D4 XOR A0*D5

  D0~D5:条带化数据

  A0~A5:系数

  XOR:异或

  *:乘

  在RAID-6中,当有1块磁盘出故障的时候,利用公式1恢复数据,这个过程是和RAID 5一样的。而当有2块磁盘同时出故障的时候,就需要同时用公式1和公式2来恢复数据了。

  在图1中,各系数A0~A5是线性无关的系数,在D0,D1,D2,D3,D4,D5,P,Q中有两个未知数的情况下,也可以联列求解两个方程得出两个未知数的值。这样在一个RAID组中有两块磁盘同时坏的情况下,也可以恢复数据。

  上面描述的是校验数据生成的算法。其实RAID-6的核心就是有两份检验数据,以保证两块磁盘同时出故障的时候,也能保障数据的安全。

  2、数据恢复流程

  2.1、从1块磁盘故障中恢复数据

  当有1块磁盘出故障的时候,利用公式1恢复数据,这个过程不需要Q这部分校验数据,如图2所示,这个过程是和RAID 5一样的。

  图2 在RAID-6(6D + 2P)中恢复D3数据

 RAID 6底层原理探讨

  图2 :在本图中展示了存放D3数据的盘出现故障的恢复过程

  公式:

  D3 = D0 XOR D1 XOR D2 XOR P XOR D4 XOR D5

  2.2、从2块磁盘故障中恢复数据

  当同时有2块磁盘故障的时候,需要同时用到公式1和公式2来恢复数据,如图3所示。

  图3在RAID-6(6D + 2P)中恢复D3和D4数据

 RAID 6底层原理探讨

  图3 :在本图中展示了存放D3和D4数据的盘出现故障的恢复过程

  公式1和公式2:

  P = D0 XOR D1 XOR D2 XOR D3 XOR D4 XOR D5

  Q = A0*D0 XOR A0*D1 XOR A0*D2 XOR A0*D3 XOR A0*D4 XOR A0*D5

  D3和D4由解以上两个联立的方程得出结果

  数据分布

  如图4所示,通过条带化,把应用数据和校验数据打散到一个RAID组的8个磁盘中,可以充分保证读写性能和数据的安全性。

  图4 RAID-6的数据分布

 RAID 6底层原理探讨

  图4 :RAID-6可以保证同一个RAID组中两块磁盘故障的情况下的数据安全

  存储器底层虚拟化下的RAID保护技术

  前文我们讲的主要是传统的RAID保护的概念,传统的RAID保护基本上是以单个磁盘为单位做数据保护,比如说6块磁盘做RAID 5的保护(5+1,一块校验磁盘,5块数据磁盘,磁盘空间利用率为83.33%);或者说3块磁盘做RAID 1+0镜像保护(磁盘空间利用率50%);或者说3块磁盘做RAID 0条带化,数据完全打散在三块磁盘中,磁盘空间利用率为100%,但是没有办法在这一层提供数据保护功能,参考下图图示:

 存储器底层虚拟化下的RAID保护技术

  我们前文讲过,传统RAID基于磁盘为最小分配单位带来一个问题就是可能存在性能瓶颈(整个lun受制于RAID组里面有多少块磁盘)。而存储器底层虚拟化则不一样,他通过把底层磁盘作为统一的资源池,解决了潜在的性能瓶颈问题。

 存储器底层虚拟化下的RAID保护技术

  这样做到好处在于

  l 从根本上消除瓶颈问题,提高吞吐量

  l 读写IO工作量被平均地分布到每个disk group的所有磁盘上

  l 真正地允许混用不同容量、不同转速的磁盘(作为一个统一的存储池)

  l 避免对应用程序和数据库复杂的分析调优过程

  下图是一个典型的图示,当磁盘组内磁盘从5块扩张到10块时的数据重构打散过程:在五块磁盘中做RAID,和传统的RAID 5实现形式很类似:

 存储器底层虚拟化下的RAID保护技术

  当在磁盘组中插入更多的磁盘后,底层存储虚拟化的技术将把原先分布在5块盘上的数据都打散到10块磁盘上,每块磁盘上实际数据占用减少一半,同时整个磁盘组从5块磁盘扩展到10块磁盘,性能提高一倍,原有的RAID 5保护机制也没有改变。

  下图演示加入5块盘以后的,采用存储虚拟化技术的存储器RAID保护机制的运行示意图(仍然是RAID 5的保护模式):

 存储器底层虚拟化下的RAID保护技术

  1、基于一对存储控制器的完全虚拟化+RAID技术保护

  存储器底层虚拟化技术可以提高性能,但是如何把最新的存储虚拟化技术和传统的RAID数据保护结合起来呢?

  第一种是采用完全虚拟化的存储器的RAID保护机制

 存储器底层虚拟化下的RAID保护技术

  可以看到,完全底层虚拟化的技术环境下,数据保护的基本单位不是磁盘,而是每一个可以分配的最小磁盘条块,比如在disk 1上,同时存在5种不同的数据类型(数据4的parity条块,数据3的parity条块,数据1和数据2的mirror条块,还有一个Data 1条块)。一个磁盘上能够有不同RAID保护数据的存在,其核心原因在于此时存储器根本没有单个磁盘的概念,而是把每个磁盘的空间细分成很多最小分配单位磁盘块,然后把这些磁盘块集合起来当作一个大的存储池来统一管理和做RAID保护(当然在做RAID保护的时候也要遵循一定的原则,比如做RAID 1+0镜像保护时,数据必然是写到两块磁盘的最小分配单元磁盘块里面,不能写进同一块磁盘里面)。

  下图演示了当一块磁盘出现问题时,如何通过底层虚拟化重构来实现数据保护,其重构基本原理仍然符合RAID保护的算法。

 存储器底层虚拟化下的RAID保护技术

  前文中提到的不少基于scale out架构的存储器,多采用此类完全虚拟化的技术进行数据保护,通过这种方法把底层的存储资源当作一个存储池统一分配管理,做到磁盘热点的消除。代表产品有HP公司的EVA系列存储器。

  2、基于一对存储控制器的半虚拟化+RAID技术保护

  所谓半虚拟化的存储器,即上一节中笔者提到的很多“历史悠久”的存储器所采用的底层打散技术。由于历史原因,这些存储器底层RAID技术还是基于磁盘为最小单位分配做RAID保护,只是在做完RAID保护以后在存储器映射给主机之前再做一次虚拟化打散(相当于存储控制器内部做一个LVM)。在这种情况下存储器的RAID保护机制仍然采用传统的RAID保护思路。

  大多数双控制的存储器和“Scale up”架构的存储器都是采用经典的基于磁盘的RAID保护技术,并且与时俱进地在lun一层再次做虚拟化,此为半虚拟化+RAID保护技术。代表产品有EMC公司的Clarion系列存储器(通过Meta lun技术上层做一次虚拟),日立公司的存储器(在LDEV层上通过HDP技术做一次虚拟打散)等。

  3、基于Scale Out架构多对存储控制的存储虚拟化技术

  以上谈到的都是基于一对控制器情况下底层虚拟化后的RAID保护思路,而随着云计算环境的发展,基于Scale Out架构的多存储器控制器技术的存储阵列慢慢走向舞台(参考笔者上一个章节文章),这种基于动车组概念设计的存储器有一个重要的特点是每次扩容不仅仅是扩展磁盘容量,而且同时扩展存储控制器的能力(每一个磁盘柜都自带存储控制器)。因此底层打散虚拟化技术面临新的挑战,能够跨多个控制器对实现底层虚拟化兼RAID保护,其中代表产品就是Dell公司的EqualLogic系列存储器。

 存储器底层虚拟化下的RAID保护技术

  主要实现方法如下,上图中是当只配置有一个Dell 公司EqualLogic PS系列存储柜(此时已经包含了一对存储控制器)时数据打散的情况。可以看到初始配置的环境下数据是完全打散在该磁盘柜的所有磁盘中(和传统的基于一对存储控制器底层打散的思路一致),而随着该磁盘柜的扩容,也就带来了更多的存储控制器,EqualLogic存储器的一大优势就表现出来,数据能够跨多个存储控制器间实现自动数据底层打散和RAID保护,具体实现方法参考下图:

 存储器底层虚拟化下的RAID保护技术

  这样做的一个好处在于底层打散和虚拟化技术将脱离一对存储控制器的束缚,而能够充分使用多对存储控制器的能力,真正的实现云存储架构的威力。

  当然能够实现这个功能的另外一个技术基础是在于Dell Equallogic系列存储器的体系架构。该存储器的设计思想是把整个存储器资源池分成三个层次,逻辑层、虚拟化层和物理层。通过一个逻辑层(IP地址)对于主机完全屏蔽了多个控制器的复杂性,数据到底在哪个存储控制器所在的磁盘柜里,对于主机来讲是完全透明的。多个存储控制器端口(采用iSCSI协议,TCP/IP端口)绑在一起形成了一个虚拟的IP地址,主机只要访问一个IP地址(逻辑层),就可以访问所有的存储柜资源,而物理层的数据通过虚拟化层(控制器的软件功能实现)自动实现了RAID保护(RAID 1/0、RAID 5、RAID 6)和底层虚拟化数据打散。

  以下Dell QqualLogic PS系列控制器的体系架构图,供参考

 存储器底层虚拟化下的RAID保护技术

  由此也可见iscsi或FcoE的确为云计算环境的一个理想的网络架构,而FC的市场增长率令人担忧....

  4、其他创新型RAID保护技术

  IT技术发展日新月异,可以说各种RAID保护思想层出不穷,笔者在这里稍微介绍几种思路。

  一种思路是通过纵横交叉进行RAID保护计算的方法来减轻存储控制器关于RAID计算的负载,这种算法能够提供类似于RAID 6的高可靠性,但CPU消耗更低效率更高,有些新兴存储厂商的产品采用了此种创新型RAID 6计算思路;

  另外一种干脆不在底层做RAID保护,取而代之地是通过在主机文件系统层把数据在不同的地点的另外一个服务器上复制一份(甚至更多份)来实现文件的冗余保护,这样做的另外一个好处是通过网络的仲裁机制,两个内容相同的文件可以交替提供存储服务给服务器,从而提高访问性能,这种思路多用于公有云环境中,由于数据量太大,网络运营商无法支付起磁盘阵列的价格,干脆通过在裸盘上写多次来实现数据冗余保护。

  还有一种是进一步细化RAID写入条带的block size的思路:IBM XIV系列的产品采用了以1MB为粒度的单元将数据写入到各个存储模块中,通过内部通过智能算法,实现数据在各模块的均衡分布。XIV希望通过打散写入的方式来提高性能(多个磁盘并发相应主机端的IO请求),据IBM称这种特殊的打散的方式也可以加快数据的恢复速度。3Par也是采用了类似的思路进行数据保护。

  具体细节参考下图:

 存储器底层虚拟化下的RAID保护技术

  各种RAID类型之间的比较

  1、空间的利用率

  表1表明了在RAID 1,RAID 5和RAID 6下的有多少磁盘空间是可以给用户数据使用的。

  表1 不同RAID类型的磁盘利用率比较

 各种RAID类型之间的比较

  2、性能之间的比较

  表2表明了在足够磁盘数据的情况下各种RAID类型的性能比较,RAID-1 (2D + 2D)作为基准(100%),下面这张表非常关键,请大家记住。

  表2 不同RAID类型的性能比较

 各种RAID类型之间的比较

  常见的OLTP数据库应用有很多随机读写的IO操作,而OLAP数据仓库应用和流媒体应用中顺序写、读的IO操作较多。

  3、比较RAID 5 (7D+1D)和RAID-6 (6D+2D)随机写

  如表2中所示,RAID-6在增加了可靠性的同时,牺牲了部分随机写性能。在随机写操作中,在同样多的磁盘的RAID组中,RAID-6所花费的时间是RAID-7的的1.5倍。每次RAID-5 (7D + 1D)进行一次随机写操作,实际上产生了4个I/O:读老的应用数据,读老的校验数据,写新的应用数据和写新的校验数据(P)。而RAID-6做同样一个随机写操作,实际上需要6个I/O,读老的用户数据,读老的校验数据P,读老的校验数据Q,写新的用户数据,写新的校验数据P,写新的校验数据Q。这样就造成了RAID-5 (7D + 1D)和RAID-6 (6D + 2D)随机写的33%性能差异。

  4、RAID 1、RAID 1+0和RAID 0+1的区别

  谈到RAID保护,特别是镜像保护,是在数据库中会经常用到的(由于镜像保护没有传统RAID 5/6的写惩罚,在离散型IO应用特点下性能较高)。

  于是经常有人会问什么叫RAID 1,什么叫RAID 1+0,什么叫RAID 0+1,三者间有什么样子的区别。当然这三者间最大的区别是很明显的。

  首先RAID 1是最传统的思路,即先完一个磁盘,再写另外一个磁盘,从而做到镜像保护。这种做法已经逐步淘汰,因为这样盯着一个磁盘写写满后再转到另外一个磁盘显然会导致性能问题,因此引入条带化写入技术RAID 0势在必行。而这样就产生了到底是采用RAID 1+0还是采用RAID 0+1的问题。

  首先我们来看RAID 1+0机制,即每一个数据块条带先找到另外一块磁盘的条带做镜像在通过条带化写入到其他磁盘里面去,显然性能提升很快,又能做到保护。即使坏了一个条带单位(磁盘某个扇区),RAID保护工作量也不大(只需要重新把这个小数据条带恢复即可)。

  而如果是采用RAID 0+1机制,情况就两样了。需要每一次写入整块数据(由很多个条带组成)完成后,再以此为单位做整个条带的镜像,和RAID 1+0相比,性能也能够提升,可是当一个条带损坏则要命了。由多个条带组成的数据块是一个整体,其间一个小条带的损坏都需要整个数据库重新做镜像保护处理....这简直就是恶梦。

  这就是为什么RAID 1+0现在是各家存储器厂商标准配置的原因...

  经常在各个存储论坛看到有人问RAID 1+0和RAID 0+1的区别的问题,希望本文能够帮助大家加深理解。

  5、RAID选择中的注意事项

  在选择采用何种RAID类型的时候,必须注意以下事项:

  l 用户数据需要多少空间

  l 校验带来的磁盘空间损失

  l 应用的性能要求

  l 在磁盘故障时,磁盘的重建时间

  随着用户数据的不断增长,用户采用大容量磁盘的可能性也与日俱增,但是在使用大容量硬盘的时候,必须要考虑过长的重建时间而引起的数据丢失风险。在某些情况下,数据重建会非常困难或者对系统性能的冲击会很大,如:大交易量,大批量写操作的数据库应用。

  总结

  RAID-5技术是很多存储系统数据保护的基础。但是采用RAID-5技术需要承担在第一块故障盘重建的过程中,第二块磁盘发生故障而导致数据丢失的风险。而RAID-6技术的推出使得数据可以在两块磁盘同时故障的情况下也不会丢失。存储系统在选择RAID保护技术RAID-1,RAID-5的基础上增加了RAID-6技术,为业界最为完整的数据保护技术给用户选择。再次提醒大家注意不同RAID在OLTP和OLAP应用环境下的性能对比,在部署RAID级别时灵活使用。另外在部署SATA盘时尽量采用RAID 6技术。

  另外底层虚拟化技术在存储器层越来越多的应用,从原理上并没有颠覆传统磁盘RAID保护的概念和思路,其区别在于把其RAID保护的单位从传统的以单个磁盘为单位改成了以整个存储池的最小分配单元为单位做RAID保护机制,但是需要注意的是底层完全虚拟化和半虚拟化情况下的存储器底层实现RAID保护的思路是不一样的。

0
相关文章