linux下RAID详细配置

简介

RAID是一个我们经常能见到的名词。但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握。本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念。

RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、 容量巨大的硬盘。RAID通常被用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统只会把它当做一个硬盘。 RAID分为不同的等级,各个不同的等级均在数据可靠性及读写性能上做了不同的权衡。 在实际应用中,可以依据自己的实际需求选择不同的RAID方案。

一、RAID的原理基础

在讲解RAID的原理基础之前,我们首先来了解一下传统磁盘的劣势。我们知道一台PC机种都会包含CPU、内存、主板、硬盘、网卡等硬件,影响计算机性能的组建包括:CPU、主板总线IO、内存IO、硬盘IO、网卡IO等。可能我们在一提到影响计算机的性能时,首先想到的就是CPU。但是随着计算机的发展,特别是对于现代的处理器来说,其运算速度已经是非常快的了,同时我们的内存IO速度也已经达到了非常快的地步了(差不多应该有5G每秒),而我们也知道数据都是保存硬盘上的,所以计算机其实是先将硬盘的数据传递给内存,然后CPU再从内存中加载数据来进行运算的,所以由此看来影响整个计算机性能的因素就是我们的硬盘IO速度了。我们来看看目前流行的硬盘类型及速度(数据可能不准确,不过基本差不多)


我们目前的PC机上基本上都是使用SATA接口的硬盘,读的速度大概不超过150M/s,写的速度就更慢了,而生产环境下的服务基本上都是使用SAS(串行SCSI)硬盘,速度最快的是SSD固态硬盘,其速度几乎是SATA的4-5倍。但是即使是使用SSD固态硬盘,其速度在500M/s左右,也远远达不到我们内存以及CPU的处理速度。所以,硬盘是绝大多数计算机的性能的瓶颈

所以,现代磁盘的缺陷就是:I/O性能极差,稳定性极差

I/O性能我们刚已经看到了,就算是使用SSD固态硬盘,其还是会大大影响计算机的性能,稳定性差表现在,如果一个硬盘发生了故障或者损坏,那么这块硬盘就已经不能再使用了,这如果是在对数据保存要求特别高的地方来说,其是不可想象的。正因为如此,就诞生了一种新的技术--RAID。

RAID(Redundant Array of Independent Disks)是廉价磁盘冗余阵列技术的英文缩写,它的原理就是通过多个磁盘并行运行来提高整个计算机的I/O存储性能

RAID的评判标准有如下三个:

 

速度:读写速度的提升

 

磁盘使用率:多磁盘的空间使用率

 

冗余性: 能够支持几块磁盘损坏而不丢失数据

所以,基于以上三个评判标准,RAID分为很多种类,称之为RAID级别,现代RAID一共有7个级别,分别是RAID0~RAID6,但是常用的RAID级别主要是以下四种:

RAID0:提高读写性能

RAID1:提高读写性能、冗余性

RAID5:提高读写性能、冗余性(允许1块硬盘发生故障)

RAID6:提高读写性能、冗余性(运行2块硬盘发生故障)

下面我们就基于RAID的三个评判标准来看看常用的这四个RAID级别各自的特点

标准RAID

1.21 软RAID0及特点;

   RAID0称为条带化(Striping)存储,将数据分段存储于 各个磁盘中,读写均可以并行处理。因此其读写速率为单个磁盘的N倍(N为组成RAID0的磁盘个数),但是却没有数 据冗余,单个磁盘的损坏会导致数据的不可修复。RAID0 是把两个或两个以上 容量相同的硬盘或分区,通过RAID控制器(硬RAID是通过RAID卡来实现的,软RAID 是通过 软件 来实现的),结合为一个在容量上是RAID0下成员的容量的总和,在写入时,要向每个硬盘或分区同时写入数据。
    在硬RAID中,RAID0的成员是以整个硬盘为单位的,把两个硬盘或两个以上的硬盘通过RAID卡绑定成为一个虚拟的磁盘 设备 ,而每个硬盘就是RAID0的成员;
    在软RAID0中,RAID0的成员是整个硬盘或分区,容量是加入RAID0的所有成员容量的总和。在RAID0中每个成员的容量都是相同一致的。比如我们把 /dev/sdb 、/dev/sdc、/dev/sdd 三个容量大小为80G的硬盘做成RAID0,这时RAID0设备的容量就是三个硬盘的总和 80x3=240G。当然我们也可以,在写入数据时, 系统 要向每个硬盘同时写入数据,是以条块的形式写入。比如我们存一份数据linuxsir.tar.gz 到RAID0的设备中,这份数据是分拆成若干份被分散的写入到RAID0中的每个成员中。只有RAID0中的每个成员正常运行,并且RAID0也正常运行的情况下,这份数据才是完整的。RAID0中任何一个成员(硬盘分区)有有问题时,RAID0便不能运行,同时数据也不是完整的;
    RAID0 在读写速度上是比较快的,是普通不做RAID的两倍左右(注:实际速度和机器的硬件配置有关),所以RAID0常被用于对存储效率要求较高,但对数据 安全 性要求不高的 应用 解决方案中;

    安全性:RAID0中有任何一个成员出现故障,整个RAID0就不能被激活。数据不能保障;


大多数striping的实现允许管理者通过调节两个关键的参数来定义数据分段及写入磁盘的 方式,这两个参数对RAID0的性能有很重要的影响。

STRIPE WIDTH

stripe width是指可被并行写入的 stripe 的个数,即等于磁盘阵列中磁盘的个数。

STRIPE SIZE

也可称为block size(chunk sizestripe lengthgranularity),指写入每个磁 盘的数据块大小。以块分段的RAID通常可允许选择的块大小从 2KB 到 512KB不等,也有更 高的,但一定要是2的指数倍。以字节分段的(比如RAID3)一般的stripe size为1字节或者 512字节,并且用户不能调整。 stripe size对性能的影响是很难简单估量的,最好在实际应用中依自己需求多多调整并 观察其影响。通常来说,减少stripe size,文件会被分成更小的块,传输数据会更快,但 是却需要更多的磁盘来保存,增加positioning performance,反之则相反。应该说,没有 一个理论上的最优的值。很多时候,也要考虑磁盘控制器的策略,比如有的磁盘控制器会等 等到一定数据量才开始往磁盘写入。

RAID0至少需要两块硬盘,当使用RAID0时,我们在读写数据的时候是将数据分开读写到多块硬盘上,所以其读写速度是最快的,但是因为多块硬盘上保存了数据的一部分,所以当一块硬盘发生损坏时,其整个RAID的数据也就损坏了。

①空间利用率:所有硬盘空间之和

②性能:所有硬盘读写速度之和

③冗余能力:无

 1.22 软RAID1及特点;
    RAID1就是把若干相同容量的硬盘或分区,成员与成员之间是镜像关系。在容量上,RAID1设备是单个成员的容量。比如两个80G的硬盘做成RAID1,这个RAID1的设备容量仍是80G。比如我们写入一个份数据linuxsir.tar.bz2 到RAID1设备时,其实是向RAID的每个成员都写了一份。比如RAID1设备下有两个成员/dev/sdb和/dev/sdc ,我们写入linuxsir.tar.bz2 到RAID1时,/dev/sdb和/dev/sdc都有一份完整的linuxsir.tar.bz2。 所以RAID1是冗余的阵列,一般被用于安全性要求比较高的应用中。

因为RAID1在由于镜像冗余,所以磁盘利用效率并不高,或者说是“浪费”。这种方案相对来说性价比并不高,一般很少应用。数据读写效率要比RAID0慢。
    安全性:RAID1 中只要有一个成员是健康的,RAID1完全可以激活,而且数据绝对是完整安全的。如果所有的成员有故障,RAID1也就报废了。


RAID1也是至少需要2块硬盘,在写数据的时候就不同于RAID0了,RAID1在写数据时会将数据复制到多块硬盘上,即每块硬盘都会保存该数据的一个备份,在读数据时,以提高冗余性。读的时候同时从多块硬盘上读取数据,以提高读的性能。

①空间利用率:所有磁盘中最小的那块(其实在使用RAID时,最好每块硬盘的大小及型号都一样)

②性能:读性能是所有硬盘之和,写性能有所减弱

③冗余能力:只要有一块硬盘正常,数据就正常

1.23 软RAID5及特点;
    软RAID5也是冗余安全的,RAID5是把至少三个硬盘或分区通过软件虚拟成为一个大的存储设备。在容量上是(n-1)x单个硬盘(分区)容量 ,比如我们用三块80G硬盘做成RAID5,容量就是两块容量的和160G。在写入上,数据被分拆成若干份,分别向RAID5的每个成员下写入。比如把linuxsir.tar.bz2写入RAID5时, 要先把linuxsir.tar.bz2分拆成若干份,分别写入RAID5成员中。因为涉及到冗余,所以数据在读入速度上并不是很快,没办法和RAID0相比,但RAID5的写入数据速度没有RAID1和RAID0快,也没有不做RAID的磁盘写入速度要快;
    因为RAID5在容量损失比较小,有冗余安全保障,另外写入速度比较快,从整体上来看,性价比比较高,所以被大范围内采用;
    安全性:当RAID5中的成员中有一个发生故障时,RAID5一样能启动和正常运行,只要n-1(注n>3)块硬盘或分区的不出故障,RAID5上的数据就是安全,对于一个文件存到RAID5设备中,只有成员是n-1(注n>3)无故障时,这份文件才是完整的。 比如RAID5有四个硬盘(或分区)做的,当一个硬盘或分区挂掉了,并不影响整个RAID5上数据的完整性和安全性。


RAID5至少需要3块硬盘,RAID5与RAID0类似,读写数据的时候会将数据分布的读写到所有硬盘上。但是在写数据的时候RAID5会对数据进行奇偶校验运算,并将校验信息也保存在了硬盘上,所以即使我们其中一块硬盘发生了损坏,RAID5也能通过其他硬盘以及校验信息对数据进行恢复使用。但是如果2块或者2块以上的硬盘发生了损坏,整个数据也就损坏了。

①空间利用率:1 - 1/n

②性能:读性能接近RAID0,写性能相比RAID0要弱一些

③冗余能力:可以接受1块硬盘的损坏

1.24软Raid6及特点


RAID6至少需要4块硬盘,RAID6与RAID5相类似,读写数据的时候会将数据分布的读写到所有硬盘上。在写数据的时候RAID5会对数据进行奇偶校验运算,并将校验信息也保存在了硬盘上,但是RAID6会比RAID5多保存一份校验信息,所以RAID6的冗余性比RAID5就有所提升,可以允许2块硬盘发生损坏。

①空间利用率:1 - 2/n

②性能:读性能接近RAID5,写性能相比RAID5还要弱一些

③冗余能力:可以接受2块硬盘的损坏

以上四种RAID级别是我们最常用的四种级别,对于个人PC机来说,可能我们最需要提高的是硬盘存储性能,所以基本上使用的是RAID0,其读写性能得到了最大的提高,但是其冗余性为0,当硬盘发生损坏时,数据也就损坏了。而在生产环境下的服务器使用的最多是RAID5或者RAID6,其即提供了读写性能,也提供了冗余性。RAID1通常会对于那些对数据准确性要求及其严格的场合才会使用。

我们来总结一下这4个常用的RAID级别各自的优缺点:


原文地址:http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/25/3099464.html

              http://blog.csdn.net/czp11210/article/details/9018111

              http://blog.jobbole.com/83808/

猜你喜欢

转载自blog.csdn.net/SHEDONG1011/article/details/48790397