磁盘阵列(Redundant Arrays of Independent Disks ,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。
磁盘阵列是由很多价格较便宜的磁盘, 组合成一个容量巨大的磁盘组,利用个别磁盘提供的数据所产生加成效果提升整个磁盘系统效能。
利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。磁盘阵列还能利用同位检查( Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
磁盘阵列其样式有三种,一是外接式磁盘阵列柜、二是内接式磁盘阵列卡,三是利用软件来仿真。
外接式磁盘阵列柜
最常被使用大型服务器上,具可热交换( Hot Swap)的特性,不过这类产品的价格都很贵。
内接式磁盘阵列卡
因为价格便宜,但需要较高的安装技术,适合技术人员使用操作。硬件阵列能够提供在线扩容、动态修改阵列级别、自动数据恢复、驱动器漫游、超高速缓冲等功能。它能提供性能、数据保护、可靠性、可用性和可管理性的解决方案。阵列卡专用的处理单元来进行操作。
利用软件仿真的方式
是指通过网络操作系统自身提供的磁盘管理功能将连接的普通SCSI卡上的多块硬盘配置成逻辑盘,组成阵列。软件阵列可以提供数据冗余功能,但是磁盘子系统的性能会有所降低,有的降低幅度还比较大,达30%左右。因此会拖累机器的速度,不适合大数据流量的服务器。
磁盘阵列作为独立系统在主机外直连或通过网络与主机相连。磁盘阵列有多个端口可以被不同主机或不同端口连接。一个主机连接阵列的不同端口可提升传输速度。
和当时PC用单磁盘内部集成缓存一样,在磁盘阵列内部为加快与主机交互速度,都带有一定量的缓冲存储器。主机与磁盘阵列的缓存交互, 缓存与具体的磁盘交互数据。
在应用中,有部分常用的数据是需要经常读取的,磁盘阵列根据内部的算法,查找出这些经常读取的数据,存储在缓存中,加快主机读取这些数据的速度, 而对于其他缓存中没有的数据,主机要读取,则由阵列从磁盘上直接读取传输给主机。对于主机写入的数据,只写在缓存中,主机可以立即完成写操作。然后由缓存再慢慢写入磁盘。
···随着计算机应用的日益普及,人们对计算速度和性能的要求也逐渐提高。在一个完整的计算机系统中,CPU和内存的作用固然重要,但是数据存储设备性能的好坏和速度的快慢也直接影响到整个系统的表现。这次要讲解的 RAID技术起初主要应用于服务器高端市场, 但是随着个人用户市场的成熟和发展,正不断向低端市场靠拢,从而为用户提供了一种既可以提升硬盘速度, 又能够确保数据安全性的良好的解决方案。本文将对RAID技术进行较为详细的介绍,希望能够对大家有所帮助。
RAID是英文Redundant Array of Inexpensive Disks 的缩写,中文简称为磁盘阵列。其实,从RAID的英文原意中,我们能够多少知道 RAID就是一种由多块廉价磁盘构成的冗余阵列。虽然 RAID包含多块磁盘,但是在操作系统下是作为一个独立的大型存储设备出现。RAID技术分为几种不同的等级,分别可以提供不同的速度,安全性和性价比。
人们在开发RAID时主要是基于以下设想,即几块小容量硬盘的价格总和要低于一块大容量的硬盘。虽然目前这一设想还没有成为现实, RAID在节省成本方面的作用还不是很明显,但是 RAID可以充分发挥出多块硬盘的优势,实现远远超出任何一块单独硬盘的速度和吞吐量。除了性能上的提高之外, RAID还可以提供良好的容错能力,在任何一块硬盘出现问题的情况下都可以继续工作, 不会受到损坏硬盘的影响。
常用的等级有0、1、3、5、01、10级等。 RAID分类通常我们有5种常见的RAID级别,这些级别不是刻意分出来的,而是按功能分的。不同的 RAID级别提供不同的性能,数据的有效性和完整性取决于特定的 I/O环境。没有任何一种RAID级别可以完美的适合任何用户。
我们在前文中已经提到 RAID分为几种不同的等级,
其中, RAID 0是最简单的一种形式。RAID 0可以把多块硬盘连接在一起形成一个容量更大的存储设备。最简单的RAID 0技术只是提供更多的磁盘空间,不过我们也可以通过设置,使用RAID 0来提高磁盘的性能和吞吐量。RAID 0没有冗余或错误修复能力,但实现成本是最低的。
RAID 0最简单的实现方式就是把几块硬盘串联在一起创建一个大的卷集。磁盘之间的连接既可以使用硬件的形式通过智能磁盘控制器实现, 也可以使用操作系统中的磁盘驱动程序以软件的方式实现。图示如下:
在上述配置中,我们把4块磁盘组合在一起形成一个独立的逻辑驱动器, 容量相当于任何任何一块单独硬盘的 4倍。如图中彩色区域所示,数据被依次写入到各磁盘中。当一块磁盘的空间用尽时,数据就会被自动写入到下一块磁盘中。
这种设置方式只有一个好处,那就是可以增加磁盘的容量。至于速度,则与其中任何一块磁盘的速度相同,这是因为同一时间内只能对一块磁盘进行 I/O操作。如果其中的任何一块磁盘出现故障, 整个系统将会受到破坏,无法继续使用。从这种意义上说,使用纯 RAID 0方式的可靠性仅相当于单独使用一块硬盘的1/4(因为本例中RAID 0使用了4块硬盘)。
虽然我们无法改变 RAID 0的可靠性问题,但是我们可以通过改变配置方式,提供系统的性能。与前文所述的顺序写入数据不同,我们可以通过创建带区集,在同一时间内向多块磁盘写入数据。
具体如图所示:
上图中,系统向逻辑设备发出的 I/O指令被转化为4项操作,其中的每一项操作都对应于一块硬盘。我们从图中可以清楚的看到通过建立带区集, 原先顺序写入的数据被分散到所有的四块硬盘中同时进行读写。四块硬盘的并行操作使同一时间内磁盘读写的速度提升了 4倍。
在创建带区集时,合理的选择带区的大小非常重要。如果带区过大,可能一块磁盘上的带区空间就可以满足大部分的 I/O操作,使数据的读写仍然只局限在少数的一、两块硬盘上,不能充分的发挥出并行操作的优势。另一方面,如果带区过小,任何I/O指令都可能引发大量的读写操作,占用过多的控制器总线带宽。因此,在创建带区集时,我们应当根据实际应用的需要,慎重的选择带区的大小。我们已经知道,带区集可以把数据均匀的分配到所有的磁盘上进行读写。
如果我们把所有的硬盘都连接到一个控制器上的话, 可能会带来潜在的危害。这是因为当我们频繁进行读写操作时, 很容易使控制器或总线的负荷超载。为了避免出现上述问题,建议用户可以使用多个磁盘控制器。
示意图如下:
这样,我们就可以把原先控制器总线上的数据流量降低一半。当然,最好解决方法还是为每一块硬盘都配备一个专门的磁盘控制器。
虽然RAID 0 可以提供更多的空间和更好的性能,但是整个系统是非常不可靠的,如果出现故障,无法进行任何补救。所以, RAID 0一般只是在那些对数据安全性要求不高的情况下才被人们使用。
RAID 1和RAID 0 截然不同,其技术重点全部放在如何能够在不影响性能的情况下最大限度的保证系统的可靠性和可修复性上。RAID 1是所有RAID等级中实现成本最高的一种,尽管如此,人们还是选择 RAID 1来保存那些关键性的重要数据。
RAID 1又被称为磁盘镜像,每一个磁盘都具有一个对应的镜像盘。对任何一个磁盘的数据写入都会被复制镜像盘中;系统可以从一组镜像盘中的任何一个磁盘读取数据。
显然,磁盘镜像肯定会提高系统成本。因为我们所能使用的空间只是所有磁盘容量总和的一半。下图显示的是由 4块硬盘组成的磁盘镜像,其中可以作为存储空间使用的仅为两块硬盘(画斜线的为镜像部分)。
RAID 1下,任何一块硬盘的故障都不会影响到系统的正常运行,而且只要能够保证任何一对镜像盘中至少有一块磁盘可以使用, RAID 1甚至可以在一半数量的硬盘出现问题时不间断的工作。当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据。
通常,我们把出现硬盘故障的 RAID系统称为在降级模式下运行。虽然这时保存的数据仍然可以继续使用,但是 RAID系统将不再可靠。如果剩余的镜像盘也出现问题,那么整个系统就会崩溃。因此,我们应当及时的更换损坏的硬盘,避免出现新的问题。
更换新盘之后,原有好盘中的数据必须被复制到新盘中。这一操作被称为同步镜像。同步镜像一般都需要很长时间,尤其是当损害的硬盘的容量很大时更是如此。在同步镜像的进行过程中,外界对数据的访问不会受到影响, 但是由于复制数据需要占用一部分的带宽,所以可能会使整个系统的性能有所下降。
因为RAID 1主要是通过二次读写实现磁盘镜像,所以磁盘控制器的负载也相当大,尤其是在需要频繁写入数据的环境中。为了避免出现性能瓶颈,使用多个磁盘控制器就显得很有必要。下图示意了使用两个控制器的磁盘镜像。
使用两个磁盘控制器不仅可以改善性能, 还可以进一步的提高数据的安全性和可用性。我们已经知道, RAID 1最多允许一半数量的硬盘出现故障,所以按照我们上图中的设置方式(原盘和镜像盘分别连接不同的磁盘控制) ,即使一个磁盘控制器出现问题,系统仍然可以使用另外一个磁盘控制器继续工作。这样,就可以把一些由于意外操作所带来的损害降低到最低程度。
备注:镜像卷 写入性能一般 读数据快 容错 磁盘50%浪费
根据组合分为 RAID 10 和 RAID 0 1,实际是将RAID 0 和 RAID 1标准结合的产物,在连续地以位或字节为单位分割数据并且并行读 /写多个磁盘的同时,为每一块磁盘作磁盘镜像进行冗余 它的优点是同时拥有 RAID 0 的超凡速度和 RAID 1 的数据高可靠性。
Raid 10其实结构非常简单,首先创建 2个独立的Raid1,然后将这两个独立的Raid1组成一个Raid0,当往这个逻辑Raid中写数据时,数据被有序的写入两个Raid1中。磁盘1和磁盘2组成一个Raid1,磁盘3和磁盘4又组成另外一个Raid1;这两个Raid1组成了一个新的 Raid0。如写在硬盘1上的数据1、3、5、7,写在硬盘2中则为数据1、3、5、7,硬盘3中的数据为0、2、4、6,硬盘4中的数据则为0、2、4、6,因此数据在这四个硬盘上组合成 Raid10,且具有raid0和raid1两者的特性。
虽然Raid10方案造成了50%的磁盘浪费,但是它提供了 200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一 Raid1中,就能保证数据安全性。假如磁盘中的某一块盘坏了,整个逻辑磁盘仍能正常工作的。[2]当我们需要恢复RAID 10中损坏的磁盘时,只需要更换新的硬盘,按照RAID10的工作原理来进行数据恢复,恢复数据过程中系统仍能正常工作。原先的数据会同步恢复到更换的硬盘中。
总的来说,RAID 10以RAID 0为执行阵列,以 RAID 1为数据保护阵列,它具有与RAID 1一样的容错能力,用于容错处理的系统开销与单独的镜像操作基本一样,由于使用RAID 0作为执行等级,因此具有较高的 I/O宽带;对于那些想在RAID 1基础上大幅提高性能的用户,它是一个完美的解决方案。RAID 10适用于数据库存储服务器等需要高性能、高容错但对容量要求不大的场合。
这是RAID 0的改良版,以汉明码(Hamming Code)的方式将数据进行编码后分割为独立的位元,并将数据分别写入硬盘中。 因为在数据中加入了错误修正码(ECC,Error Correction Code),所以数据整体的容量会比原始数据大一些。
它同RAID 2非常类似,都是将数据条块化分布于不同的硬盘上,区别在于RAID 3使用简单的奇偶校验,并用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据;如果奇偶盘失效则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据来说,奇偶盘会成为写操作的瓶颈。
所需成员磁盘数 | 3个或更多,最低为3个 |
---|---|
优点 | 读写性能都比较好 当有磁盘损坏时,对整体吞吐量影响较小 减少了开销 |
缺点 | 控制器设计复杂 采用并行存取方式,主轴同步时吞吐量没有提高 校验磁盘的写性能有瓶颈 |
RAID 4和RAID 3很象,不同的是,它对数据的访问是按数据块进行的,也就是按磁盘进行的,每次是一个盘。 在图上可以这么看, RAID3是一次一横条,而RAID4一次一竖条。它的特点的 RAID3也挺象,不过在失败恢复时,它的难度可要比RAID3大得多了,控制器的设计难度也要大许多,而且访问数据的效率不怎么好。
RAID 5 不单独指定的奇偶盘,而是在所有磁盘上交叉地存取数据及奇偶校验信息。在RAID 5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。RAID 5更适合于小数据块和随机读写的数据。RAID 3与RAID 5相比,最主要的区别在于 RAID 3每进行一次数据传输就需涉及到所有的阵列盘;而对于RAID 5来说,大部分数据传输只对一块磁盘操作, 并可进行并行操作。在RAID5中有“写损失”,即每一次写操作将产生四个实际的读 /写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。
所需成员磁盘数 | 3个或更多,最低为3个 |
---|---|
优点 | 读性能比较高 中等的学性能 校验信息的分布式存取,避免出现写操作的瓶颈 |
缺点 | 控制器设计复杂 磁盘重建的过程比较复杂 |
备注:至少3块盘 只允许坏一块盘 读写性能好 坏掉一块盘读性能变慢
RAID 0 存取速度最快 没有容错
RAID 1 完全容错成本高
RAID 2 带海明码校验,数据冗余多,速度慢
RAID 3 写入性能最好 没有多任务功能
RAID 4 具备多任务及容错功能 Parity 磁盘驱动器造成性能瓶颈
RAID 5 具备多任务及容错功能 写入时有overhead
RAID 0+1/RAID 10 速度快、完全容错 成本高
一般来说,要实现 RAID可以分为硬件实现和软件实现两种。硬 RAID就是指通过硬件实现,同理软件实现的就称作为软 RAID。
下面就来分别解释一下硬RAID与软RAID:
所谓的 硬RAID,就是用专门的RAID控制器将硬盘和电脑连接起来,RAID控制器负责将所有的 RAID成员磁盘配置成一个虚拟的 RAID磁盘卷。对于操作系统而言,他只能识别到由 RAID控制器配置后的虚拟磁盘,而无法识别到组成RAID的各个成员盘。
软 RAID就是不使用RAID控制器,而是直接通过软件层实现的 RAID。与硬RAID不同的是,软RAID的各个成员盘对于操作系统来说是可见的,但操作系统并不把各个成员盘呈现给用户, 而只是把通过软件层配置好的虚拟 RAID卷呈现给用户,使用户可以像使用一个普通磁盘一样使用RAID卷。
The only failure there is is the failure to try. 勇于尝试,便不叫失败。
本篇完_