RAID简介
RAID级别 | 最少硬盘 | 可用容量 | 读写性能 | 安全性 | 特点 |
---|---|---|---|---|---|
0 | 2 | n | n | 低 | 追求最大容量和速度;任何一块硬盘损坏,数据将全部异常。 |
1 | 2 | n/2 | n | 高 | 追求最大安全性,只要阵列有一块可用,数据就不会受影响 |
5 | 3 | n-1 | n-1 | 中 | 在控制成本的前提下,追求最大容量,速度,及安全性。允许有一块硬盘出现异常,且数据不受影响。 |
10 | 4 | n/2 | n/2 | 高 | 综合 0 和 1的优点,追求速度和安全性,允许有一半硬盘出现异常(不可在同一阵列中),且数据不受影响 |
RAID 0
RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障,将导致整个系统的数据都受到破坏。通俗来说,RAID 0 技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数据。
RAID 1
RAID 1 技术示意图如下所示可以看到,是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。
考虑到在进行写入操作时因硬盘切换带来的开销,因此 RAID 1 的速度会比 RAID 0 有微弱地降低。但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取速度的峰值可以是硬盘数量的倍数。另外,平时只要保证有一块硬盘稳定运行,数据就不会出现损坏的情况,可靠性较高。
RAID 5
RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5 磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。这样的好处是,其中任何一设备损坏后不至于出现致命缺陷。
RAID 5 技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID 这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。
RAID 5 最少由 3 块硬盘组成,使用的是硬盘切割(Disk Striping)技术。相较于 RAID 1级别,好处就在于保存的是奇偶校验信息而不是一模一样的文件内容,所以当重复写入某个文件时,RAID 5 级别的磁盘阵列组只需要对应一个奇偶校验信息就可以,效率更高,存储成本也会随之降低。
RAID 10
RAID 10 技术是 RAID 1+RAID 0 技术的一个“组合体”。如下图所示,RAID 10 技术需要至少 4 块硬盘来组建,先分别两两制作成 RAID 1 磁盘阵列,以保证数据的安全性;然后再对两个 RAID 1 磁盘阵列实施 RAID 0 技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一阵列中的所有硬盘,那么最多可以损坏 50%的硬盘设备而不丢失数据。由于 RAID 10 技术继承了 RAID 0 的高读写速度和 RAID 1 的数据安全性,在不考虑成本的情况下 RAID 10 的性能也超过了 RAID 5,因此当前成为广泛使用的一种存储技术。
由于 RAID 10 是由 RAID 1 和 RAID 0 组成的,因此正确的叫法是“RAID 一零”,而不是“RAID 十”。
部署说明
当前,生产环境中用到的服务器一般都配备 RAID 阵列卡,可以使用 mdadm
命令在 Linux 系统中创建和管理软件 RAID 磁盘阵列,而所涉及的理论知识和操作过程与生产环境中的完全一致。
mdadm 命令用于创建、调整、监控和管理 RAID 设备,英文全称为“multiple devices admin”,语法格式为“ mdadm 参数 硬盘名称 ”。mdadm 命令中的常用参数及作用如下表所示。
参数 | 作用 |
---|---|
-a | 检测设备名称 |
-n | 指定设备数量 |
-l | 指定raid级别 |
-C | 创建 |
-v | 显示过程 |
-x | 备份盘数量 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止RAID磁盘阵列 |
部署RAID10
使用 mdadm 命令创建 RAID 10,名称为“/dev/md10”。
//部署RAID 10 ,-n指定硬盘数量,-l指定RAID级别,指定硬盘位置名称
[root@RS ~]# mdadm -Cv /dev/md10 -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
/*
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
*/
初始化过程大约需要 1 分钟左右,期间可以用 -D 参数进行查看。也可以用 -Q 参数查看简要信息:
[root@RS ~]# mdadm -D /dev/md10 //查看详细参数
[root@RS ~]# mdadm -Q /dev/md10 //查看简要信息
/dev/md10: 39.97GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.
为什么 4 块 20GB 大小的硬盘组成的磁盘阵列组,可用空间只有39.97GB 呢?
RAID 10 技术的原理通过两两一组硬盘组成的 RAID 1 磁盘阵列保证了数据的可靠性,其中每一份数据都会被保存两次,因此导致硬盘存在 50%的使用率和 50%的冗余率。这样一来,80GB 的硬盘容量也就只有一半了。
RAID阵列初始化完成后,把制作好的 RAID 磁盘阵列格式化为 Ext4 格式:
[root@RS ~]# mkfs.ext4 /dev/md10 //格式化磁盘阵列
格式化完毕,创建挂载点,将硬盘设备进行挂载操作:
[root@RS ~]# mkdir /md10 //创建挂载点
[root@RS ~]# mount /dev/md10 /md10 //进行挂载
[root@RS ~]# df -Th //查看挂载可用信息
......省略
/dev/md10 ext4 40G 49M 38G 1% /md10
阵列修复
使用 -f 参数是让硬盘模拟损坏的效果。
[root@RS ~]# mdadm /dev/md10 -f /dev/sdb //模拟磁盘损坏
mdadm: set /dev/sdb faulty in /dev/md10
[root@RS ~]# mdadm -D /dev/md10 //查看损坏后状态
/*
/dev/md10:
Version : 1.2
Creation Time : Mon Sep 26 04:41:11 2022
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB) //阵列大小
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Sep 26 04:49:51 2022
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : RS.zxbke.cn:10 (local to host RS.zxbke.cn)
UUID : e4f14cd1:4a12d92f:a92d26b8:9de6ea04
Events : 19
Number Major Minor RaidDevice State
- 0 0 0 removed
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
*/
0 8 16 - faulty /dev/sdb //可以看到 sdb 已下线
在确认有一块物理硬盘设备出现损坏而不能再继续正常使用后,应该使用 mdadm 命令将其移除。
[root@RS ~]# mdadm /dev/md10 -r /dev/sdb //移除md10阵列的 sdb盘
mdadm: hot removed /dev/sdb from /dev/md10
加入新的硬盘设备使用 mdadm 命令予以替换即可,在此期间可以在/RAID 目录中正常地创建或删除文件。由于是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到 RAID 磁盘阵列中。更换硬盘后再次使用 -a 参数进行添加操作,系统默认会自动开始数据的同步工作。使用 -D 参数即可看到整个过程和进度(用百分比表示):
[root@RS ~]# mdadm /dev/md10 -a /dev/sdb //添加新硬盘到阵列
mdadm: added /dev/sdb
[root@RS ~]# mdadm -D /dev/md10 //查看阵列详细参数
/*
/dev/md10:
Version : 1.2
Creation Time : Mon Sep 26 04:41:11 2022
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Sep 26 04:58:06 2022
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 15% complete
Name : RS.zxbke.cn:10 (local to host RS.zxbke.cn)
UUID : e4f14cd1:4a12d92f:a92d26b8:9de6ea04
Events : 26
Number Major Minor RaidDevice State
4 8 16 0 spare rebuilding /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
*/
磁盘阵列 备份盘
现在创建一个 RAID 5磁盘阵列+备份盘。在下面的命令中,参数 -n 3
代表创建这个 RAID 5 磁盘阵列所需的硬盘数,参数 -l 5
代表 RAID 的级别,参数 -x 1
则代表有一块备份盘。当查看/dev/md0(即 RAID 5 磁盘阵列的名称)磁盘阵列的时候,就能看到有一块备份盘在等待中了。
由 3 块硬盘组成的 RAID 5 磁盘阵列,其对应的可用空间是 n-1,也就是 40GB。热备盘的空间不计算进来,平时完全就是在“睡觉”,只有在意外出现时才会开始工作。
//创建RAID5阵列,-n指定硬盘数,-l指定阵列级别,-x指定备份盘数,追加硬盘
[root@RS ~]# mdadm -Cv /dev/md5 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
[root@RS ~]# mdadm -D /dev/md5
/dev/md5:
......省略
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 spare rebuilding /dev/sdd
3 8 64 - spare /dev/sde //备份盘,等待中
将部署好的 RAID 5 磁盘阵列格式化为 Ext4 文件格式,然后挂载到目录上,之后就能够使用了:
[root@RS ~]# mkfs.ext4 /dev/md5 //格式化阵列
[root@RS ~]# mkdir /raid5 //创建挂载点
[root@RS ~]# echo "/dev/md5 /raid5 ext4 defaults 0 0" >> /etc/fstab //写入配置文件
[root@RS ~]# df -Th //查看阵列可用的空间
......省略
/dev/md5 ext4 40G 49M 38G 1% /raid5
再次把硬盘设备/dev/sdb 移出磁盘阵列,然后迅速查看 /dev/md5 磁盘阵列的状态,就会发现备份盘已经被自动顶替上去并开始了数据同步。RAID 中的这种备份盘技术非常实用,可以在保证 RAID 磁盘阵列数据安全性的基础上进一步提高数据可靠性。所以,如果公司不差钱的话,还是买上一块备份盘以防万一吧。
[root@RS ~]# mdadm /dev/md5 -f /dev/sdb //模式sdb盘损坏
mdadm: set /dev/sdb faulty in /dev/md5
[root@RS ~]# mdadm -D /dev/md5 //迅速查看,sde已经自动顶替
......省略
Number Major Minor RaidDevice State
3 8 64 0 spare rebuilding /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
0 8 16 - faulty /dev/sdb
删除磁盘阵列
1、首先,需要将所有的磁盘都设置成停用状态:mdadm [阵列路径] -f [磁盘路径]
[root@RS ~]# umount /raid5 //删除挂载
[root@RS ~]# mdadm /dev/md5 -f /dev/sdc //停止sdc盘
mdadm: set /dev/sdc faulty in /dev/md5
[root@RS ~]# mdadm /dev/md5 -f /dev/sdd //停止sdd盘
mdadm: set /dev/sdd faulty in /dev/md5
[root@RS ~]# mdadm /dev/md5 -f /dev/sde //停止sde盘
mdadm: set /dev/sde faulty in /dev/md5
2、再逐一把阵列中的磁盘移除出去:mdadm [阵列路径] -r [磁盘路径]
[root@RS ~]# mdadm /dev/md5 -r /dev/sdb //移除sdb盘
mdadm: hot removed /dev/sdb from /dev/md5
[root@RS ~]# mdadm /dev/md5 -r /dev/sdc //移除sdc盘
mdadm: hot removed /dev/sdc from /dev/md5
[root@RS ~]# mdadm /dev/md5 -r /dev/sdd //移除sdd盘
mdadm: hot removed /dev/sdd from /dev/md5
[root@RS ~]# mdadm /dev/md5 -r /dev/sde //移除sde盘
mdadm: hot removed /dev/sde from /dev/md5
也可以用 “ mdadm /dev/md0 -f /dev/sdb -r /dev/sdb ” 这一条命令搞定。但是,在早期版本的服务器中,这条命令中的 -f 和 -r 不能一起使用,因此保守起见,还是一步步地操作。
3、将所有的硬盘都移除后,再来查看磁盘阵列组的状态; mdadm -D /dev/md5
,再继续停用整个 RAID 磁盘阵列就彻底完成了mdadm --stop [阵列路径]
[root@RS ~]# mdadm --stop /dev/md5 //停用RAID阵列
mdadm: stopped /dev/md5
[root@RS ~]# mdadm --remove /dev/md5 //清理保留的设备文件
在有一些老版本的服务器中,在使用 --stop 参数后依然会保留设备文件。这很明显是没有处理干净,这时再执行一下 mdadm --remove /dev/md5
命令即可。