您的位置:首页 > 运维架构 > Linux

linux杂谈(七):磁盘阵列(RAID)

2014-04-27 10:12 197 查看
RAID为廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),RAID技术将一个个单独的磁盘以不同的组合方式形成
一个逻辑硬盘,从而提高了磁盘读取的性能和数据的安全性。不同的组合方式用RAID级别来标识。
RAID技术经过不断的发展,现在已拥有了从 RAID 0 到 5等6种明确标准级别的RAID 级别。
另外,其他还有6、7、10(RAID 1RAID 0的组合)、01(RAID 0RAID 1的组合)、30(RAID 3与RAID 0的组合)、
50(RAID 0与RAID 5的组合)等。
不同RAID 级别代表着不同的存储性能、数据安全性和存储成本,下面将介绍如下RAID级别:0、1、2、3、4、5、6、01、10。

RAID0
RAID0也称为条带化(stripe),将数据分成一定的大小顺序的写道阵列的磁盘里,RAID0可以并行的执行读写操作,
可以充分利用总线的带宽,理论上讲,一个由N个磁盘组成的RAID0系统,它的读写性能将是单个磁盘读取性能的N倍。
且磁盘空间的存储效率最大(100%)RAID0有一个明显的缺点:不提供数据冗余保护,一旦数据损坏,将无法恢复。
 RAID1 RAID1成为镜像(mirror),它将数据完全一致的分别写到工作磁盘和镜像磁盘,因此它的磁盘空间利用率为50%,
在数据写入时时间会有影响,但是读的时候没有任何影响,RAID0提供了最佳的数据保护,一旦工作磁盘发生故障,
系统自动从镜像磁盘读取数据,不会影响用户工作。

RAID5
RAID5与RAID3的机制相似,但是数据校验的信息被均匀的分散到的阵列的各个磁盘上,这样就不存在并发写操作时的校验盘性能瓶颈。
阵列的磁盘上既有数据,也有数据校验信息,数据块和对应的校验信息会存储于不同的磁盘上,当一个数据盘损坏时,
系统可以根据同一带区的其他数据块和对应的校验信息来重构损坏的数据。 RAID6 RAID 6提供两级冗余,即阵列中的两个驱动器失败时,
阵列仍然能够继续工作。

一般而言,RAID 6的实现代价最高,因为RAID 6不仅要支持数据的恢复,又要支持校验的恢复,
这使RAID 6控制器比其他级R A I D更复杂和更昂贵。
1. RAID 6的校验数据
当对每个数据块执行写操作时, RAID 6做两个独立的校验计算,因此,它能够支持两个磁盘的失败。为了实现这个思想,目前基本上有两个已经接受的方法:
? 使用多种算法,如X O R和某种其他的函数。
? 在不同的数据分条或者磁盘上,使用排列的数据。
2. RAID 6的一维冗余 RAID 6的第一种方法是用两种不同的方法计算校验数据。实现这个思想最容易的方法 RAID10 RAID10RAID1和RAID0的结合,也称为RAID(0+1),先做镜像然后做条带化,既提高了系统的读写性能,有提供了数据冗余保护,RAID10的磁盘空间利用率和RAID1是一样的,为50%。RAID10适用于既有大量的数据需要存储,有对数据安全性有严格要求的领域,比如金融,证券等。
RAID01
RAID01也是RAID0和RAID1的结合,但它是对条带化后的数据进行镜像。但与RAID10 不同,一个磁盘的丢失等同于整个镜像条带的丢失,所以一旦镜像盘失败,则存储系统成为一个RAID-0 系统(即只有条带化)。RAID01的实际应用非常少。
不同RAID级别对比
在各个raid级别中,使用最广泛的是raid0,raid1,raid10raid5

上面所介绍的是百度百科的解释,下面来谈谈我对磁盘阵列的理解,可是好处多多的:

(1)提高了存储容量;
(2)其次,多台磁盘驱动器可并行工作,提高了数据传输率;
(3)RAID技术确实提供了比通常的磁盘存储更高的性能指标、数据完整性和数据可用性;
(4)尤其是在当今面临的I/O总是滞后于CPU性能的瓶颈问题越来越突出的情况下,RAID解决方案能够有效地弥补这个缺口。


RAID 1的实现

说的理论再多没有实践也是不行的,今天我们要***一个软件级别的RAID1类型的磁盘阵列。

(1)因为要体现磁盘之间工作的并发性,我们首先要***出几个磁盘,注意最关键的是这几个磁盘的大小一定要一样,因为他们的业务逻辑是相同的,只有在大小相同的情况下才能让业务逻辑进行完整的迁移。

***准备用于构建RAID的设备





我们先***一个设备(200M大小),然后把该设备的系统ID更改为fd(代表着这个是磁盘阵列).



然后我们以相同的方法再***两个磁盘阵列设备



退出保存后,使用partx命令进行一系列的操作

正式构建磁盘阵列

下面的这个命令十分的复杂,但是只要大家记住一下几个参数的意义,要正确的写出构建命令也不是特别困难的事情:

-C 创建磁盘阵列

-l 代表RAID级别是RAID1

-n 有n个设备正在执行业务逻辑

-x 有x个设备作为替补设备更换坏掉的设备

-a 是否自动创建(我们选择的是yes)

了解了上面几个命令后,接下来我们来看看至今最长的一个命令^_^:



然后我们监控磁盘阵列设备:





我们可以看到已经生成了设备md0,要是想要查看磁盘阵列设备md0的详细信息:





我们可以看到设备5、6是正在执行的,而设备7是空闲的,我们现在让设备6挂掉看看会发生什么事情:





显然/dev/vda6已经挂掉了,我们把它从md0设备中删除出去,如果还想再使用/dev/vda6的话,得把它重新添加进来,这是必须的:



不想使用的时候,我们把已经构建的md0关闭掉:



当我们再想使用的时候,可以把它重新打开:



和其他的普通设备一样,/dev/md0设备也是可以格式化后挂载到其他目录上的:





关闭后删除整个设备就不会影响下次/dev/vda{5,6,7}的使用了:



总结:

软件的磁盘阵列的基本原理就是这样了,但是在一些比较大型的公司中,更愿意使用硬件级别的磁盘阵列,这样的架构会更加的稳定和快速,因为和业务的成本相比,硬件和软件的成本是值得使用者去投资的。

关于软件磁盘阵列的使用应该还有更深层次的讨论,以后继续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: