二十一、RAID管理

什么是RAID  Redundant Arrays of Inexpensive(Independent) Disks
1988年由加利福尼亚大学伯克利分校(University of California-Berkeley)
 “A Case for Redundant Arrays of Inexpensive Disks”
多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供
RAID
提高IO能力
磁盘并行读写
提高耐用性
磁盘冗余来实现
级别:多块磁盘组织在一起的工作方式有所不同

RAID实现的方式
外接式磁盘阵列:通过扩展卡提供适配能力
内接式RAID:     主板集成RAID控制器,安装OS前在BIOS里配置
软件RAID:         通过OS实现

RAID级别
RAID-0:条带卷,strip
RAID-1:镜像卷,mirror
RAID-2
..
RAID-5
RAID-6
RAID-10
RAID-01
RAID类型                                            个数      利用率             优缺点
--------------------------------------
RAID0 条带集                                        2+      100%            读写速率快,不容错
RAID1 镜像集                                        2          50%              读写速率一般,容错
RAID5 带奇偶校验条带集单校验           3+      (n-1)/n         读写速率快,容错,允许坏一块
RAID6 带奇偶校验条带集双校验           4+      (n-2)/n         读写快,容错,允许坏两块

RAID10:先1后0,先做镜像卷,再做条带卷。利用率50%
RAID10 RAID1的安全+RAID0的高速   4         50%               读写速率快,容错
RAID50 RAID5的安全+RAID0的高速   6         (n-2)/n         读写速率快,容错
RAID60 RAID6的安全+RAID0的高速   8         (n-4)/n         读写速率快,容错
--------------------------------------

RAID-0:
读、写性能提升
可用空间:N*min(S1,S2,...)                   
无容错能力
最少磁盘数:2, 2+

RAID0 是一种简单的、无数据校验的数据条带化技术。实际上不是一种真正的 RAID ,因为它并不提供任何形式的冗余策略。 RAID0 将所在磁盘条带化后组成大容量的存储空间(如图 2 所示),将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。由于可以并发执行 I/O 操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0 的性能在所有 RAID 等级中是最高的。理论上讲,一个由 n 块磁盘组成的 RAID0 ,它的读写性能是单个磁盘性能的 n 倍,但由于总线带宽等多种因素的限制,实际的性能提升低于理论值。
  RAID0 具有低成本、高读写性能、 100% 的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。 因此, RAID0 一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。

RAID-1:
读性能提升、写性能略有下降
可用空间:1*min(S1,S2,...)
有冗余能力
最少磁盘数:2, 2N
RAID-4:
多块数据盘异或运算值存于专用校验盘

RAID1 称为镜像,它将数据完全一致地分别写到工作磁盘和镜像 磁盘,它的磁盘空间利用率为 50% 。 RAID1 在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。 RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。工作原理如图 3 所示。
  RAID1 与 RAID0 刚好相反,是为了增强数据安全性使两块 磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便。 RAID1 拥有完全容错的能力,但实现成本高。 RAID1 应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。
RAID-5:
读、写性能提升
可用空间:(N-1)*min(S1,S2,...)
有容错能力:允许最多1块磁盘损坏
最少磁盘数:3, 3+

RAID5 应该是目前最常见的 RAID 等级,它的原理与 RAID4 相似,区别在于校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此, RAID5 不存在 RAID4 中的并发写操作时的校验盘性能瓶颈问题。另外, RAID5 还具备很好的扩展性。当阵列磁盘 数量增加时,并行操作量的能力也随之增长,可比 RAID4 支持更多的磁盘,从而拥有更高的容量以及更高的性能。
  RAID5 的磁盘上同时存储数据和校验数据,数据块和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。与其他 RAID 等级一样,重建数据时, RAID5 的性能会受到较大的影响。
  RAID5 兼顾存储性能、数据安全和存储成本等各方面因素,它可以理解为 RAID0 和 RAID1 的折中方案,是目前综合性能最佳的数据保护解决方案。 RAID5 基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。
RAID-6:
读、写性能提升
可用空间:(N-2)*min(S1,S2,...)
有容错能力:允许最多2块磁盘损坏
最少磁盘数:4, 4+

前面所述的各个 RAID 等级都只能保护因单个磁盘失效而造成的数据丢失。如果两个磁盘同时发生故障,数据将无法恢复。 RAID6 (如图 8 )引入双重校验的概念,它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。 RAID6 等级是在 RAID5 的基础上为了进一步增强数据保护而设计的一种 RAID 方式,它可以看作是一种扩展的 RAID5 等级。
  RAID6 不仅要支持数据的恢复,还要支持校验数据的恢复,因此实现代价很高,控制器的设计也比其他等级更复杂、更昂贵。 RAID6 思想最常见的实现方式是采用两个独立的校验算法,假设称为 P 和 Q ,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解两元方程来重建两个磁盘上的数据。
  RAID6 具有快速的读取性能、更高的容错能力。但是,它的成本要高于 RAID5 许多,写性能也较差,并有设计和实施非常复杂。因此, RAID6 很少得到实际应用,主要用于对数据安全等级要求非常高的场合。它一般是替代 RAID10 方案的经济性选择。

RAID01 和 RAID10
一些文献把这两种 RAID 等级看作是等同的,本文认为是不同的。 RAID01 是先做条带化再作镜像,本质是对物理磁盘实现镜像;而 RAID10 是先做镜像再作条带化,是对虚拟磁盘实现镜像。相同的配置下,通常 RAID01 比 RAID10 具有更好的容错能力
  RAID01 兼备了 RAID0 和 RAID1 的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。 RAID01 的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。 RAID01 和 RAID10 内部都含有 RAID1 模式,因此整体磁盘利用率均仅为 50% 。

RAID-10:
读、写性能提升
可用空间:N*min(S1,S2,...)/2
有容错能力:每组镜像最多只能坏一块
最少磁盘数:4, 4+



RAID-01
多块磁盘先实现RAID0,再组合成RAID1

RAID-50
多块磁盘先实现RAID5,再组合成RAID0
JBOD:Just a Bunch Of Disks
功能:将多块磁盘的空间合并一个大的连续空间使用
可用空间:sum(S1,S2,...)
RAID7
可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式
常用级别:
RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD

软RAID

mdadm:为软RAID提供管理界面
为空余磁盘添加冗余
结合内核中的md(multi devices)
RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等

软件RAID的实现

mdadm:模式化的工具
命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>
支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10
模式:
创建:-C
装配:-A
监控:-F
管理:-f, -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意块设备

-C: 创建模式
-n #: 使用#个块设备来创建此RAID
-l #:指明要创建的RAID的级别
-a {yes|no}:自动创建目标RAID设备的设备文件
-c CHUNK_SIZE: 指明块大小,单位k
-x #: 指明空闲盘的个数
-D:显示raid的详细信息
mdadm -D /dev/md#
管理模式:
-f: 标记指定磁盘为损坏
-a: 添加磁盘
-r: 移除磁盘
观察md的状态: cat /proc/mdstat
软RAID配置示例
使用mdadm创建并定义RAID设备
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1
用文件系统对每个RAID设备进行格式化
mkfs.xfs /dev/md0
测试RAID设备
使用mdadm检查RAID设备的状况
mdadm --detail|D /dev/md0
增加新的成员
mdadm –G /dev/md0 –n4 -a /dev/sdf1

软RAID测试和修复

模拟磁盘故障
mdadm /dev/md0 -f /dev/sda1
移除磁盘
mdadm /dev/md0 –r /dev/sda1
从软件RAID磁盘修复磁盘故障
•替换出故障的磁盘然后开机
•在备用驱动器上重建分区
•mdadm /dev/md0 -a /dev/sda1
mdadm、/proc/mdstat及系统日志信息
软RAID管理
生成配置文件:mdadm –D –s >> /etc/mdadm.conf
停止设备:mdadm –S /dev/md0
激活设备:mdadm –A –s /dev/md0 激活
强制启动:mdadm –R /dev/md0
删除raid信息:mdadm --zero-superblock /dev/sdb1