1.什么是RAID
1.1 RAID介绍
- 独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。
- 利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或数据冗余,或是两者同时提升。
- RAID 层级不同,数据会以多种模式分散于各个硬盘,RAID 层级的命名会以 RAID 开头并带数字,例如:RAID 0、RAID 1、RAID 5、RAID 6、RAID 10。每种等级都有其理论上的优缺点,不同的等级在两个目标间获取平衡,分别是(增加数据可靠性以及增加存储器群)读写性能。
1.2 RAID功能实现
- 提高IO能力,磁盘并行读写
- 提高耐用性,磁盘冗余算法来实现
1.3 RAID实现的方式
- 外接式磁盘阵列:通过扩展卡提供适配能力
- 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
- 软件RAID:通过OS实现,比如:群晖的NAS
2. RAID磁盘阵列详解
2.1 RAID 0(条带化存储)
- 因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。
- RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
- 读、写性能提升可用空间:N min(S1,S2,...)。
- 无容错能力
- 最少磁盘数:1+
2.2 RAID 1(镜像存储)
- 也称为镜像, 两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。
- 另外写入速度有微小的降低。
- 读性能提升、写性能略有下降
- 可用空间:1 min(S1,S2,...)
- 磁盘利用率 50%有冗余能力
- 最少磁盘数:2n
2.3 RAID 5
- 读、写性能提升
- 可用空间:(N-1) min(S1,S2,...)
- 有容错能力:允许最多1块磁盘损坏
- 最少磁盘数:3, 3+
2.4 RAID 1+0(先做镜像,再做条带)
- 读、写性能提升
- 可用空间:N min(S1,S2,...)/2
- 有容错能力:每组镜像最多只能坏一块
- 最少磁盘数:4, 4+
3. 配置RAID
3.1实现软raid
3.1.1 需求
- 为Linux服务器添加4块SCSI硬盘
- 使用mdadm软件包,构建RAID5磁盘阵列,提磁盘存储的性能和可靠性
3.1.2 实验过程
- 检查是否安装mdadm,准备用于RAID阵列的分区
如果没有安装,可以使用 yum -y install mdadm 安装mdadm工具:为软RAID提供管理界面,为空余磁盘添加冗余,结合内核中的md(multi devices)RAID设备可命名 为/dev/md0、/dev/md1、/dev/md2、/dev/md3等
mdadm [mode] <raiddevice> [options] <component-devices>
命令 模式 阵列名字(md0) 选项 选择/dev/sd[b-e]
mdadm -Cv /dev/md0 -l 10(raid) -n 4 -x 1 /dev/sd[bcde]
常用选项说明
模式:
创建:-C
装配:-A
监控:-F
管理:-f, -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意块设备
创建模式:
-n #: 使用#个块设备来创建此RAID
-l #:指明要创建的RAID的级别 0 1 5 10
-c CHUNK_SIZE: 指明块大小,单位k
-x #: 指明空闲盘的个数 热备 盘 -x 1 /dev/sd#
-D:显示raid的详细信息
mdadm -D /dev/md#(软raid名字) ##显示详细信息
管理模式:
-f: 标记指定磁盘为损坏
-a: 添加磁盘
-r: 移除磁盘
观察md的状态: cat /proc/mdstat
- 为Linux服务器添加4块SCSI硬盘
- 实现配置
[root@localhost ~]# mdadm -C /dev/md0 -l 5 -n 3 -x 1 /dev/sd[b-e] '##创建md0指定创建等级5使用3个硬盘,1个空闲硬盘'
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# mkfs.xfs /dev/md0 '##建立xfs类型的文件系统'
meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mdadm -D /dev/md0 ##显示详细信息
/dev/md0:
Version : 1.2
Creation Time : Thu Aug 4 10:51:30 2022
Raid Level : raid5
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Aug 4 10:52:29 2022
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 57% complete
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 677fed64:b50360a6:8a3ad242:aba9afb6
Events : 12
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
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb ##指定一个磁盘块坏掉
mdadm: set /dev/sdb faulty in /dev/md0
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb ##删除一块磁盘
mdadm: hot removed /dev/sdb from /dev/md0
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[4](S) sde[3](S) sdc[1]
41910272 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/1] [_U_]
unused devices: <none>