1、什么是RAID
RAID称之为磁盘阵列,主要用于提高存储的可用性,和性能上的改善,同时大大提高磁盘的容错能力,磁盘阵列是由多个物理磁盘组成,但是对于操作系统而言,它就是一个逻辑磁盘,系统上存储的数据会分布在阵列中的多个物理磁盘。
2、RAID的几种级别
级别 | 说明 | 最少物理磁盘数 | 最大容错能力 | I/O性能 | 磁盘容量利用率 |
---|---|---|---|---|---|
RAID 1 | 1级别又称之为磁盘镜像,同样是需要2块盘,但是磁盘具有了容错能力 | 需要2个磁盘 | 允许一块硬盘发生故障 | 读性能提升,写入性能一般 | 50% |
RAID 5 | 5级别称之为分布式奇偶校验阵列,以数据的校验位来保证数据的安全,但是数据的校验位不是存放在单独的磁盘,而是交互式的存放在各个阵列中的磁盘,如果阵列中任何一个磁盘出现故障,都可根据其他盘的校验位重建损坏的数据 | 至少3块磁盘 | 允许一块硬盘发生故障 | 读写性能较好 | 90% |
RAID 6 | 6级别与5级别类似,5级别会将数据的校验信息存放在硬盘上,6级别会比5级别多保存一份校验信息 | 至少需要4块硬盘 | 允许两块硬盘发生故障 | 读写性能较好 | 80% |
RAID 10 | 称之为高可靠性与高效磁盘结构,兼具了0级别和1级别的优点,此种级别先用两个磁盘建立镜像,然后将镜像后的逻辑磁盘,做0级别 | 至少需要4块硬盘 | 允许一块盘发生故障 | 读写性能好 | 50% |
3、RAID种类
种类 | 说明 |
---|---|
软RAID | 利用操作系统提供的软件技术实现RAID功能,优点廉价,几乎没有任何成本,缺点受限操作系统的稳定性,同时占用一定的系统资源 |
硬RAID | 通过硬件RAID控制器实现,优点是不需要占用其他硬件资源,同时提供了高速缓存机制,大大的提升了磁盘的读写性能,同时稳定性也是非常高 |
4、Linux系统上实现软RAID
模拟平台:VMware workstation
测试环境:centos7计算机一台,添加一块硬盘
使用工具:mdadm
【raid1】实现过程:
1、首先查看磁盘标签类型
如果是MBR可以使用fdisk创建相同大小的磁盘分区
如果是GPT可以使用gdisk创建相同大小的磁盘分区
[root@lab-236 ~]# fdisk -l /dev/sdb磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区Units = 扇区 of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:gpt #硬盘类型GPTDisk identifier: 037192CD-B94D-4F5D-A559-A90B74EECA9DStart End Size Type Name
2、创建2个分区,并更改分区系统类型为Linux RAID
因为我们的磁盘标签类型是GPT,所以使用gdisk执行
[root@lab-236 ~]# gdisk /dev/sdbGPT fdisk (gdisk) version 0.8.10Partition table scan:MBR: protectiveBSD: not presentAPM: not presentGPT: presentFound valid GPT with protective MBR; using GPT.Command (? for help): n #创建新的分区Partition number (1-128, default 1): 1 #分区编号1First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: #指定起始扇区,默认即可Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +5G #指定分区大小Current type is \'Linux filesystem\'Hex code or GUID (L to show codes, Enter = 8300): fd00 #更改分区系统类型为LinuxRAIDChanged type of partition to \'Linux RAID\'Command (? for help): n #继续创建第二分区Partition number (2-128, default 2): 2 #分区编号2First sector (34-41943006, default = 10487808) or {+-}size{KMGTP}: #指定起始扇区,默认即可Last sector (10487808-41943006, default = 41943006) or {+-}size{KMGTP}: +5G #指定分区大小Current type is \'Linux filesystem\'Hex code or GUID (L to show codes, Enter = 8300): fd00 #更改分区系统类型为LinuxRAIDChanged type of partition to \'Linux RAID\'Command (? for help): p #显示分区信息Disk /dev/sdb: 41943040 sectors, 20.0 GiBLogical sector size: 512 bytesDisk identifier (GUID): 037192CD-B94D-4F5D-A559-A90B74EECA9DPartition table holds up to 128 entriesFirst usable sector is 34, last usable sector is 41943006Partitions will be aligned on 2048-sector boundariesTotal free space is 20971453 sectors (10.0 GiB)Number Start (sector) End (sector) Size Code Name1 2048 10487807 5.0 GiB FD00 Linux RAID2 10487808 20973567 5.0 GiB FD00 Linux RAIDCommand (? for help): w #保存分区信息Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTINGPARTITIONS!!Do you want to proceed? (Y/N): Y #分区发生改变,提示是否继续保存OK; writing new GUID partition table (GPT) to /dev/sdb.The operation has completed successfully.
3、执行mdadm工具创建RAID1
注意创建RAID设备编号要从0开始
[root@lab-236 ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdb2mdadm: /dev/sdb1 appears to be part of a raid array:level=raid1 devices=2 ctime=Thu Dec 10 20:52:02 2020mdadm: Note: this array has metadata at the start andmay not be suitable as a boot device. If you plan tostore \'/boot\' on this device please ensure thatyour boot-loader understands md/v1.x metadata, or use--metadata=0.90mdadm: /dev/sdb2 appears to be part of a raid array:level=raid1 devices=2 ctime=Thu Dec 10 20:52:02 2020Continue creating array? Y #提示创建是否继续,是Ymdadm: Fail to create md0 when using /sys/module/md_mod/parameters/new_array, fallback to creation via nodemdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.
注意:创建过程,有提示这个阵列不适合作为启动盘的信息,这个是由于超级块类型决定的,超级块的类型可以使用–metadata选项设置,默认是1.2,只有这个值不大于1.0时才可以作为启动盘
4、检查创建的RAID详细信息和运行状态
[root@lab-236 ~]# mdadm --detail /dev/md0 #查看RAID详细信息/dev/md0:Version : 1.2Creation Time : Fri Dec 11 16:46:33 2020Raid Level : raid1Array Size : 5237760 (5.00 GiB 5.36 GB)Used Dev Size : 5237760 (5.00 GiB 5.36 GB)Raid Devices : 2Total Devices : 2Persistence : Superblock is persistentUpdate Time : Fri Dec 11 16:46:59 2020State : cleanActive Devices : 2Working Devices : 2Failed Devices : 0Spare Devices : 0Consistency Policy : resyncName : lab-236.com:0 (local to host lab-236.com)UUID : 52f68880:b4d10435:d271aaa2:261ed9cbEvents : 17Number Major Minor RaidDevice State0 8 17 0 active sync /dev/sdb11 8 18 1 active sync /dev/sdb2
[root@lab-236 ~]# cat /proc/mdstat #查看运行状态Personalities : [raid1]md0 : active raid1 sdb2[1] sdb1[0]5237760 blocks super 1.2 [2/2] [UU]unused devices: <none>
5、创建好RAID分区,接下来就是格式化文件系统,才可以被使用
[root@lab-236 ~]# mkfs.xfs /dev/md0 #格式化为xfs文件系统meta-data=/dev/md0 isize=512 agcount=4, agsize=327360 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=0, sparse=0data = bsize=4096 blocks=1309440, imaxpct=25= sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal log bsize=4096 blocks=2560, version=2= sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0
6、挂载RAID分区到指定目录,此处挂载到/mnt
[root@lab-236 ~]# mount /dev/md0 /mnt
通过df命令查看磁盘使用情况
[root@lab-236 ~]# df -h文件系统 容量 已用 可用 已用% 挂载点devtmpfs 471M 0 471M 0% /devtmpfs 488M 8.1M 480M 2% /runtmpfs 488M 0 488M 0% /sys/fs/cgroup/dev/mapper/centos-root 17G 4.5G 12G 28% //dev/md0 5.0G 33M 5.0G 1% /mnt #可以看到挂载成功
7、模拟磁盘故障,并修复磁盘RAID
首先我们RAID分区挂载的目录创建一个文件
[root@lab-236 ~]# echo \"hello world\" > /mnt/hello.txt
此时我们通过mdadm工具将一个分区(/dev/sdb1)设置为故障分区
[root@lab-236 ~]# mdadm /dev/md0 --fail /dev/sdb1mdadm: set /dev/sdb1 faulty in /dev/md0
然后我们在查看RAID的配置信息
[root@lab-236 ~]# mdadm --detail /dev/md0/dev/md0:Version : 1.2Creation Time : Fri Dec 11 16:46:33 2020Raid Level : raid1Array Size : 5237760 (5.00 GiB 5.36 GB)Used Dev Size : 5237760 (5.00 GiB 5.36 GB)Raid Devices : 2Total Devices : 2Persistence : Superblock is persistentUpdate Time : Fri Dec 11 17:05:32 2020State : clean, degradedActive Devices : 1Working Devices : 1Failed Devices : 1Spare Devices : 0Consistency Policy : resyncName : lab-236.com:0 (local to host lab-236.com)UUID : 52f68880:b4d10435:d271aaa2:261ed9cbEvents : 21Number Major Minor RaidDevice State- 0 0 0 removed1 8 18 1 active sync /dev/sdb20 8 17 - faulty /dev/sdb1 #此时/dev/sdb1状态时有缺陷的
我们可以看到/dev/sdb1的状态提示为faulty,是有缺陷的,存在故障。
查看运行情况
[root@lab-236 ~]# cat /proc/mdstatPersonalities : [raid1]md0 : active raid1 sdb2[1] sdb1[0](F)5237760 blocks super 1.2 [2/1] [_U] #发现超级块数量变成[2/1],缺失1个unused devices: <none>
8、此时我们查看挂载目录中文件是否正常
[root@lab-236 ~]# cat /mnt/hello.txthello world
我们发现文件正常,这就是RAID1的容错能力,一块磁盘出现故障,不影响数据文件的继续使用
9、接下来我们修复RAID
首先我们要将已经有缺陷的磁盘分区移除
[root@lab-236 ~]# mdadm /dev/md0 --remove /dev/sdb1mdadm: hot removed /dev/sdb1 from /dev/md0
然后我们将购买的新磁盘,添加到这个RAID中,如果实际物理环境中,直接将物理磁盘换上,添加即可,这里我们模拟环境。就当/dev/sdb1修复后重新添加回去
[root@lab-236 ~]# mdadm /dev/md0 --add /dev/sdb1mdadm: added /dev/sdb1
此时我们查看RAID信息,可以看到新加入的磁盘正在进行spare rebuilding RAID,这个过程需要时间,时间的长短与空间数据大小有关
[root@lab-236 ~]# mdadm --detail /dev/md0/dev/md0:Version : 1.2Creation Time : Fri Dec 11 16:46:33 2020Raid Level : raid1Array Size : 5237760 (5.00 GiB 5.36 GB)Used Dev Size : 5237760 (5.00 GiB 5.36 GB)Raid Devices : 2Total Devices : 2Persistence : Superblock is persistentUpdate Time : Fri Dec 11 17:24:08 2020State : clean, degraded, recoveringActive Devices : 1Working Devices : 2Failed Devices : 0Spare Devices : 1Consistency Policy : resyncRebuild Status : 57% completeName : lab-236.com:0 (local to host lab-236.com)UUID : 52f68880:b4d10435:d271aaa2:261ed9cbEvents : 41Number Major Minor RaidDevice State2 8 17 0 spare rebuilding /dev/sdb11 8 18 1 active sync /dev/sdb2
总结:
1、配置过程如果此前创建过软RAID,需要先将原来RAID设备停止
mdadm --stop /dev/md0
如果不停止会出现如下错误:
mdadm: cannot open /dev/sdb1: Device or resource busy
2、如果要重建软RAID,步骤应如下:
1、先卸载目录
2、停止RAID设备
3、移除RAID设备中的磁盘