分享

RAID技术深度剖析

 心之所指 2006-01-04
在过去的20年里,计算机技术日新月异逐渐介入了我们的生活的方方面面:商业、教育、休闲、娱乐……同时各个方面不断对计算机技术提出了更高的要求,为了适应人们的需要,计算机技术不断的在各个方面变革着。现在这个社会,我们无时无刻不需要信息和消费信息。Internet的普及更加剧了信息成几何化增长,于是存储信息并且防止信息丢失就成为了一个首要问题。当然用于存储信息数据的设备就是关键了:比如对于一个大型的网站来说,因为存储设备的故障导致网站的片刻的瘫痪,也可能带来数以百万元的损失。很显然单靠用多个硬盘简单的备份不能从根本上解决问题。这时一种叫做独立冗余磁盘阵列(RAID:Redundant Array of Independent (or Inexpensive) Disks)的技术就应运而生了,这种技术可以把数据分布到多个硬盘上,从而取得更好的稳定性和性能。作为普通的计算机用户,也许你只是熟悉IDE或者软件RAID解决方案,本文就是让你了解RAID技术的内幕。
一、什么是RAID?
RAID通俗的说就是通过将多个存储设备按照一定的形式和方案组织起来,如同使用一个硬盘一样但是却通过这样的形式获取了比单个存储设备更高的速度、更好的稳定性、更大的存储能力的存储设备的解决方案。根据你的需要不同,可以采用不同形式以及不同价格(从几千元到上百万元)的RAID解决方案——很显然,越好的RAID系统,价格越昂贵,所以几乎没有最好的RAID系统。另外,选择Raid系统要适应不同的应用程序。
一般来说RAID是用于比较昂贵的服务器系统中的。不过,随着便宜的RAID控制器的出现,它已经渐渐向市场主流发展了。当然在目前的主流市场实现RAID有一定的局限性,它并不适用于每一个人。目前有许多种类的RAID levels。在介绍不同RAID模式的区别的时候,我要简述一下几个基本的概念。
二、阵列和RAID控制器
一个驱动器阵列就是多个硬盘驱动器的集合。要了解RAID,我们应该再弄清楚几个基本概念。
·物理驱动器阵列可以被分开或者组合成为一个或者多个逻辑驱动器阵列。
·逻辑驱动器阵列由可以在操作系统中看到的逻辑驱动器组成。
·逻辑驱动器可以是一个硬盘也可以是硬盘中的一个分区。
在一般简单的RAID应用中,或许这些概念反而可能让你更胡涂,不过在多层RAID嵌套的高端RAID应用中明白这些概念、分清这些概念将是非常重要的。
RAID控制器就是在物理和逻辑阵列中管理数据存取的装置。系统通过它可以查看到逻辑驱动器,但是不必去直接管理。RAID控制器的功能既可以由硬件也可以由软件来实现。硬件RAID一般用于处理大量数据的RAID模式。随着处理器的能力的不断增强,软件RAID功能已经成为可能,不过当处理大量数据时CPU仍然会显得力不从心。在后文,我们将会讨论什么样的应用程序和RAID模式更适于硬件或者软件RAID。
三、镜像技术
镜像就是在两个或者多个独立的硬盘驱动器或者驱动器阵列上存放数据的多个拷贝。系统会同时把数据写在作为镜像的两个硬盘上,这就是RAID技术中冗余技术,用来防止数据意外丢失。当其中一个硬盘或者RAID出现问题,系统可以访问镜像的硬盘或者RAID来继续工作,这样就让数据修复的时间缩短到了最短,此时你要做的就是从完好的备份上恢复数据。
下面的示意图显示了镜像如何工作的。当然这只是一个简单的示意图。A、B、C是独立的文档。在这个示意图里Disk 1和Disk 2指的是硬盘或者磁盘阵列。RAID 控制器将相同的数据同时写入Disk 1和Disk 2。所以每一个硬盘或者磁盘阵列存储了相同的信息。你可以利用延展技术(Striping,后面将详细解释,现在你只需要知道这个技术能提升性能)加入另一个level组成更加复杂的RAID阵列。如果你有一个延展阵列,那么你可以在镜像这个阵列的同时镜像另外一个延展阵列,它可以让RAID变的极为复杂。
缺点也是显而易见的,不能并行写入——因此存储数据的时候并不能提升速度。不过,在读取数据的时候镜像可以提升速度。一个好的RAID控制器可以读取镜像的两个设备中的任意一个的数据,当其中一个使用时,另一个空闲的可以响应其它的请求。这就是并行处理——也就是RAID之所以能提升硬盘性能的原因所在。



镜像适用于强调数据安全的解决方案。因为要把相同的数据存为两份所以就需要更大的存储空间,当然也需要更多的经费来购置存储设备。不过对于相当大的领域内这个花费是值得的。因为数据丢失而去手工回复所需要的时间足够让一些公司倒闭了。不过在另外些场合,数据的稳定性要求不是那么高,就不值得在存储设备上花费两倍的钱了。镜像中两个组成RAID的两个存储设备是对等的,究竟下一步操作需要哪一个设备就需要由parity来决定了。
四、奇偶校验(Parity)技术
Parity是应用于RAID中的另一种冗余技术。这个名词通常用在侦测校验通讯错误方面,例如Modem、内存。 RAID中的Parity类似于内存中的技术。举个例子来说,比如你的一个数据单位有X位数字,那么你可以使用这X位数字产生一个奇偶校验位,并且把这个奇偶校验位作为这个数据单位的第X+1个位,如果这X+1位中的任何一个丢失,剩下的X位仍能修复这个数据。你可能听说过奇偶校验位(parity bit)这个名词,对于数据来讲,这是个额外的数据(但是从安全性上来讲不是多余的)。在RAID中,这个奇偶校验数据将会大的多。还不明白?
一般的这个额外的奇偶校验数据由异或逻辑运算(XOR)产生。如果你对异或逻辑运算不清楚。下表讲让你明白:
p q p XOR q
T T T
T F F
F T F
F F T

很简单“真”“真”异或的结果是真,“假”“假”异或的结果也是真,“真”“假”异或结果是“假”——也就是相同的元素异或结果是“真”,不同元素异或结果是“假”。你可以把这里的“真”“假”分别等同于二进制的0、1。异或运算的一个特性就是你把结果和一个初始值进行异或运算,就能得到另一个初始值。如上表,你可以把(p XOR q)同p或者q进行异或,相应的你会得到q或p。由此你也能看得出来异或运算不需要临时存储空间就能交换两个内存空间。
例如:
10101010 XOR 11111111 = 01010101
11111111 XOR 01010101 = 10101010
10101010 XOR 01010101 = 11111111
由任何两个值都能通过异或运算得到第三个值,这就是异或运算的特性。这个运算可以使用任意多个字节,所以你可以对整个硬盘的数据进行异或运算。现在你是不是可以想到你不必把数据存为两份,而只要一个硬盘就能保护你的数据了——这个想法基本正确,不过仍然还需要一个额外硬盘。这就是奇偶校验技术相对于镜像技术的优势。但是在容错能力不如镜像技术。奇偶校验数据不必存储在单一的物理硬盘上,它可以分布在整个磁盘阵列上,这就是我们常常说的分布式奇偶校验。另外在镜像技术中能实现的Striping技术在奇偶校验中也能实现。主要的限制就是奇偶校验技术需要进行大量的运算,对于计算机有着相当高的要求。每一次读取、写入数据都要进行一次奇偶校验运算,这就必须具备硬件RAID控制器。运用软件RAID几乎是不现世的,因为如此大量的运算会让CPU没有空更重要的事情了。还有一个缺点就是恢复数据比镜像技术复杂。虽然硬件RAID控制器可以自动重建数据,不过比镜像技术要慢的多。
五、延展(Striping)技术
以上几节的内容都是讨论的技术都是关于提高数据可靠性的。不过几次提到了延展这个名词,但是并没有详细的解释。这一节的内容就是重点的介绍延展技术的。延展技术通过把数据分布到阵列的所有驱动器上——而延展技术的主要原理是并行处理。假如你在一个单独的硬盘上有个非常大的文件,如果要读取它只能从头到尾的逐一读取。而Striping技术可以把它分成小块分别存储在多个硬盘之上,读取的时候就可以从多个硬盘里同时调用。同样道理当你写入数据——特别是大文件的时候也是这样的。传输性能将能明显的提高。在一定的范围内,可以说你的硬盘越多,性能的提高就越明显。驱动器数目决定了延展带宽——可以同时用于数据传输的同步延展。不过它们究竟是怎么工作的呢?
每一部分进入RAID控制器的数据都被分成了更小的部分。在延展技术中分割数据分为两个层次:一个是字节层延展(Byte Level Striping),一个是块层延展(Block Level Striping)。字节层延展主要用于把数据以字节为单位分割,并顺序存储在硬盘上。举个例子:如果一组数据被分割为16字节,并且要分布在4个硬盘上,那么第一个字节存储在第一个硬盘上、第二个字节存储在第二个硬盘上……而第五个字节又存到一个硬盘上,如此循环,不过缺点是每次要使用512字节的空间。块层延展以给定大小的尺寸来分割数据,其余的同字节层延展是一样的。这个块的大小称为延展容量(stripe size)。延展容量的大小依据不同的RAID实现方式来决定。
延展容量的大小是一个很关键的课题。因为没有固定的大小是最合适的,不同的应用中应该采用不同的尺寸。延展容量对于最终性能的提高或者降低影响很明显。延展容量越小,文件被分割的就越多。传输性能将因并行处理能力的提高而提高,但是也会增加文件存储的随机性。而使用大的延展容量所取得效果同使用小的延展容量相反。数据分布和传输的性能将会减低,不过文件存放的随机性也会下降。所以要确定指定多么大的延展容量只有根据你经常使用的程序来进行试验,找出最合适的尺寸。先从中等大小开始试验,然后分别增加和减少延展容量,并对结果做出记录,比较之后就有结果了。


上面的示意图是演示延展技术如何工作的。需要存储的数据分为了6块(A,B,C,D,E,F),需要分布到两个硬盘上——如果你要分布到多个硬盘里按照同样的规则进行就可以了。如果你需要移动、传输数据,控制器将对两个硬盘同时存取,从而提高了性能。
六、RAID(RAID levels)的基本模式
前面各个小节阐述了关于RAID的几个基本概念,可以帮助你更好的理解下面的内容。现在我就来介绍一下RAID的标准组成形式(RAID levels)。部分公司自己开发的RAID形式不在此列。这些只是单一的RAID形式,这些形式可以通过不同的方式组合成结构更复杂、功能更多的的RAID。后面的小节我还会谈到。
RAID 0:
这是最简单的RAID模式,它仅仅有延展功能而没有数据冗余功能,所以不适于数据稳定性敏感的应用。在各个单一RAID形式中它提供了最快的性能,也是造价最低的——只要两块硬盘、一个RAID控制器,不需要额外存储设备就可以了。不会因为要在硬盘上存储同样的数据而浪费空间。RAID0因为其相对低廉的造价和明显的性能提升在主流市场上已经流行起来。以前多是SCSI接口,对于个人用户价格仍然不菲,不过随着近来价格更低廉的IDE/ATA解决方案的实现,已经为很多个人用户应用了。其实RAID 0(也就是延展技术)其实是通过RAID控制器把多个硬盘当成一个容量更大、速度更快的硬盘来使用,所以最后要声明的是任何一个硬盘出问题都可能造成整个阵列的数据丢失。
RAID 1:
RAID 1其实就是镜像技术的实现。简单工作原理就是把相同的数据备份存放在两个驱动器,当一个驱动器出现故障,另一个仍然可以维持系统的正常运转。当然恢复故障驱动器也是非常简单的,只要把数据完好的备份拷贝到正常的硬盘上就可以了。数据冗余的换来的是数据的安全。有的RAID 1通过增加一个RAID控制器来提高容错能力。所以对于关键数据来将,这将是最好的选择。不过RAID 1对于系统的性能提高很小。它的相对低廉的价格和易用的特点使它已经成为RAID控制器的主流之一。
RAID 2:
利用汉明校验码(Hamming code ECC.)实现字节层延展技术。这个技术类似于奇偶校验但是并不完全相同。数据以字节为单位被分割并存储在硬盘以及ECC盘上——每当在阵列上写入数据,利用汉明校验规则生成的汉明码就写在了ECC盘,当从阵列中读取数据的时候,汉明码就被用来检验数据写入阵列之后是否被更改过。单字节的错误也能被简测出来并且立即修正过来。不过这种模式所需的RAID控制器价格昂贵,所以至今这种应用几乎没有。
RAID 3:
利用专门奇偶校验实现的字节层延展技术。换句话说,就是应用延展技术将数据分布到阵列的各个驱动器上,同时用专门的驱动器存储用于校验的冗余信息。这种形式的优点就是既通过延展技术提高了性能,又利用专门奇偶校验驱动器容纳冗余信息,以保证数据的安全。一般至少需要3块硬盘:两块用于延展,一块做为专门奇偶校验驱动器。不过虽然利用延展技术提高的性能,可以因为奇偶校验在写入数据时又抵消了一部分性能——因为校验信息同时也需要写入校验驱动器。因为需要进行大量的计算,所以需要硬件RAID控制器,软件RAID几乎没有什么实际意义。RAID 3因为延展容量小,所以适于经常处理大文件的应用。
RAID 4:
RAID 4同RAID 3很相似。唯一的区别就是使用块层延展技术(block level striping),而不是使用的字节层延展技术(byte level striping)。优点是可以通过更改延展容量大小来适用于不同应用。RAID 4也可以看作是RAID 3和RAID 5的混和——既有RAID 3专门奇偶校验驱动器,也有RAID 5的块层延展技术。另外仍然需要硬件RAID控制器。当然专门奇偶校验驱动器还是会降低一些性能。
RAID 5:
RAID 5使用块层延展技术和分布式奇偶校验来实现。它主要针对专门奇偶校验驱动器所带来的瓶颈而产生的解决方案。利用分布式奇偶校验运算法则,把数据和校验数据写在所有的驱动器中。本技术的要旨在于相对于块数据产生校验块(parity blocks)同时存储于阵列当中——解决了专么校验驱动器所带来的瓶颈问题。不过,校验信息是在写入过程中计算出来的,所以对于写入性能仍有影响。当一个硬盘驱动器出现故障,可以从其它的驱动器之中的数据块分离出校验信息从而恢复数据。由于分布式校验本身属性,恢复数据会比其它的形式复杂。RAID 5也可以通过更改延展容量的大小来满足不同应用的需要,另外还需要硬件RAID控制器。RAID 5是目前最流行的RAID应用形式,因为它综合最好的性能、冗余能力、存储能力为一体。当然价格也是不菲的。
七、复合RAID模式
单一的RAID模式肯定不能使用当前各种应用的需要,为了得到更多的性能,人们将各种RAID模式联合起来使用。那么将其中两种模式用在会有什么好处呢?可以得到功能更多、性能更好的RAID模式。一般符合RAID模式需要硬件控制器。因为对于如此复杂的应用软件RAID控制器显然是不现实的。RAID 0在各个单一模式中是速度最快的,所以在符合RAID模式中它也是最常用的。最长常用的符合RAID模式是0+1和1+0。 0+1和1+0是有细微区别的,不过有的公司对这个名词是不加以区分的——其实它们的主要区别在于容错能力。这两种复合RAID模式都至少需要4块硬盘。
首先让我们看看RAID 0+1模式。复合使用RAID 0是为了提高磁盘性能,使用RAID 1为了提高容错性能。假设你有8块硬盘,将它们4个一组分成两个阵列——我将其称为基阵列,每个基阵列用RAID 0模式连接。然后你就有了两个延展模式的基阵列。然后你将这两个基阵列用RAID 1模式连接——也就是让其中一个基阵列作为另一个的镜像。如果一个延展模式的基阵列中的硬盘出现故障了,那么这个延展阵列也将全部瘫痪。不过另一个延展阵列仍然可以维持系统工作,并且可以利用其来恢复数据。
RAID 1+0是先组合RAID 1阵列,然后把它们组成RAID 0模式。仍然使用刚才的例子:将8块硬盘分成4组,每组2块硬盘组成一个基阵列,然后将每个基阵列用RAID 1模式连接,也就是让其中一个硬盘作为另一个的镜像。然后把这4个RAID 1模式的基阵列用RAID 0模式连接。这个模式比RAID 0+1有更好的容错能力。任意的一个硬盘驱动器出现故障,因为有镜像驱动器的存在,所以整个阵列将能继续正常工作。
从理论上讲RAID 1+0模式即使每个基阵列都坏一块硬盘,系统仍然能正常工作,只有当第五块出现故障的时候才有出现不可挽回的损失。而RAID 0+1只要两个基阵列都有一块硬盘故障,那么就无法挽回了。:~(
目前流行的RAID 0+1和1+0模式使用了相对简单的复合技术就提高了性能和增强了数据冗余性。随着硬盘驱动器价格的不断下降,4块硬盘的价格也能为个人用户接受了。不过,如果你需要镜像功能的话,你所能使用的硬盘空间将只有两块硬盘空间大小——为了数据的稳定性,你不得不以牺牲50%的空间为代价。企业级应用以及服务器一般会不惜牺牲磁盘空间换取更高的容错性。另外还有一些其它的复合RAID模式比如:RAID 0+3、3+0、0+5、5+0、1+5、5+1。这些模式的实现往往需要昂贵的硬件支持。

八、RAID模式的选择
现在你已经熟悉了不同的RAID组合模式及其配置,还有什么困扰你?对了,就是如果选择适合的RAID模式。一般用RAID无非就是为了这几个目的:数据冗余、容错性、提高容量、增进性能。数据冗余可以用于保护关键的数据不丢失,一般用于大型公司、企业,当然如果你有钱,也可以为了保护你的以GB为计数单位MP3使用它。容错能力可以带给存储系统更好的稳定。
没RAID通过连接多个硬盘可以提供给计算机系统更大的存储空间。当然根据选择RAID模式的不同,你得到的最大存储空间是不同的,比如如果采用镜像技术,你所需要的空间是要存储数据的两倍。
更多的,特别是个人用户使用RAID技术的目的是为了提高磁盘性能。当然你选择的RAID模式不同,性能的提高也会各不相同。
九、硬件RAID的实现
首先看一下硬件实现RAID模式的方式:一般使用SCSI或者IDE/ATA作为硬盘同系统的接口。SCSI一般应用于高端服务器上,虽然性能优良、功能强大可是对于普通用户来讲价格太高。IDE/ATA RAID控制器成本低廉,(不少主板已经集成)虽然不能太复杂的应用,性能也比不上SCSI设备,但是对于家用市场来说已经能够满足要求了,所以渐渐成了RAID的主流。
硬件RAID实现分为两种:一种是内置(或集成)RAID控制器,一种是外置RAID控制器。内置RAID控制器通常是常用的卡件的形式插接在计算机主板上,集成RAID控制器则是由主板厂商直接把控制芯片集成在主板上,近来高端主板集成RAID控制器几乎成了标准配置。根据RAID控制器以及连接模式不同,RAID控制器都配有不同数量的缓存,当然缓存越多,控制器的性能就越好了,价格也就越贵了。
外部RAID控制器包括从控制器到硬盘等一套设备。在高端服务器上,你常常可以看到由独立的机箱容纳RAID控制器和硬盘。控制器包括了所有的RAID功能——在系统中看到的只是所有的逻辑驱动器。外部RAID控制器相比内置RAID控制器结构更加复杂,缓存容量更大。这是因为它常常要连接并且组织大量的硬盘来组成复杂的复合RAID来工作。它一般使用SCSI接口——可以进行热插拔,来更换有故障的硬盘,避免中置计算机系统停机所带来的损失。
很明显内置控制器外置的便宜的多。不过外置控制器功能强大、可扩展性强,但是价格不是个人所能承受的。虽然IDE/ATA RAID控制器日渐增多,可是SCSI因其特殊的性能仍然是高端计算机系统的首选。当然你可以选择软件RAID——这是一个相当经济的选择,但是需要占用CPU时间,所以RAID模式越复杂,对于计算机系统影响就越大。所以如果你的预算足够还是选择硬件RAID模式吧!
十、结语
RAID对于希望得到更快的传输性能、良好的数据冗余性、海量的存储能力的公司和企业用户是相当合适的解决方案。有非常多种类的RAID模式,从最简单的、最便宜的到极端复杂、及其昂贵的都有。RAID对于计算机系统的好处是显而易见的,但是不是对每一个人都适用。如果你是不断追求计算机性能极至的发烧狂人,口袋里还有花不完的¥($也行),那么看到这一行请马上买一套来体验一下吧。如果你只是像我一样的普通人,建议你看看RAID那天文数字般价格标签满足一下吧!写本文的主要宗旨就是让你了解一下RAID这一种技术,虽然我不是计算机硬件专家,我也不能保证我所写的都是100%正确,我真心的希望你看到此处真的有所收获。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多