第十四章 RAID磁盘阵列的原理与搭建
( 上课时间2021-07-05,笔记整理时间:2021-07-14)
本节所讲内容:
14.1 RAID 概念 企业级 RAID 0 1 5 10 的工作原理
14.2 RAID 0 1 5 10 搭建及使用 删除 RAID 及注意事项
14.3 实战 企业中硬件 raid5 的配置
14.1 RAID 概念-企业级 RAID-0-1-5-10 的工作原理
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意(其中一块盘坏了,数据不丢失)。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID 卡)或软件(MDADM)形式组合成一个容量巨大的磁盘组,利用多个磁盘组合在一起,提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。 磁盘阵列还能利用同位检查(Parity Check)的观念,在阵列中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中(也就是坏了一块盘,拔掉,插入新盘,数据还能恢复到新盘,利用奇偶校验)
注:RAID 可以预防数据丢失,但是它并不能完全保证你的数据不会丢失,所以大家使用 RAID 的同时还是注意备份重要的数据。
RAID 的创建有两种方式:软 RAID(通过操作系统软件来实现)和硬 RAID(使用硬件阵列卡);在企业中用的最多的是:raid1、raid5 和 raid10。不过随着云的高速发展,阿里云,腾讯云等供应商一般可以把硬件问题解决掉。
14.1.1 RAID 几种常见的类型
RAID 类型/级别 说明 最低磁盘个数 空间利用率 各自的优缺点 RAID 0 条带卷 2+ 100% 读写速度快,不容错 RAID 1 镜像卷 2 50% 写速度一般,读速度提升,容错 RAID 5 带奇偶校验的条带卷 3+ (n-1)/n 2/3 读写速度快,容错,允许坏一块 RAID 6 带奇偶检验的条带集,双检验 4+ (n-2)/n 2/4 读写快,容错,允许坏两块 RAID 10 RAID1的安全+RAID0的速度 4 50% 读写速度快,容错 RAID 50 RAID 5的安全+RAID 0 的高速 6 (n-2)/n 4/6 读写速度快,容错RAID 基本思想:把好几块硬盘通过一定组合方式把它组合起来,成为一个新的硬盘阵列组,从而使它能够达到高性能硬盘的要求
RAID 有三个关键技术:
镜像:提供了数据的安全性;
chunk 条带(块大小也可以说是条带的粒度),它的存在的就是为了提高 I/O,提供了数据并发性数据的校验:保证了数据的可靠性
Raid 相对于单个磁盘优点:
14.1.2 RAID-0 的工作原理
条带 (strping),也是我们最早出现的 RAID 模式
需磁盘数量:2 块以上(大小最好相同),是组建磁盘阵列中最简单的一种形式,只需要 2 块以上的硬盘即可.
特点:成本低,可以提高整个磁盘的性能和吞吐量。RAID 0 没有提供冗余或错误修复能力,速度快.
任何一个磁盘的损坏将损坏全部数据;磁盘利用率为 100%。
14.1.3 RAID-1
mirroring(镜像卷),需要磁盘两块以上
原理:是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,(同步)
RAID 1 mirroring(镜像卷),至少需要两块硬盘,raid 大小等于两个 raid 分区中最小的容量(最好将分区大小分为一样),数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;
磁盘利用率为 50%,即 2 块 100G 的磁盘构成 RAID1 只能提供 100G 的可用空间。如下图
14.1.4 RAID-5
需要三块或以上硬盘,可以提供热备盘实现故障的恢复;只损坏一块,没有问题。但如果同时损坏两块磁盘,则数据将都会损坏。 空间利用率: (n-1)/n 2/3 如下图所示
奇偶校验信息的作用:
当 RAID5 的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。Raid 5 没有独立的奇偶校验盘,所有校验信息分散放在所有磁盘上, 只占用一个磁盘的容量raid 5 阵列所有磁盘容量必须一样大,当容量不同时,会以最小的容量为准。
可用空间=磁盘数 n-1
raid5 至少需要 3 块盘,上限无限制,但是当磁盘数量大于 8 时整体性能下降明显。
对于 Raid5 来说性能最好的时候是不要超过 7 个!如果你有很多硬盘要做 Raid5 的话,建议你分开多个 Raid5 来做!而且最好是多留一个盘来做 HotSpace 热备盘!
扩展:异或运算
是用相对简单的异或逻辑运算(相同为 0,相异为 1)
A值 B值 Xor结果 0 0 0 1 0 1 0 1 1 1 1 014.1.5 嵌套 RAID 级别
RAID-10 镜像+条带
RAID 10 是将镜像和条带进行两级组合的 RAID 级别,第一级是 RAID1 镜像对,第二级为 RAID 0。比如我们有 4 块盘,它是先两两做镜像,形成了新的 2 块盘,然后对这 2 块盘做 RAID0;当RAID10 有一个硬盘受损其余硬盘会继续工作,这个时候受影响的硬盘只有 1 块
几个方案对比下来, RAID5 是最适合的,如下图:
14.1.6 RAID 硬盘失效处理
一般两种处理方法:热备和热插拔
热备:HotSpare
定义:当冗余的 RAID 组中某个硬盘失效时,在不干扰当前 RAID 系统的正常使用的情况下,用RAID 系统中另外一个正常的备用硬盘自动顶替失效硬盘,及时保证 RAID 系统的冗余性(就像汽车上的备胎)
全局式:备用硬盘为系统中所有的冗余 RAID 组共享 (多个汽车一个备胎)
专用式:备用硬盘为系统中某一组冗余 RAID 组专用 (一个汽车一个备胎)
如下图所示:是一个全局热备的示例,该热备盘由系统中两个 RAID 组共享,可自动顶替任何一个RAID 中的一个失效硬盘
热插拔:HotSwap定义:在不影响系统正常运转的情况下,用正常的物理硬盘替换 RAID 系统中失效硬盘。(灯变红了,有硬盘失效了,直接拔掉,插上一块新的,服务器要支持热插拔 HotSwap)
14.2 RAID-0-1-5-10 搭建及使用-删除 RAID 及注意事项
14.2.1 RAID 的实现方式
Linux 内核中有一个 md(multiple devices)模块在底层管理 RAID 设备,它会在应用层给我们提供一个应用程序的工具 mdadm ,mdadm 是 linux 下用于创建和管理软件 RAID 的命令。
mdadm 命令常见参数解释:
-C 或 --creat 建立一个新阵列 -r 移除设备 -A 激活磁盘阵列 -l 或--level= 设定磁盘阵列的级别 -D 或 --detail 打印阵列设备的详细信息 -n 或--raiddevices= 指定阵列成员(分区/磁盘)的数量 -s 或--scan 扫描配置文件或/proc/mdstat 得到阵列缺失信 -x 或 --sparedevicds= 指定阵列中备用盘的量 -f 将设备状态定为故障 -c 或--chunk= 设定阵列的块 chunk大小 ,单位为 KB -a 或--add 添加设备到阵列 -G 或--grow 改变阵列大小或形态 -v --verbose 显示详细信息 -S 停止阵列磁盘达到 sdz 以后,名字应该如何排 sdaa 、 sdab 、sdac……。
14.2.2 创建 RAID0
实验环境:
raid 种类 磁盘 热备盘raid0 sdb、sdc
1、创建 raid0
[root@Centos83 ~]# yum -y install mdadm [root@Centos83 ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc #-C 创建 -v 详细信息 -l 阵列级别 -n 阵列成员数量 mdadm: chunk size defaults to 512K mdadm: partition table exists on /dev/sdb mdadm: partition table exists on /dev/sdb but will be lost or meaningless after creating array Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@Centos83 ~]# mdadm -Ds # -D 打印阵列设备详细信息 s 得到阵列缺失信息 ARRAY /dev/md0 metadata=1.2 name=Centos83:0 UUID=001930e2:b2f8a172:05f69ea7:ac8ed7b52、 查看阵列信息
[root@Centos83 ~]# mdadm -Ds # -D 打印阵列设备详细信息 s 得到阵列缺失信息 ARRAY /dev/md0 metadata=1.2 name=Centos83:0 UUID=001930e2:b2f8a172:05f69ea7:ac8ed7b5 [root@Centos83 ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Jul 14 12:08:24 2021 Raid Level : raid0 Array Size : 41908224 (39.97 GiB 42.91 GB) Raid Devices : 2 #39.97 按照 1024 计算,42.92 按照 1000 计算 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Jul 14 12:08:24 2021 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : -unknown- Chunk Size : 512K #chunk 是 raid 中最小的存储单位 Consistency Policy : none Name : Centos83:0 (local to host Centos83) UUID : 001930e2:b2f8a172:05f69ea7:ac8ed7b5 Events : 0 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc [root@Centos83 ~]# mdadm -Dsv > /dev/mdadm.conf #保存配置信息 [root@Centos83 ~]# cat /proc/mdstat #从内存中查看,重启后,信息丢失,所以要保存 Personalities : [raid0] md0 : active raid0 sdc[1] sdb[0] 41908224 blocks super 1.2 512k chunks unused devices: <none>3、 对创建的 RAID0 进行文件系统创建并挂载
[root@Centos83 ~]# mkfs.xfs /dev/md0 [root@Centos83 ~]# mkdir /raid0 [root@Centos83 ~]# mount /dev/md0 /raid0 [root@Centos83 ~]# df -Th /raid0/ 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/md0 xfs 40G 319M 40G 1% /raid0 [root@Centos83 ~]# echo raid > /raid0/raid.txt [root@Centos83 ~]# cat /raid0/raid.txt raid4、 开机自动挂载
[root@Centos83 ~]# blkid /dev/md0 # 查看 md0 UUID /dev/md0: UUID="1e49efcb-9b7e-415a-8b05-a04bbb496a9a" BLOCK_SIZE="512" TYPE="xfs" [root@Centos83 ~]# echo "UUID=1e49efcb-9b7e-415a-8b05-a04bbb496a9a /raid0 xfs defaults 0 0" >> /etc/fstab # 把 md0 挂载信息添加到开机挂载14.2.3 创建 RAID1
实验内容如下:
raid 种类 磁盘 热备盘raid1 sdd、sde sdf
1)创建 RAID1
2)添加 1 个热备盘
3)模拟磁盘故障,自动顶替故障盘
4)从 raid1 中移出故障盘
[root@Centos83 ~]# mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sd[d,e,f] # -C 创建 -v 详细信息 -l 阵列级别 -n 阵列成员数量 -x 阵列备用盘数量 [root@Centos83 ~]# mdadm -Dsv > /dev/mdadm.conf # 将 RADI 信息保存到配置文件 [root@Centos83 ~]# mdadm -D /dev/md1 # 查看 RAID 阵列信息 /dev/md1: Version : 1.2 Creation Time : Wed Jul 14 12:28:48 2021 Raid Level : raid1 Array Size : 20954112 (19.98 GiB 21.46 GB) Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Wed Jul 14 12:30:26 2021 State : clean, resyncing Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Consistency Policy : resync Resync Status : 98% complete Name : Centos83:1 (local to host Centos83) UUID : 30d89efc:11eaa0f0:c032179e:f6b0cfd8 Events : 15 Number Major Minor RaidDevice State 0 8 48 0 active sync /dev/sdd 1 8 64 1 active sync /dev/sde 2 8 80 - spare /dev/sdf # spare:备用 [root@Centos83 ~]# mkdir /raid1 # 创建挂载点 [root@Centos83 ~]# mount /dev/md1 /raid1/ # 挂载刚创建的raid1 [root@Centos83 ~]# cp /etc/passwd /raid1/ # 准备测试文件#模拟损坏下面模拟 RAID1 中数据盘/dev/sde 出现故障,观察/dev/sdf 备用盘能否自动顶替故障盘先确定已经同步成功
[root@Centos83 ~]# mdadm -D /dev/md1 # -D 打印阵列设备详细信息 [root@Centos83 ~]# mdadm /dev/md1 -f /dev/sde # -f 将设备状态设为故障 [root@Centos83 ~]# mdadm -D /dev/md1 Number Major Minor RaidDevice State 0 8 48 0 active sync /dev/sdd 2 8 80 1 spare rebuilding /dev/sdf 1 8 64 - faulty /dev/sdespare rebuilding 热备重建中,也就是 sdd 会把自己的数据同步到 sdf
rebuild Status : 13% complete 同步状态 (此时 md1 中的文件依然正常使用,因为 sdd 在工作)
faulty 错误
[root@Centos83 ~]# mdadm -Dsv /etc/mdadm.conf # -D 打印阵列设备详细信息 s 得到阵列缺失信息 v [root@Centos83 ~]# ls /raid1/ # 数据正常,没有丢失 passwd重要的数据如:数据库 ; 系统盘 (把系统安装到 raid1 的 md1 设备上,然后对 md1 做分区)
[root@Centos83 ~]# mdadm -r /dev/md1 /dev/sde # -r 移除损坏的设备 mdadm: hot removed /dev/sde from /dev/md1 [root@Centos83 ~]# mdadm -D /dev/md1 # 已经没有热备盘了,添加一块新热备盘 ………… Number Major Minor RaidDevice State 0 8 48 0 active sync /dev/sdd 2 8 80 1 active sync /dev/sdf [root@Centos83 ~]# mdadm -a /dev/md1 /dev/sde # -a 添加设备到阵列 mdadm: added /dev/sde [root@Centos83 ~]# mdadm -D /dev/md1 # 查看 sde又添加回来了 Number Major Minor RaidDevice State 0 8 48 0 active sync /dev/sdd 2 8 80 1 active sync /dev/sdf 3 8 64 - spare /dev/sde14.2.4 创建 RAID5
实验环境:
raid 种类 磁盘 热备盘raid5 sdg、sdh、sdi sdj
1)创建 RAID5, 添加 1 个热备盘,指定 chunk 大小为 32K
-x 指定阵列中备用盘的数量
-c 或--chunk= 设定阵列的块 chunk 块大小 ,单位为 KB (普通文件就默认就可以,如果存储大文件就调大些,如果存储小文件就调小些,这里 chunk 就类似簇,块一样的概念,是阵列的最小存储单位)
2)停止阵列,重新激活阵列
3)使用热备盘,扩展阵列容量,从 3 个磁盘扩展到 4 个
创建 RAID-5
[root@Centos83 ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 -c 32 /dev/sd{g,h,i,j} # -C 创建 -v 详细信息 -l 阵列级别 -n 阵列成员数量 -x 阵列备用盘数量 -c 或--chunk= 设定阵列的块 chunk 块大小[root@Centos83 ~]# mdadm -D /dev/md5 # 查看创建的raid5/dev/md5: Version : 1.2 Creation Time : Wed Jul 14 12:58:12 2021 Raid Level : raid5 Array Size : 41908224 (39.97 GiB 42.91 GB) Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Wed Jul 14 12:59:58 2021 State : clean Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 32KConsistency Policy : resync Name : Centos83:5 (local to host Centos83) UUID : 6aa36e8d:117754ec:828b2cff:3a633a61 Events : 18 Number Major Minor RaidDevice State 0 8 96 0 active sync /dev/sdg 1 8 112 1 active sync /dev/sdh 4 8 128 2 active sync /dev/sdi 3 8 144 - spare /dev/sdj #热备盘(2) 扩展 RAID5 磁盘阵列
将热备盘增加到 md5 中,使用 md5 中可以使用的磁盘数量为 4 块
[root@Centos83 ~]# mdadm -G /dev/md5 -n 4 -c 32 #-G 或--grow 改变阵列大小或形态[root@Centos83 ~]# mdadm -Dsv > /dev/mdadm.conf #保存配置文件[root@Centos83 ~]# mdadm -D /dev/md5 #查看状态/dev/md5: Version : 1.2 Creation Time : Wed Jul 14 12:58:12 2021 Raid Level : raid5 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 : Wed Jul 14 13:05:18 2021 State : clean, reshaping Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 32KConsistency Policy : resync Reshape Status : 22% complete #重塑状态:3%完成 ,等到 100%, 数据才同步完,同步完后会变成成:Consistency Policy : resync #一致性策略:再同步,表示已经同步完 Delta Devices : 1, (3->4) Name : Centos83:5 (local to host Centos83) UUID : 6aa36e8d:117754ec:828b2cff:3a633a61 Events : 49 Number Major Minor RaidDevice State 0 8 96 0 active sync /dev/sdg 1 8 112 1 active sync /dev/sdh 4 8 128 2 active sync /dev/sdi 3 8 144 3 active sync /dev/sdjConsistency Policy : resync Name : Centos83:5 (local to host Centos83) UUID : 6aa36e8d:117754ec:828b2cff:3a633a61 Events : 61[root@Centos83 ~]# mdadm -D /dev/md5 #停止前,请确认数据已经同步完(同步不完成,有时会无法激活) [root@Centos83 ~]# mdadm -D /dev/md5/dev/md5: Version : 1.2 Creation Time : Wed Jul 14 12:58:12 2021 Raid Level : raid5 Array Size : 62862336 (59.95 GiB 64.37 GB) #空间已经变大 Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Wed Jul 14 13:07:08 2021 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 32KConsistency Policy : resync #数据已经同步完 Name : Centos83:5 (local to host Centos83) UUID : 6aa36e8d:117754ec:828b2cff:3a633a61 Events : 61 Number Major Minor RaidDevice State 0 8 96 0 active sync /dev/sdg 1 8 112 1 active sync /dev/sdh 4 8 128 2 active sync /dev/sdi 3 8 144 3 active sync /dev/sdj[root@Centos83 ~]# mdadm -Dsv > /dev/mdadm.conf # 一定要先保存配置文件(4) 激活 MD5 阵列
[root@Centos83 ~]# mdadm -S /dev/md5 #-S 停止阵列mdadm: stopped /dev/md5[root@Centos83 ~]# mdadm -As #-A 激活磁盘阵列 s 扫描配置文件得到阵列信息mdadm: /dev/md/5 has been started with 4 drives.14.2.5 创建 RAID10
实验环境:
把SDK 分为4个区 raid10 分区:sdk1,sdk2,sdk3.sdk4
[root@Centos83 ~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sdk[1-4]# -C 创建 -v 详细信息 -l 阵列级别 -n 阵列成员数量mdadm: layout defaults to n2mdadm: layout defaults to n2mdadm: chunk size defaults to 512Kmdadm: size set to 2094080Kmdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md10 started.[root@Centos83 ~]# cat /proc/mdstat Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md10 : active raid10 sdk4[3] sdk3[2] sdk2[1] sdk1[0] 4188160 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]14.2.6 删除 RAID 所有信息及注意事项
[root@Centos83 ~]# umount /dev/md0 /raid0 #如果你已经挂载 raid,就先卸载 [root@Centos83 ~]# mdadm -Ss #停止 raid 设备[root@Centos83 ~]# rm -rf /etc/mdadm.conf #删除 raid 配置文件[root@Centos83 ~]# mdadm --zero-superblock /dev/sdb #清除物理磁盘中的 raid 标识 ,MD 超级块[root@Centos83 ~]# mdadm --zero-superblock /dev/sd[b-j] [root@Centos83 ~]# mdadm --zero-superblock /dev/sdk[1-4][root@Centos83 ~]# mdadm -Dsv #清除物理磁盘中的 raid 标识 ,MD 超级块mdadm: Unrecognised md component device #代表已经擦除掉 MD 超级块,找不到 raid 标识的信息了,擦除 MD 超级快,执行两次会报这个信息。
参数:--zero-superblock : #擦除设备中的 MD 超级块
总结:
14.1 RAID 概念-企业级 RAID-0-1-5-10 的工作原理
14.2 RAID-0-1-5-10 搭建及使用-删除 RAID 及注意事项
14.3 实战-企业中硬件 raid5 的配置
【本文转自:日本cn2服务器 http://www.558idc.com/jap.html提供,感恩】