发新话题
打印

【转载】磁盘阵列(Disk Array)原理

【转载】磁盘阵列(Disk Array)原理

1.为什么需要磁盘阵列?

    如何增加磁盘的存取(access)速度,如何防止数据因磁盘的故障而失落及如何有效 的利用磁盘空间,一直是电脑专业人员和用户的困扰;而大容量磁盘的价格非常昂贵,对 用户形成很大的负担。磁盘阵列技术的产生一举解决了这些问题。

    过去十几年来,CPU的处理速度增加了五十倍有多,内存(memory)的存取速度亦大 幅增加,而数据储存装置--主要是磁盘(hard disk)--的存取速度只增加了三、四倍,形 成电脑系统的瓶颈,拉低了电脑系统的整体性能(through put),若不能有效的提升磁盘 的存取速度,CPU、内存及磁盘间的不平衡将使CPU及内存的改进形成浪费。

    目前改进磁盘存取速度的的方式主要有两种。一是磁盘快取控制(disk cache controller),它将从磁盘读取的数据存在快取内存(cache memory)中以减少磁盘存取 的次数,数据的读写都在快取内存中进行,大幅增加存取的速度,如要读取的数据不在快 取内存中,或要写数据到磁盘时,才做磁盘的存取动作。这种方式在单工环境(single- tasking envioronment)如DOS之下,对大量数据的存取有很好的性能(量小且频繁的存 取则不然),但在多工(multi-tasking)环境之下(因为要不停的作数据交换(swapping) 的动作)或数据库(database)的存取(因为每一记录都很小)就不能显示其性能。这种方 式没有任何安全保障。

    其二是使用磁盘阵列的技术。磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘 使用,它将数据以分段(striping)的方式储存在不同的磁盘中,存取数据时,阵列中的相 关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列所利用 的不同的技术,称为RAID level,不同的level针对不同的系统及应用,以解决数据安全 的问题。

    一般高性能的磁盘阵列都是以硬件的形式来达成,进一步的把磁盘快取控制及磁盘 阵列结合在一个控制器(RAID controler或控制卡上,针对不同的用户解决人们对磁 盘输出入系统的四大要求: (1)增加存取速度, (2)容错(fault tolerance),即安全性 (3)有效的利用磁盘空间; (4)尽量的平衡CPU,内存及磁盘的性能差异,提高电脑的整体工作性能。

    2.磁盘阵列原理

    磁盘阵列中针对不同的应用使用的不同技术,称为RAID level,RAID是Redundent Array of Inexpensive Disks的缩写,而每一level代表一种技术,目前业界公认的标 准是RAID 0~RAID 5。这个level并不代表技术的高低,level 5并不高于level 3,level 1也不低过level 4,至于要选择那一种RAID level的产品,纯视用户的操作环境 (operating environment)及应用(application)而定,与level的高低没有必然的关系。 RAID 0及RAID 1适用于PC及PC相关的系统如小型的网络服务器(network server)及 需要高磁盘容量与快速磁盘存取的工作站等,比较便宜;RAID 3及RAID 4适用于大型电 脑及影像、CAD/CAM等处理;RAID 5多用于OLTP,因有金融机构及大型数据处理中心的 迫切需要,故使用较多而较有名气, RAID 2较少使用,其他如RAID 6,RAID 7,乃至RAID 10等,都是厂商各做各的,并无一致的标准,在此不作说明。介绍各个RAID level之前, 先看看形成磁盘阵列的两个基本技术:

TOP

磁盘延伸(Disk Spanning):
译为磁盘延伸,能确切的表示disk spanning这种技术的含义。如图磁盘阵列控制器, 联接了四个磁盘,这四个磁盘形成一个阵列(array),而磁盘阵列的控制器(RAID controller)是将此四个磁盘视为单一的磁盘,如DOS环境下的C:盘。这是disk spanning的意义,因为把小容量的磁盘延伸为大容量的单一磁盘,用户不必规划数据在 各磁盘的分布,而且提高了磁盘空间的使用率。并使磁盘容量几乎可作无限的延伸;而各 个磁盘一起作取存的动作,比单一磁盘更为快捷。很明显的,有此阵列的形成而产生 RAID的各种技术。

以上几节的内容都是讨论的技术都是关于提高数据可*性的。不过几次提到了延展这个名词,但是并没有详细的解释。这一节的内容就是重点的介绍延展技术的。延展技术通过把数据分布到阵列的所有驱动器上——而延展技术的主要原理是并行处理。假如你在一个单独的硬盘上有个非常大的文件,如果要读取它只能从头到尾的逐一读取。而Striping技术可以把它分成小块分别存储在多个硬盘之上,读取的时候就可以从多个硬盘里同时调用。同样道理当你写入数据——特别是大文件的时候也是这样的。传输性能将能明显的提高。在一定的范围内,可以说你的硬盘越多,性能的提高就越明显。驱动器数目决定了延展带宽——可以同时用于数据传输的同步延展。不过它们究竟是怎么工作的呢?

每一部分进入RAID控制器的数据都被分成了更小的部分。在延展技术中分割数据分为两个层次:一个是字节层延展(Byte Level Striping),一个是块层延展(Block Level Striping)。字节层延展主要用于把数据以字节为单位分割,并顺序存储在硬盘上。举个例子:如果一组数据被分割为16字节,并且要分布在4个硬盘上,那么第一个字节存储在第一个硬盘上、第二个字节存储在第二个硬盘上……而第五个字节又存到一个硬盘上,如此循环,不过缺点是每次要使用512字节的空间。块层延展以给定大小的尺寸来分割数据,其余的同字节层延展是一样的。这个块的大小称为延展容量(stripe size)。延展容量的大小依据不同的RAID实现方式来决定。

延展容量的大小是一个很关键的课题。因为没有固定的大小是最合适的,不同的应用中应该采用不同的尺寸。延展容量对于最终性能的提高或者降低影响很明显。延展容量越小,文件被分割的就越多。传输性能将因并行处理能力的提高而提高,但是也会增加文件存储的随机性。而使用大的延展容量所取得效果同使用小的延展容量相反。数据分布和传输的性能将会减低,不过文件存放的随机性也会下降。所以要确定指定多么大的延展容量只有根据你经常使用的程序来进行试验,找出最合适的尺寸。先从中等大小开始试验,然后分别增加和减少延展容量,并对结果做出记录,比较之后就有结果了。
需要存储的数据分为了6块(A,B,C,D,E,F),需要分布到两个硬盘上——如果你要分布到多个硬盘里按照同样的规则进行就可以了。如果你需要移动、传输数据,控制器将对两个硬盘同时存取,从而提高了性能。

镜像技术(Mirror)

镜像就是在两个或者多个独立的硬盘驱动器或者驱动器阵列上存放数据的多个拷贝。系统会同时把数据写在作为镜像的两个硬盘上,这就是RAID技术中冗余技术,用来防止数据意外丢失。当其中一个硬盘或者RAID出现问题,系统可以访问镜像的硬盘或者RAID来继续工作,这样就让数据修复的时间缩短到了最短,此时你要做的就是从完好的备份上恢复数据。

TOP

奇偶校验(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控制器可以自动重建数据,不过比镜像技术要慢的多。

磁盘或数据分段(Disk Striping or Data Striping):

因为磁盘阵列是将同一阵列的多个磁盘视为单一的虚拟磁盘(virtual disk),所以其数 据是以分段(block or segment)的方式顺序存放在磁盘阵列中,数据按需要分段,从第一 个磁盘开始放,放到最後一个磁盘再回到第一个磁盘放起,直到数据分布完毕。至于分段 的大小视系统而定,有的系统或以1KB最有效率,或以4KB,或以6KB,甚至是4MB或8MB 的,但除非数据小于一个扇区(sector,即521bytes),否则其分段应是512byte的倍数。 因为磁盘的读写是以一个扇区为单位,若数据小于512bytes,系统读取该扇区后,还要 做组合或分组(视读或写而定)的动作,浪费时间。从上图我们可以看出,数据以分段于在 不同的磁盘,整个阵列的各个磁盘可同时作读写,故数据分段使数据的存取有最好的效 率,理论上本来读一个包含四个分段的数据所需要的时间约=(磁盘的access time+数据 的tranfer time)X4次,现在只要一次就可以完成。

若以N表示磁盘的数目,R表示读取,W表示写入,S表示可使用空间,则数据分段的性能 为: R:N(可同时读取所有磁盘) W:N(可同时写入所有磁盘) S:N(可利用所有的磁盘,并有最佳的使用率)Disk striping也称为RAID 0,很多人以为RAID 0没有甚么,其实这是非常错误的观念, 因为RAID 0使磁盘的输出入有最高的效率。而磁盘阵列有更好效率的原因除数据分段 外,它可以同时执行多个输出入的要求,因为阵列中的每一个磁盘都能独立动作,分段放 在不同的磁盘,不同的磁盘可同时作读写,而且能在快取内存及磁盘作并行存取 (parallel access)的动作,但只有硬件的磁盘阵列才有此性能表现。
从上面两点我们可以看出,disk spanning定义了RAID的基本形式,提供了一个便宜、 灵活、高性能的系统结构,而disk striping解决了数据的存取效率和磁盘的利用率问 题,RAID 1至RAID 5是在此基础上提供磁盘安全的方案。

RAID 1

RAID 1是使用磁盘镜像(disk mirroring)的技术。磁盘镜像应用在RAID 1之前就在很 多系统中使用,它的方式是在工作磁盘(working disk)之外再加一额外的备份磁盘 (backup disk),两个磁盘所储存的数据完全一样,数据写入工作磁盘的同时亦写入备份 磁盘。磁盘镜像不见得就是RAID 1,如Novell Netware亦有提供磁盘镜像的功能,但并 不表示Netware有了RAID 1的功能。一般磁盘镜像和RAID 1有二点最大的不同:

RAID 1无工作磁盘和备份磁盘之分,多个磁盘可同时动作而有重叠(overlaping)读取的 功能,甚至不同的镜像磁盘可同时作写入的动作,这是一种最佳化的方式,称为负载平衡 (load-balance)。例如有多个用户在同一时间要读取数据,系统能同时驱动互相镜像的 磁盘,同时读取数据,以减轻系统的负载,增加I/O的性能。

RAID 1的磁盘是以磁盘延伸的方式形成阵列,而数据是以数据分段的方式作储存,因而 在读取时,它几乎和RAID 0有同样的性能。从RAID的结构就可以很清楚的看出RAID 1 和一般磁盘镜像的不同。

TOP

发新话题