一、背景
RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种将多个物理硬盘驱动器组合成单一逻辑单元的技术,目的是提高存储性能、可靠性和/或数据冗余度。虽然早期的名字中包含“独立”(Independent),后来通常解释为“相互依存”(Interdependent),反映了磁盘之间的相互依赖关系。
RAID技术可以分为多个级别,每个级别有不同的特性和用途。以下是常见的几种RAID级别
-
RAID 0 (Striping):
- 特点:数据被分割并行存储在多个磁盘上。
- 优点:提高了数据访问速度。
- 缺点:没有数据冗余,任意一块磁盘故障会导致所有数据丢失。
-
RAID 1 (Mirroring):
- 特点:数据在两个或更多的磁盘上完全复制。
- 优点:提供了数据冗余,提高了数据可靠性。
- 缺点:存储效率较低,因为每一份数据都需要两倍的空间。
-
RAID 5 (Striping with Distributed Parity):
- 特点:数据分布在多个磁盘上,并且每个条带组包含一个奇偶校验块。
- 优点:提供了数据冗余,并且在单个磁盘故障时仍能保证数据完整。
- 缺点:在重建过程中性能会下降,而且只能容忍一个磁盘故障。
-
RAID 6 (Striping with Dual Parity):
- 特点:类似于RAID 5,但有两个奇偶校验块,可以容忍两个磁盘同时故障。
- 优点:提供了更高的数据冗余度。
- 缺点:存储效率比RAID 5更低。
-
RAID 10 (Striping with Mirroring):
- 特点:结合了RAID 0和RAID 1的优点,先镜像再条带化。
- 优点:同时拥有RAID 0的速度和RAID 1的数据保护。
- 缺点:成本较高,因为需要四块磁盘才能形成一个有效的RAID 10阵列。
-
RAID 0+1 (Striping with Mirroring):
- 特点:先条带化再镜像,与RAID 10类似。
- 优点:同样结合了速度和数据保护。
- 缺点:同样成本较高。
二、实现方式
1、硬件实现
硬件RAID通常是通过专门的RAID控制器来实现的。这种控制器内置了处理RAID算法的专用硬件,可以直接处理磁盘数据的条带化(striping)、镜像(mirroring)或奇偶校验(parity checking)等功能,减轻主机CPU的负担。
优点
- 性能高:由于RAID处理任务由专用硬件承担,不会占用主机CPU资源,因此通常具有较高的I/O性能。
- 独立性:硬件RAID控制器通常是独立于主机系统的,更换操作系统或硬件时不需要重新配置RAID。
- 热插拔:支持热插拔功能,可以在不关闭系统的情况下更换磁盘。
- 高级特性:一些高端RAID控制器支持更高级的功能,如缓存加速、电池备份保护等。
缺点
- 成本高:相对于软件RAID而言,硬件RAID需要额外购买RAID控制器,增加了成本。
- 互操作性差:不同品牌或型号的RAID控制器之间可能存在兼容性问题。
- 局限性:某些低端RAID控制器可能在处理复杂任务时表现不佳,如RAID 5或RAID 6。
2、软件实现
软件RAID是通过操作系统内核中的驱动程序或用户空间工具来实现的。所有的RAID处理任务都是由主机CPU来完成的。Linux下的mdadm
就是一个常用的软件RAID工具。
优点
- 灵活性高:可以根据需要灵活配置RAID级别和参数。
- 成本低:无需额外硬件,只需要支持操作系统即可。
- 便携性强:配置文件保存在磁盘上,可以跨平台迁移。
- 开放性好:由于是基于标准协议,所以互操作性较好。
缺点
- 性能受限:由于RAID处理任务由主机CPU承担,因此可能会影响整体性能。
- 依赖操作系统:如果操作系统崩溃,可能会导致RAID配置不可用。
- 热插拔限制:虽然现代操作系统支持热插拔,但在某些情况下可能不如硬件RAID方便。
3、对比总结
选择硬件RAID还是软件RAID,取决于具体的应用场景和需求。对于需要高性能、高可靠性的关键业务,硬件RAID可能是更好的选择。而对于成本敏感或需要高度定制化的环境,软件RAID则更为合适。在实际部署时,还需要考虑现有的硬件和软件环境,以及维护和管理的成本。
从我实际工作来看,几乎没人会用软件实现RAID,影响性能不说,安全性也不得到保证。操作系统崩溃这些原因,也可能导致RAID数据找不回来或者访问不了了。 软件实现纯属学习用途。
毕竟软件层面也只是记录了一下把硬件层面等东西进行抽象记录,最后模拟硬件RAID冗余原理实现数据冗余备份。 那如果操作系统哪天崩了,数据都找不回,亏大发。
但是硬件层面的RAID阵列卡,坏的概率相对较低。毕竟没人整体去操作和碰这个硬件阵列卡。硬件阵列卡和操作系统解耦了,操作系统崩了和我本身阵列卡没关系。相互之间几乎不会收到影响。
三、RockyLinux安装与软件RAID实验
1、安装RockyLinux
Centos7已经已停止维护了,改用RockyLinux。
官网: https://rockylinux.org
下载最小版本的ISO镜像文件。
2、安装mdadm软件
yum install mdadm -y
3、虚拟机添加5块硬盘
4、mdadm创建RAID5
mdadm --create /dev/md0 --auto=yes --level=5 --chunk=256K --raid-devices=4 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
- --create: 创建一个新的RAID阵列。
- /dev/md0: 指定新创建的RAID阵列的设备名称。
- --auto=yes: 自动启动RAID阵列,不需要手动确认。
- --level=5: 指定创建的RAID类型为RAID 5。RAID 5提供数据分布和奇偶校验信息分散在所有磁盘上,可以容忍单个磁盘的故障。
- --chunk=256K: 指定条带(stripe)的大小为256KB。较大的条带可以改善顺序读取性能,较小的条带可以改善随机读取性能。
- --raid-devices=4: 指定参与RAID阵列的有效磁盘数量为4。在RAID 5中,有效磁盘数量减去1等于可以容忍的故障磁盘数量。
- --spare-devices=1: 指定使用1块磁盘作为备用磁盘(hot spare)。当某个磁盘故障时,备用磁盘会自动加入阵列并进行数据重建。
- /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf: 指定用于创建RAID阵列的磁盘列表。在这个例子中,共有5块磁盘,其中4块用于构成RAID 5阵列,1块作为备用磁盘。
5、查看md0的构建情况
madm --detail /dev/md0
上图可以看到构建百分比,百分比进度到100%这个md0设备才能正常使用。等到100%,如图所示: 可以看到B、C、D、E 4个盘处于活跃状态, F盘处于备用状态
6、为md0创建文件系统且初始化
mkfs.xfs -f -d su=256k,sw=3 -r extsize=768k /dev/md0
7、mount挂载使用md0
mount /dev/md0 /data/
8、模拟B盘故障,F盘作为备用盘会自动顶上去
mdadm --fail /dev/md0 /dev/sdb
查看md0状态:
我们发现此时F盘作为备用盘顶上来, B盘已经损坏, 数据在重新构建中。构建完毕如下:
此时再查看数据,数据正常读取和写入:
四、总结
通过软件实现RAID仅仅只是一个学习过程,可以模拟磁盘损坏,备用磁盘会顶上去以及各种过程。但是,生产环境基本上没人会用软件层面实现RAID,一般都会购买磁盘阵列RAID硬件卡来实现RAID,才能保证性能和安全性、可靠性。