一、概述
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余高可靠性的存储技术。RAID分为硬 RAID、全软 RAID、半软 RAID。
二、RAID类型
1)硬件磁盘阵列(Hardware RAID)
简单来说就是全部通过用硬件来实现RAID功能的就是硬RAID,比如:各种RAID卡,还有主板集成能够做的RAID都是硬RAID。
硬RAID全面具备了自己的RAID控制/处理与I/O处理芯片,甚至还有阵列缓冲(Array Buffer),对CPU的占用率以及整体性能中最有优势。
2)软件磁盘阵列(Software RAID)
反而言之,通过用操作系统来完成RAID功能的就是软RAID,比如:在Linux操作系统下,用3块硬盘做RAID5。
直接通过软件层实现的RAID,所有功能都是操作系统(OS)与CPU来完成,可想而知这是效率最低的一种RAID。
与硬RAID不同的是,软RAID的各个成员盘对于操作系统来说是可见的,但操作系统并不把各个成员盘呈现给用户,而只是把通过软件层配置好的虚拟RAID卷呈现给用户,使用户可以像使用一个普通磁盘一样使用RAID卷。
3)硬件辅助磁盘阵列(Hardware-Assisted RAID)
与硬 RAID 和 全软 RAID 相比,半软 RAID需要一张RAID卡,以及厂商所提供的驱动程序。
但是半软半硬RAID 缺乏自己的I/O 处理芯片,所以这方面的工作仍要由CPU 与驱动程序来完成。而且,半软半硬RAID 所采用的RAID 控制/处理芯片的能力一般都比较弱,不能支持高的RAID 等级。
三、 RAID 主要优势有如下几点
大容量
这是 RAID 的一个显然优势,它扩大了磁盘的容量,由多个磁盘组成的 RAID 系统具有海量的存储空间。
高性能
RAID 的高性能受益于数据条带化技术。通过数据条带化, RAID 将数据 I/O 分散到各个成员磁盘上,从而获得比单个磁盘成倍增长的聚合 I/O 性能。
可靠性
可用性和可靠性是 依赖于RAID 的数据冗余特征。
可管理性
实际上, RAID 是一种虚拟化技术,它对多个物理磁盘驱动器虚拟成一个大容量的逻辑驱动器;RAID 可以动态增减磁盘驱动器,可自动进行数据校验和数据重建,这些都可以 大大简化管理工作。
四、关键技术
1)镜像
镜像是一种冗余技术,为磁盘提供保护功能,防止磁盘发生故障而造成数据丢失。
对于 RAID 而言,采用镜像技术 典型地 将会同时在阵列中产生两个完全相同的数据副本,分布在两个不同的磁盘上。镜像提供了完全的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可正常访问另一副本,不会对应用系统运行和性能产生影响。
镜像技术可以从多个副本进行并发读取数据,提供更高的读 I/O 性能,但不能并行写数据,写多个副本会会导致一定的 I/O 性能降低。
2)数据条带
磁盘存储的性能瓶颈在于磁头寻道定位,它是一种慢速机械运动,无法与高速的 CPU 匹配。再者,单个磁盘驱动器性能存在物理极限, I/O 性能非常有限。
RAID 由多块磁盘组成,数据条带技术将数据以块的方式分布存储在多个磁盘中,从而可以对数据进行并发处理。这样写入和读取数据就可以在多个磁盘上同时进行,并发产生非常高的聚合 I/O ,有效提高了整体 I/O 性能,而且具有良好的线性扩展性。
3)数据校验
镜像具有高安全性、高读性能,但冗余开销太昂贵。数据条带通过并发性来大幅提高性能,然而对数据安全性、可靠性未作考虑。数据校验是一种冗余技术,它用校验数据来提供数据的安全,可以检测数据错误,并在能力允许的前提下进行数据重构。相对镜像,数据校验大幅缩减了冗余开销,用较小的代价换取了极佳的数据完整性和可靠性。数据条带技术提供高性能,数据校验提供数据安全性, RAID 不同等级往往同时结合使用这两种技术。
五、RAID 等级介绍
常见RAID有RAID0 、 RAID1 、RAID5 、 RAID10、RAID01 五种 RAID 等级。标准等级是最基本的 RAID 配置集合,单独或综合利用数据条带、镜像和数据校验技术。标准 RAID 可以组合,即 RAID 组合等级,满足 对性能、安全性、可靠性要求更高的存储应用需求。
1)RAID0
RAID0 是一种简单的、无数据校验的数据条带化技术。实际上不是一种真正的 RAID ,因为它并不提供任何形式的冗余策略。
RAID0 具有低成本、高读写性能、 100% 的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。
2)RAID1
RAID1 称为镜像,它将数据完全一致地分别写到工作磁盘和镜像 磁盘,它的磁盘空间利用率为 50% 。 RAID1 在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。 RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。
RAID1 与 RAID0 刚好相反,是为了增强数据安全性使两块 磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便。 RAID1 拥有完全容错的能力,但实现成本高。
3)RAID5
RAID5 应该是目前最常见的 RAID 等级,它在写操作可以同时发生在完全不同的磁盘上。因此, RAID5 不存在并发写操作时的校验盘性能瓶颈问题。另外, RAID5 还具备很好的扩展性。当阵列磁盘 数量增加时,并行操作量的能力也随之增长。
RAID5 兼顾存储性能、数据安全和存储成本等各方面因素,它可以理解为 RAID0 和 RAID1 的折中方案,是目前综合性能最佳的数据保护解决方案。
4)RAID组合等级
目前在业界和学术研究中提到的 RAID 组合等级主要有 RAID00 、 RAID01 、 RAID10 、 RAID100 、 RAID30 、 RAID50 、 RAID53 、 RAID60 ,但实际得到较为广泛应用的只有 RAID01 和 RAID10 两个等级。所以这里只讲RAID01 和 RAID10。
1、RAID01 和 RAID10
RAID01 是先做条带化再作镜像,本质是对物理磁盘实现镜像。
RAID10 是先做镜像再作条带化,是对虚拟磁盘实现镜像。
RAID01 兼备了 RAID0 和 RAID1 的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。 RAID01 的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。 RAID01 和 RAID10 内部都含有 RAID1 模式,因此整体磁盘利用率均仅为 50% 。
2、RAID01和RAID10的区别
RAID01比较缺乏安全性,且故障时难以恢复,实际应用中几乎没有人会选择。
RAID10速度较快,故障容易恢复。
5)RAID 等级对比
类型 | 读写性能 | 安全性、可靠性 | 磁盘利用率 | 成本 |
---|---|---|---|---|
RAID0 | 最好(因并行性而提高) | 最差(完全无安全保障) | 最高(100%) | 最低 |
RAID1 | 读和单个磁盘无分别,写则要写两边 | 最高(提供数据的百分之百备份) | 差(50%) | 最高 |
RAID5 | 读:RAID5=RAID0(相近似的数据读取速度);写:RAID5<对单个磁盘进行写入操作(多了一个奇偶校验信息写入) | RAID0与RAID1折中 | RAID0>RAID5>RAID 1 | RAID1>RAID5>RAID0 |
RAID10;RAID10 | 读:RAID10=RAID0;写:RAID10=RAID1 | RAID10=RAID1 | RAID10=RAID1(50%) | RAID10=RAID1 |
六、实验
通常计算机功能既可以由硬件来实现,也可以由软件来实现。对于 RAID 系统而言,自然也不例外,它可以采用软件方式实现,也可以采用硬件方式实现,或者采用软硬结合的方式实现。硬RAID自己电脑无法实现,这里只讲软RAID实现。
软RAID实现(通过mdadm软件实现)
1)mdadm安装与介绍
1、安装
$ yum install -y mdadm
2、mdadm介绍
mdadm命令常见参数解释:
-a {yes|no} 自动为其创建设备文件
-n 指定设备数量
-l 指定RAID级别
-C 创建
-v 显示过程
-f 模拟设备损坏
-r 移除设备
-Q 查看摘要信息
-D 查看详细信息
-S 停止RAID磁盘阵列
-c 指定数据块大小(chunk)
-x 指定空闲盘(热备磁盘)个数,空闲盘(热备磁盘)能在工作盘损坏后自动顶替
2)RAID0实现
1、准备两块磁盘
/dev/sdb1
/dev/sdb2
2、创建raid
$ mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}
3、格式化
$ mkfs.ext4 /dev/md0
注意:在格式化时,可以指定-E选项下的stride参数指定条带是块大小的多少倍,有在一定程度上提高软RAID性能,如块默认大小为4k,而条带大小默认为64k,则stride为16,这样就避免了RAID每次存取数据时都去计算条带大小,如:
$ mkfs.ext4 -E stride=16 -b 4096 /dev/md0
其中stride=chunk/block,为2的n次方
4、挂载
$ mkdir /opt/raid0
$ mount /dev/md0 /opt/raid0
$ lsblk -f
$ 添加自动挂载
$ echo 'UUID=4ca46e4a-9308-4f3e-9542-f93de83bb0e3 /opt/raid0 ext4 defaults 0 0' >> /etc/fstab
3)AID1实现
1、准备两块磁盘
/dev/sdc
/dev/sdd
2、创建raid
$ mdadm -C /dev/md1 -a yes -n 2 -l 1 /dev/sd{c,d}
3、格式化
$ mkfs.ext4 /dev/md1
注意:这个提示是说软raid不能用作启动分区。
4、挂载
$ mkdir /opt/raid1
$ mount /dev/md1 /opt/raid1
$ lsblk -f
$ 添加自动挂载
$ echo 'UUID=28171480-3db3-4b80-be78-e86693b5d8a2 /opt/raid1 ext4 defaults 0 0' >> /etc/fstab
4)RAID5实现
1、准备两块磁盘
/dev/sdc
/dev/sdd
2、创建raid
$ mdadm -C /dev/md5 -a yes -l 5 -n 3 /dev/sde{1,2,3}
3、格式化
$ mkfs.ext4 /dev/md5
4、挂载
$ mkdir /opt/raid5
$ mount /dev/md5 /opt/raid5
$ lsblk -f
$ 添加自动挂载
$ echo 'UUID=c617c439-641d-4347-9a37-c6c559f8abc5 /opt/raid5 ext4 defaults 0 0' >> /etc/fstab
5、增加热备磁盘
$ mdadm /dev/md5 -a /dev/sdf
【科普热备】
热备的概念是 平时不参与阵列,就是一块空盘,在阵列中某一块盘坏掉了 热备才顶上
七、管理模式
选项:-a(--add),-d(--del),-r(--remove),-f(--fail)
1)模拟损坏
$ mdadm /dev/md1 -f /dev/sdd
2)移除损坏的磁盘
$ mdadm /dev/md1 -r /dev/sdd
3)添加新的硬盘到已有阵列
$ mdadm /dev/md1 -a /dev/sdg
注意:
新增加的硬盘需要与原硬盘大小一致
如果原有阵列缺少工作磁盘(如raid1只有一块在工作,raid5只有2块在工作),这时新增加的磁盘直接变为工作磁盘,如果原有阵列工作正常,则新增加的磁盘为热备磁盘。
4)停止阵列
选项:-S = --stop
# 必须先取消挂载
$ umount /opt/raid1
$ mdadm -S /dev/md1
八、监控模式
选项:-F
不常用,不做详细说明。
九、增长模式,用于增加磁盘,为阵列扩容
选项:-G
示例,将上述raid5的热备磁盘增加到阵列工作磁盘中
$ mdadm -G /dev/md2 -n 4
注意:-n 4 表示使用四块工作磁盘
再次使用-D选项查看阵列详细信息如下:
$ mdadm -D /dev/md1
十、装配模式,软RAID是基于系统的,当原系统损坏了,需要重新装配RAID
选项:-A
示例:将上述已经停止的阵列重新装配:
$ mdadm -A /dev/md1 /dev/sdc /dev/sdd
$ mount /dev/md1 /opt/raid1
实现自动装配
mdadm运行时会自动检查/etc/mdadm.conf 文件并尝试自动装配,因此第一次配置raid后可以将信息导入到/etc/mdadm.conf 中,命令如下:
$ mdadm -Ds >/etc/mdadm.conf