磁盘阵列解析

单块硬盘进行数据存储可能会存在以下问题:

  • 硬盘容量有限制,当容量不足时不能进行硬件扩容。现在磁盘技术在磁盘容量上已经有了长足的发展,目前(2016)机械硬盘的主流容量已经达到6TB,固态硬盘的主流容量也达到512GB。但是单块硬盘始终都存在较严重的容量扩充问题,除非读者在扩容时手动迁移数据。

  • 数据可靠性性问题。单块硬盘不存在任何备份机制,虽然现在有很多扇区检测软件可以帮助开发人员/运维人员提前发现硬盘损坏的磁道,但是都不能保证99.99%的运行可靠性。一旦硬盘由于各种原因损坏(电压不稳、磁头位移等),存储在其上的数据就可能永久丢失。

  • 读写性能瓶颈。这个问题在SSD固态硬盘上还不太明显,目前主流的固态硬盘的外部传输速度可达到550MB/S,这个速度基本上达到了SATA 3/USB 3.0接口规范的理论峰值。但这个问题对于机械硬盘来说却很明显了,由于机械硬盘的读写性能受到磁头数量、盘片转速、盘片工艺等因素的影响,所以机械硬盘的读写性能一直没有一个质的飞跃。如果将单个硬盘应用在生产系统上,那么磁盘读写性能无疑将会整个系统的性能瓶颈。另外SATA 3结构理论6Gbps的传输带宽必要时也需要找到替代方案。

为了解决以上这些问题,硬件工程师将多个硬盘按照不同的规则组合在一起形成各种集群化的数据存储结构,这些存储结构被称为磁盘阵列(Redundant Arrays of Independent Disks,RAID)。磁盘阵列解决以上这些问题的基本思路有:

  • 通过硬盘横向扩展或者纵向扩展的方式,解决整个磁盘整理存储容量限制的问题。而对于上层操作系统来说,看到的都只是一个磁盘设备文件/操作盘符而已。
  • 通过数据镜像或者数据校验的方式解决数据冗余和数据恢复的问题
  • 通过阵列控制芯片分发数据读写请求的方式,将原本集中在一块硬盘上的数据读写请求分散到多块硬盘上,从而解决磁盘性能的问题

目前磁盘阵列结构有多种,包括 RAID 0、RAID 1、RAID 2、RAID 3、RAID 4、RAID 5、RAID 10/01、RAID 50等。其中RAID 2、RAID 3、RAID 4这三种阵列结构常用于阵列研究,生产环境中常使用的阵列结构为RAID 0、RAID 1、RAID 5和RAID 10/01

RAID 0

RAID 0阵列结构是所有阵列结构中读写性能最好的,也是所有阵列结构中实现思路最简单的:

RAID 0阵列结构没有数据冗余机制和数据恢复机制,它至少需要两个硬盘进行构造。整个RAID 0阵列结构就是将参与RAID 0阵列构建的所有硬盘进行容量累加,从而形成一个更大的、对上层操作系统统一的存储容量。所以RAID 0阵列的存储容量就是这些硬盘的容量进行累加。

当需要写入的数据到达阵列控制器,后者会向其下的硬盘设备分发这些数据。这样原来可能只由一个硬盘承担的读写压力就会被分担到多个硬盘上,最终提高了整个阵列的读写性能。RAID 0阵列结构存储速度的优势非常明显,且参与构造阵列的磁盘数量越多阵列速度越快(峰值速度最终会受到总线、外部接口规范、控制芯片制造工艺等因素的限制)。但是RAID 0阵列结构的缺点也很明显:由于阵列结构没有容错机制或者数据恢复机制,当阵列中的一个或者多个磁盘发生故障时,整个阵列结构就会崩溃并且不能恢复。所以在实际应用中,只有那些信息价值不高且每天又需要大量存储的数据才会使用RAID 0阵列结构进行存储,例如日志文件数据。

RAID 1

RAID 1阵列结构又被称为磁盘镜像阵列或者磁盘冗余阵列。它的构造特点是阵列结构中的每一个磁盘互为镜像:

当有外部数据需要存储时,RAID 1阵列控制器将会首先把这个数据做成N个副本(N的数量和阵列结构中物理磁盘的数量相等),实际上镜像副本的单位为扇区或者Flash Page。这些副本会分别存储到阵列结构的各个磁盘中。在进行数据读取时,RAID 1 阵列结构中的某一块磁盘将会作为主要的数据读取源头,当这个源头出现吞吐量瓶颈时,RAID 1阵列控制器会主动到其它镜像磁盘读取数据。所以RAID 1阵列的数据读取性能还是要比单个磁盘的性能要好,但是写入性能却差了很多

RAID 1阵列结构设计之初的主要目的并不是提高存储设备的读写性能,而是保证高价值数据的存储可靠性。由于RAID 1阵列结构中需要保证每个磁盘的镜像数据完全一致,所以它还要求参与RAID 1阵列结构的每一个磁盘的容量必须相同,否则RAID 1阵列结构会以最小的那个磁盘容量为自己的标准容量。

RAID 10和RAID 01

RAID 0和RAID 1都有自己的优缺点,并且这些特点都很突出:RAID 0虽然速度快但是没有任何数据保障措施,所以一味地快意义并不大;RAID 1虽然保证了数据的可靠性,但是却牺牲了大量空间和读写速度。所以以上两种阵列结构,在企业级/工业级环境中使用的情况还是比较少。那么有没有一种阵列结构在融合了RAID 0和RAID1两者优点的同时又避免了各自的缺点呢?

答案是:有的!RAID10和RAID01两种阵列结构就是为了实现RAID 0和RAID 1的融合而被设计的。在RAID10结构中,它首先将参与阵列结构组建的磁盘进行分组,形成若干组独立的RAID 1阵列结构,然后再将这些独立的RAID 1阵列结构形成RAID 0结构,如下图所示:

上图中有四块硬盘参与RAID 10阵列结构的组建,四块硬盘是组建RAID 10阵列结构的最小要求(实际上两块也行,但是那样的RAID 10没有任何意义)。它们首先被两两分组形成两个独立的RAID 1结构,这也意味着这些硬盘的容量最好是一样的,否则每组RAID 1结构会基于容量最小的那块硬盘确认自己的容量。接着独立工作的两组RAID 1再组成RAID 0阵列结构。可见,通过集成更多硬盘的思路,将RAID 0阵列和RAID 1阵列的特点进行了融合,在保证数据存储可靠性的基础上提高了阵列的整体存储性能。RAID 10被广泛应用在各种计算场景中,市场上从几千到几百万的阵列设备都提供对RAID 10磁盘阵列结构的支持。RAID 10磁盘阵列的总读写速度会受到控制芯片的影响,所以几千和几百万的磁盘阵列设备实际读写性能是完全不一样的 。

另外还有一种和RAID 10阵列结构相似的阵列结构:RAID 01(或称为RAID 0 + 1),它们的构造区别是,后者首先将若干磁盘以RAID 0的方式进行组织,然后再分组成多个独立的RAID 1结构:

RAID 5

RAID 5阵列结构和RAID 10/01阵列结构在实际生产环境中都经常被使用,前者的应用更为广泛:虽然速度上RAID 5没有RAID 10/01阵列结构快,但是RAID 5阵列控制芯片的成本却低很多RAID 5阵列基于奇偶校验原理,它的算法核心是异或运算(XOR)

异或运算是各位读者在大学离散数学课程中学习过的一种基本二进制运算,其运算关系如下表所述(以下表格的计算因子只有两个,目的是让读者回忆起来):

A值B值运算结果
110
101
011
000

接着我们可以再假设计算因子为N,根据异或运算的特点,我们可以在已知结果和N-1个原始计算因子的前提下,还原出未知的那个计算因子

将以上异或运算的每个计算因子扩展成磁盘上的一个数据扇区并针对多个扇区进行异或运算并将计算结果存储下来。那么是否可以在某一个数据扇区出现问题时恢复数据呢?答案是肯定的。

在以上四个扇区的校验示例中,它们分属四个不同的磁盘设备,其中三个扇区存储的是数据,最后一个扇区存储的是异或运算后的校验码。一个扇区存储的数据量为512字节。当某个数据扇区出现故障时,基于校验扇区的信息和正常状态的数据扇区的信息,RAID 5磁盘阵列可以将发生故障的扇区恢复出来;当某个校验扇区的信息出现故障时,RAID 5磁盘阵列还可以重新进行校验。也就是说RAID 5阵列结构同一时间内只允许有一块硬盘出现故障,出现故障的硬盘需要立即进行更换。如果还未来得及更换故障硬盘,另一块硬盘又出现了故障,那么对整个RAID 5阵列就是毁灭性的——因为无法通过异或计算同时恢复两个计算因子

当更换故障硬盘后,RAID5阵列控制器将会自动对数据进行重新校验,恢复数据。为了在可靠性和读写性能上找到平衡,RAID 5阵列结构会将数据和校验码按照一定的算法分散均匀存储在不同磁盘上,这样做的目的是为了尽可能快的完成数据恢复过程。

转载于:https://my.oschina.net/blacklands/blog/881916

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值