1.Raid阵列概述
Raid全称为独立磁盘冗余阵列(Rdeundant Array of Independent Disks), 简称硬盘阵列。基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、 容量巨大的硬盘。Raid比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。Raid通常被用在服务器上,使用完全相同的硬盘组成一个逻辑磁盘,磁盘阵列对于计算机来说,看起来就像一个单独的硬盘或逻辑存储单元
Raid分为不同的等级,各个不同的等级均在数据可靠性及读写性能上做了不同的权衡,分为Raid-0,Raid-1,Raid-5,Raid-01,Raid-10,Raid-50。在实际应用中,可以依据自己的实际需求选择不同的Raid方案
2.Raid阵列介绍(我们这里只介绍最常用的几种,如下所示:)
(1).Raid0
Raid0称为条带化(Striping)存储,将数据分段存储于各个磁盘中,读写均可以并行处理。因此其读写速率为单个磁盘的N倍(N为组成Raid0的磁盘个数),但是却没有数据冗余,单个磁盘的损坏会导致数据的不可修复,如下所示:
Raid0将多个磁盘合并成一个大的磁盘,不具有冗余,并行I/O,速度最快。在存放数据时,其将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中,所以在所有的级别中,Raid0的速度是最快的。但是Raid0没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都会丢失,不能用于对数据安全性要求高的环境
磁盘数:最低2个。
Size = N * min(S1,S2) N代表组成Raid0的磁盘数量
优点:极高的磁盘读写效率,不存在校验,不会占用太多CPU资源,设计、使用和配置比较简单
缺点:无冗余,不能用于对数据安全性要求高的环境
适用领域:视频生成和编辑、图形编辑,其它需要大的传输带宽的操作
(2).Raid1
镜像存储(mirror),数据被同等地写入两个或多个磁盘中,可想而知,写入速度会比较慢,但读取速度会比较快。读取速度可以接近所有磁盘吞吐量的总和,写入速度受限于最慢的磁盘,如下所示:
Raid1磁盘阵列,每一个磁盘都有一个镜像磁盘,镜像磁盘随时保持与原磁盘的内容一致。
Raid1具有最高的安全性,但只有一半的磁盘空间被用来存储数据。主要用在对数据安全性要求很高,而且要求能够快速恢复被损坏的数据的场合
适用领域:如财务、金融等高可用、高安全的数据存储环境
磁盘数:2个
Size = min(S1,S2)
优点:具有100%数据冗余,提供最高的数据安全保障,理论上可以实现2倍的读取效率,设计和使用比较简单
缺点:空间利用率只有50%,在写性能方面略有下降
(3).Raid5
RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 RAID 5可以理解为是RAID 0和RAID 1的折中方案。RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低,是运用较多的一种解决方案
磁盘数:最低3个
优点:读性能较高,中等的写性能,校验信息的分布方式存取,避免出现写操作的瓶颈;
缺点:控制器设计复杂,磁盘重建的过程比较复杂
可用空间:(N-1) * min(S1,S2,S3,…)
有容错能力:允许损坏1块磁盘
适用领域:文件服务器、email服务器、web服务器等环境,数据库应用
(4).Raid10和Raid01
Raid10其实结构非常简单,首先创建2个独立的Raid1,然后将这两个独立的Raid1组成一个Raid0(Raid1+0是先做Raid1,然后再做Raid0),当往这个逻辑Raid中写数据时,数据被有序的写入两个Raid1中。
优点:读性能很高,写性能比较好,数据安全性好,因此Raid1+0允许坏多个盘,只要不是一对磁盘坏就可以啦。
缺点:利用率只有50%
Size=N * min(S1,S2,…)/2
有容错能力:每组镜像最多只能坏一块;
适用领域:多用于要求高可用性和高安全性的数据库应用;
Raid01是先做两个Raid0,然后再做Raid1,Raid01 的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,因此Raid0+1允许坏多个盘,但只能在坏在同一个Raid0中,不允许两个Raid0都有坏盘。保证数据安全性的同时又提高了性能。 Raid01和 Raid10内部都含有Raid1模式,因此整体磁盘利用率均仅为50%
(5).Raid50
是Raid5和Raid0的结合,先实现Raid5,再条带化(先做Raid-5在做Raid-0,最少6块盘,每组允许坏1块盘,空间利用率灵活)
优点:比Raid5有更好的读性能,比相同容量的Raid5重建时间更短,可以容许N个磁盘同时失效
缺点:设计复杂,比较难实现;同一个Raid5组内的两个磁盘失效会导致整个阵列失效
适用领域:大型数据库服务器、应用服务器、文件服务器等应用
3.Raid5阵列构建
(1).实验说明:
在VMware中进行,系统中有一块磁盘sda,新添加6块SCSI磁盘,分别为sdb,sdc,sdd,sde,sdf,sdg, 其中4块作为磁盘阵列的设备,1块作为预备(spare)磁盘,还有1块留作备用(用于扩展Raid)
(2).实验步骤:
1).先查看一下系统中磁盘设备:fdisk -l
显示结果略
2).接下来开始创建Raid了,主要会应用到mdadm命令,使用此命令需要先安装CentOS7.6安装光盘中自带的mdadm包,如果没有安装,先进行安装
[root@localhost ~]# yum install -y mdadm
[root@localhost ~]# mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sd[b-f]
参数说明:
--create //表示要创建Raid
--auto=yes /dev/md0 //新建立的软件磁盘阵列设备为md0,md序号可以为0-9
--level=5 //磁盘阵列的等级,这里表示创建是的Raid5
--raid-devices //添加作为磁盘阵列用的磁盘的块数
--spare-devices //添加作为预备(spare)磁盘的块数
/dev/sd[b-f] //磁盘阵列所使用的设备
3).查看Raid是否成功创建及是否正常运行,有两种方法(当磁盘容量越大时,磁盘阵列构建的时间越长,所以可能需要等待很长时间才能看到以下信息):
执行 mdadm --detail /dev/md0 命令查看Raid的详细信息:
[root@localhost ~]# mdadm --detail /dev/md0
查看/proc/mdstat文件,可以比较简单明了的查看Raid创建和运行的情况:
[root@localhost ~]# cat /proc/mdstat
S代表预备(spare)磁盘,4个U代表正常,出现_表示不正常
确认新建的Raid设备
执行 mdadm -Q /dev/md0 //-Q用来查询设备信息
[root@localhost ~]# mdadm -Q /dev/md0
4).格式化并且挂载和使用创建的Raid
[root@localhost ~]# mkfs.xfs /dev/md0
[root@localhost ~]# mkdir /mnt/raid5
[root@localhost ~]# mount /dev/md0 /mnt/raid5/
来查看一下新挂载的Raid是否可以使用
[root@localhost ~]# df -hT
5).设置开机自动启动Raid以及自动挂载:
l 先建立/etc/mdadm.conf这个配置文件:
[root@localhost ~]# mdadm --detail /dev/md0 | grep UUID > /etc/mdadm.conf
上面建立的这个文件需要作小小的修改:
[root@localhost ~]# vi /etc/mdadm.conf
ARRAY /dev/md0 UUID=d58ed27d:00ce5cf5:b26ed1e9:879d0805
然后再修改/etc/fstab文件,设置开机自动挂载:
[root@localhost ~]# vi /etc/fstab
/dev/md0 /mnt/raid5 xfs defaults 0 0
重启一下系统,就可以检查开机自动挂载有没有设置成功了!
[root@localhost ~]# df -hT
[root@localhost ~]# reboot
[root@localhost ~]# df -hT
3.扩容Raid磁盘阵列
显示磁盘阵列的组成情况,4个块设备组成:
[root@localhost ~]# cat /proc/mdstat
把/dev/sdg增加进阵列/dev/md0:
[root@localhost ~]# mdadm --add /dev/md0 /dev/sdg
或者
[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sdg
把Raid5阵列/dev/md0修改为5个块设备:
[root@localhost ~]# mdadm --grow /dev/md0 -n5
再显示一下磁盘阵列的组成情况,现在/dev/md0是6个块设备组成,完成扩容,还需要2.0分钟
[root@localhost ~]# cat /proc/mdstat
扩展文件系统,执行下列命令:
[root@localhost ~]# xfs_growfs /dev/md0
验证,执行下列命令:
[root@localhost ~]# df -hT
4.模拟Raid5中一块磁盘损坏,检验spare磁盘的功能(Raid5中允许一块磁盘损坏,我们所设置的那1块spare磁盘会立即替代损坏的磁盘,进行Raid的重建,保障数据的安全):
使用以下命令设置磁盘sdd成为出错的状态:
[root@localhost ~]# mdadm --manage /dev/md0 --fail /dev/sdd
来查看一下:
[root@localhost ~]# mdadm --detail /dev/md0
可以查看/proc/mdstat文件查看Raid5的重建过程,再来看一下重建完后的结果
[root@localhost ~]# cat /proc/mdstat
挂载点/mnt/raid5还可以正常使用
[root@localhost ~]# cp -rf /tmp/vm* /mnt/raid5/
[root@localhost ~]# ls /mnt/raid5/
挂载点/mnt/raid5还可以正常使用
[root@localhost ~]# cp -rf /tmp/vm* /mnt/raid5/
[root@localhost ~]# ls /mnt/raid5/
5.将出错的磁盘删除并加入新的磁盘:
先删除损坏的磁盘sdd,即将损坏的磁盘sdd从Raid中删除:
[root@localhost ~]# mdadm --manage /dev/md0 --remove /dev/sdd
关机状态下,再添加一块新的SCSI磁盘作为spare磁盘,即添加新的磁盘sdh:
[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sdh
查看结果,执行以下命令:
[root@localhost ~]# mdadm --detail /dev/md0
6.关闭软件Raid的方法
当你不再需要已经设置的Raid的时候,可以用以下方法关闭Raid
(1).卸载/dev/md0,并且删除或注释掉/etc/fstab文件中的配置
[root@localhost ~]# umount /dev/md0
[root@localhost ~]# vi /etc/fstab
# /dev/md0 /mnt/raid5 ext4 defaults 0 0
2).注释掉或删除/etc/mdadm.conf中的设置
[root@localhost ~]# vi /etc/mdadm.conf
# ARRAY /dev/md0 UUID=d58ed27d:00ce5cf5:b26ed1e9:879d0805
(3).停止Raid设备
[root@localhost ~]# mdadm --stop /dev/md0
(4).删除Raid中的所有磁盘
[root@localhost ~]# mdadm --misc --zero-superblock /dev/sd[b-h]
[root@localhost ~]# df -hT