评论

收藏

[Linux] Linux 云计算集群架构师->第十四章 RAID磁盘阵列的原理与搭建

服务系统 服务系统 发布于:2021-07-20 16:22 | 阅读数:462 | 评论:0

第十四章 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镜像卷250%写速度一般,读速度提升,容错RAID 5带奇偶校验的条带卷3+(n-1)/n 2/3读写速度快,容错,允许坏一块RAID 6带奇偶检验的条带集,双检验4+(n-2)/n 2/4读写快,容错,允许坏两块RAID 10RAID1的安全+RAID0的速度450%读写速度快,容错RAID 50RAID 5的安全+RAID 0 的高速6(n-2)/n 4/6读写速度快,容错RAID 基本思想:把好几块硬盘通过一定组合方式把它组合起来,成为一个新的硬盘阵列组,从而使它能够达到高性能硬盘的要求
RAID 有三个关键技术:
镜像:提供了数据的安全性;
chunk 条带(块大小也可以说是条带的粒度),它的存在的就是为了提高 I/O,提供了数据并发性数据的校验:保证了数据的可靠性
Raid 相对于单个磁盘优点:
DSC0000.png

14.1.2 RAID-0 的工作原理
条带 (strping),也是我们最早出现的 RAID 模式
需磁盘数量:2 块以上(大小最好相同),是组建磁盘阵列中最简单的一种形式,只需要 2 块以上的硬盘即可.
特点:成本低,可以提高整个磁盘的性能和吞吐量。RAID 0 没有提供冗余或错误修复能力,速度快.
任何一个磁盘的损坏将损坏全部数据;磁盘利用率为 100%。
DSC0001.png

DSC0002.png

14.1.3 RAID-1
mirroring(镜像卷),需要磁盘两块以上
原理:是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,(同步)
RAID 1 mirroring(镜像卷),至少需要两块硬盘,raid 大小等于两个 raid 分区中最小的容量(最好将分区大小分为一样),数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;
磁盘利用率为 50%,即 2 块 100G 的磁盘构成 RAID1 只能提供 100G 的可用空间。如下图
DSC0003.png

DSC0004.png

14.1.4 RAID-5
需要三块或以上硬盘,可以提供热备盘实现故障的恢复;只损坏一块,没有问题。但如果同时损坏两块磁盘,则数据将都会损坏。 空间利用率: (n-1)/n 2/3 如下图所示
DSC0005.png

奇偶校验信息的作用:
当 RAID5 的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。Raid 5 没有独立的奇偶校验盘,所有校验信息分散放在所有磁盘上, 只占用一个磁盘的容量raid 5 阵列所有磁盘容量必须一样大,当容量不同时,会以最小的容量为准。
可用空间=磁盘数 n-1
raid5 至少需要 3 块盘,上限无限制,但是当磁盘数量大于 8 时整体性能下降明显。
对于 Raid5 来说性能最好的时候是不要超过 7 个!如果你有很多硬盘要做 Raid5 的话,建议你分开多个 Raid5 来做!而且最好是多留一个盘来做 HotSpace 热备盘!
扩展:异或运算
是用相对简单的异或逻辑运算(相同为 0,相异为 1)
A值B值Xor结果00010101111014.1.5 嵌套 RAID 级别
RAID-10 镜像+条带
RAID 10 是将镜像和条带进行两级组合的 RAID 级别,第一级是 RAID1 镜像对,第二级为 RAID 0。比如我们有 4 块盘,它是先两两做镜像,形成了新的 2 块盘,然后对这 2 块盘做 RAID0;当RAID10 有一个硬盘受损其余硬盘会继续工作,这个时候受影响的硬盘只有 1 块
DSC0006.png

几个方案对比下来, RAID5 是最适合的如下图:
DSC0007.png

14.1.6 RAID 硬盘失效处理
一般两种处理方法:热备和热插拔
热备:HotSpare
定义:当冗余的 RAID 组中某个硬盘失效时,在不干扰当前 RAID 系统的正常使用的情况下,用RAID 系统中另外一个正常的备用硬盘自动顶替失效硬盘,及时保证 RAID 系统的冗余性(就像汽车上的备胎)
全局式:备用硬盘为系统中所有的冗余 RAID 组共享 (多个汽车一个备胎)
专用式:备用硬盘为系统中某一组冗余 RAID 组专用 (一个汽车一个备胎)
如下图所示:是一个全局热备的示例,该热备盘由系统中两个 RAID 组共享,可自动顶替任何一个RAID 中的一个失效硬盘
DSC0008.png

热插拔: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:ac8ed7b5
2、 查看阵列信息
[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
raid
4、 开机自动挂载
[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/sde
spare 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/sde
14.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 : 32K
Consistency 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 : 32K
Consistency 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/sdj
Consistency 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 : 32K
Consistency 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 n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 2094080K
mdadm: Defaulting to version 1.2 metadata
mdadm: 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 的配置

关注下面的标签,发现更多相似文章