Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11591345
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-07-14 10:49:43

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

  过去十年来,CPU的处理速度几乎是几何级数的跃升,内存(memory)的存取速度亦大幅增加,而数据储存装置——主要是磁盘——的存取速度相较之下,较为缓慢,整个I/O吞吐量不能系统匹配,形成电脑系统的瓶颈,拉低了电脑系统的整体性能(throughput),若不能有效的提升磁盘的存取速度,CPU、内存及磁盘间的不平衡将使CPU及内存的改进形成浪费。

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

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

  一般高性能的磁盘阵列都是以硬件的形式来达成,进一步地把磁盘快取控制及磁盘阵列结合在一个控制器(RAID Controller)或控制卡上,针对不同的用户解决众对磁盘输出输入系统的四大要求:

  (1) 增加存取速度;

  (2) 容错(fault tolerance),即安全性;

  (3) 有效地利用磁盘空间;

  (4) 尽量地平衡CPU、内存及磁盘的性能差异,提高电脑的整体工作性能。

  2.磁盘阵列原理
  1987年,加州柏克大学的三位人员发表了名为“磁盘阵列研究”的论文,正式提到了RAID也就是磁盘阵列,论文提出廉价的5.25"及3.5"的硬盘也能如大机器上的8"盘般提供大容量、高性能和数据的一致性,并详述了RAID 1至5的技术。

  磁盘阵列针对不同的应用使用不同技术,称为RAID Level, RAID是Redundant Array of Inexpensive Disks的缩写,而每一Level代表一种技术,目前业界公认的标准是RAID 0~RAID 5。这个level并不代表技术的高低,level 5并不高于level 3,level 1也不低过level 4,至于要选择那一种RAID level的产品,纯视用户的操作环境及应用而定,与level的高低没有必然的关系。RAID 0没有安全的保障,但其快速,所以适合高速I/O的系统;RAID 1适用于需安全性又要兼顾速度的系统,RAID 2及RAID 3适用于大型电脑及影像、CAD/CAM等处理;RAID 5多用于OLTP,因有金融机构及大型数据处理中心的迫切需要,故使用较多而较有名气,但也因此形成很多人对磁盘阵列的误解,以为磁盘阵列非要RAID 5不可;RAID 4较少使用,各RAID 5有其共同之处,但RAID 4适合大量数据的存取。其他如RAID 6,RAID7,乃至RAID 10,50,100等,都是厂商各做各的,并无一致的标准,在此不作说明。介绍各个RAID level之前,先看看形成磁盘阵列的两个基本技术:

  磁盘延伸(Disk Spanning):

  译为磁盘延伸,能确切地表示disk spanning这种技术的含义。如下图所示,Oaraid?;磁盘阵列控制器,联接了四个磁盘:

  磁盘1 磁盘2 磁盘3 磁盘4

  这四个磁盘形成一个阵列,而磁盘阵列的控制器是将此四个磁盘视为单一的逻辑磁盘,如DOS环境下的C:盘。这是disk spanning的意义,把小容量的磁盘延伸为大容量的单一磁盘。因为电脑本身只把硬盘当作一储存空间,并不安排管理数据在硬盘的方式,磁盘阵列控制器会决定如何使用储存空间以得到最好的性能和数据的一致性。所以用户不必规划数据在磁盘的分布,而且提高磁盘空间的使用率。Oaraid?;的SCSI磁盘阵列更可连接几十个磁盘,形成数十GB到数百GB的阵列,使磁盘容量几乎可作无限的延伸;而各个磁盘一起作存取的动作,比单一磁盘更为快捷。很明显地由此阵列形成而产生RAID的各种技术。我们也可从上图看出inexpensive(便宜)的意义,四个500MB的磁盘比一个2GB的磁盘要便宜,因为以前大磁盘的价格非常昂贵,但在磁盘越来越便宜的今天,inexpensive已非磁盘阵列的重点,虽然对于需要大磁盘容量的系统,仍是考虑的要点。

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

  因为磁盘阵列是将同一阵列的多个磁盘视为单一的虚拟磁盘(virtual disk),所以其数据是以分段(block or segment)的方式顺序存放在磁盘阵列中,如下图:

  磁盘0 磁盘1 磁盘2 磁盘3

  A0 A1 A2 A3

  A4 A5 A6 A7

  … … … …

  4N-3 4N-2 4N-1 4N

  分段的意思是把数据分小段跨越分布在各个磁盘,数据按需要分段,从第一个磁盘开始放,放到最后一个磁盘再回到第一个磁盘,直到数据分布完毕。至于分段的大小视系统而定,如果磁盘阵列所分区块和操作系统的所分的区块是一致的话,会有较好的效率。有的系统或以1KB最有效率,或以4KB,或以6KB,甚至是4MB或8MB的,但除非数据小于扇区(sector, 即512bytes),否则其分段应是512byte的倍数。因为磁盘的读写是以一个扇区为单位,若数据小于512bytes,系统读取该扇区后,还做组合或分组(视读或写而定)的动作,浪费时间。从上图我们可以看出数据以段方式放在不同的磁盘,整个阵列的各个磁盘可同时作读写,故数据分段使数据的存取有最好的效率,理论上本来读一个包含四个分段的数据所需要的时间约为(磁盘的access time +数据的transfer time)* 4次,现在只要一次就可以完成。

  Oaraid?;可将同一数据分段放在不同的磁盘,比如磁盘阵列定义的分段为4KB,而5KB的数据可把4KB的数据放在一个磁盘的分段上,另外1KB的数据放在另一磁盘的分段,而另一笔数据可从这个磁盘分段所剩下的3KB空位放起,这样不但能增加磁盘的利用率,而且可同时启动多个磁盘一起动作,增加存取的速度,在很多情况之下,即使是小于一个分段的数据,也能得到负载均衡的好处,所以分段大小优化心脏可作跨盘分段(同一数据分段放在不同的磁盘分段)。可得到较好的存取效能,这也是为什么OAraid?; Viper-II5000系列能有37MB/sec的存取效能的原因。

  若以N表示磁盘的数目,R表示读取,W表示写入,S表示可使用空间,则数据分段的性能为:

  R:N(可同时读取所有磁盘)

  W:N(可同时写入所有磁盘)

  S:N(可利用所有的磁盘,并有最佳的使用率)

  Disk striping也称为RAID 0,很多人以为RAID 0没有什么,其实这是非常错误的观念,因为RAID 0使磁盘的输入输出有最高的效率。而磁盘阵列有更好的效率的原因除数据分段外,它可以同时执行多个输入输出的要求,因为阵列中的每一个磁盘都能独立动作,分段放在不同的磁盘,不同的磁盘可同时作读写,而且能在快取内存及磁盘作并行存取(parallel access)的动作。Striping打破了单一磁盘所形成的瓶颈。Oapro对以上图4个1GB硬盘的阵列和1个4GB的硬盘作过比较,磁盘阵列的效能约为单一磁盘的3至3.5倍,若4个磁盘分别接Oaraid?; 4个SCSI通道形成阵列,其I/O性能是单一磁盘的4倍。但是否真能表现出这种能力,要视操作系统,用户数目或工作负荷的特性而定,要能同时得到各个磁盘的交通,其工作负荷也必须分布在各个磁盘。

  从上面两点我们可以看出,disk spanning定义了RAID的基本形式,提供了一个便宜、灵活、高性能系统结构,而disk stripping解决了数据的存取效率和磁盘的利用率问题,RAID 1至RAID 5是在此基础上提供磁盘安全的方案。

  RAID 1
  RAID 1是使用磁盘镜像(disk mirroring)的技术。磁盘镜像应用在RAID 1之前就在很多系统中使用,它的方式是在工作磁盘(working disk)之外再加一额外的备份磁盘(backup disk),两个磁盘所储存的数据完全一样,数据写入工作磁盘的同时亦写入备份磁盘。

  一般镜像对磁盘的读取有几种方式:

  1. 只读取工作磁盘,镜像磁盘只是作后备

  2. 两个硬盘同时读取,采用选取回应的磁盘的数据

  3. 把不同的读取要求分布在不同的磁盘上

  4. 直接读主磁盘,如主磁盘正忙,则读取镜像磁盘,如两个磁盘都忙碌,则采用3的方式以分散负载

  5. 把磁盘的容量分为两半,一个磁盘只读0至N/2(磁盘外侧)的区域,另一磁盘只读N/2至N(磁盘内侧)的区域。

  以上方式除1之外,其余都比单一磁盘的效能来的高,能提高多少和系统有关,但以5而言,如数据主不到磁盘的一半,则和单一磁盘无异。

  写入也有几种方式:
  1. 同时写入两个磁盘,并等待两个盘的数据完好。这种方式比单个磁盘稍慢。

  2. 直接写入主磁盘,而在镜像磁盘不忙时才写入,这样比方式1有较好的性能,但在某些读取的方式上会导致数据不一致,在引非同步情况之下,若主磁盘故障会使数据失落。

  磁盘镜像不见得就是RAID 1,一般磁盘镜像和RAID 1有两点最大的不同:下图为RAID 1,每一笔数据都储存两份:

  磁盘0 磁盘1 磁盘2 磁盘3

  A0 A1 A2 A3

  A4 A5 A6 A7

  … … … …

  4N-3 4N-2 4N-1 4N

  从上图可以看出:

  R:N(可同时读取所有磁盘)

  W:N/2(同时写入磁盘数)

阅读(278) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~