Loading

RAID技术与应用以及mdadm工具的使用

RAID的概念解读

RAID的全称(Redundant Array of inexpensive Disks廉价磁盘冗余阵列),而在我们的现实生活之中我们会发现磁盘并不廉价,所以我们现在也称之为独立磁盘冗余阵列。

RAID的优势

  • 提高IO能力,磁盘并行读写
  • 提高耐用性,磁盘冗余算法来实现

常用RAID级别

Raid技术主要包含Raid 0~Raid 50等数个级别,它们的侧重点各不相同,常见的级别有RAID0 1 2 3 4 5 6 7 (及10、01、50等组合级别)。

image-20201029090051040

RAID 0 简介

RAID0技术把多块(至少两块)物理硬盘设备通过软件或硬件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样,在最理想的情况下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。

虽然,RAID0技术能够有效的提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。如下图,数据被分别写入到不同的硬盘设备中,即disk1、disk2和disk3硬盘设备会被分别保存数据资料,最终实现提升读取、写入速度的效果。

image-20201029091833084

RAID 1 简介

尽管RAID 0技术提升了硬盘设备的读写速度,但是它将数据一次写入各个物理硬盘中,也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时,就需要用到RAID1技术了。

RAID 1技术示意图如下图,它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。

RAID1技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率下降了一半。从理论上说,如下图所示的应哦按空间的真实可用率只有50%,由三块硬盘设备组成的RAID1磁盘阵列的可用率只有33%左右,以此类推。由于需要把数据同时写入两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。

image-20201029092045525

RAID 5 简介

RAID 5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块磁盘设备中,而是存储到除自身以外的其他每一块设备上,这样的好处是其中任何一个设备损坏后不至于出现致命缺陷。

下图“DP”、“CP”等部分存放的就是数据的奇偶校验信息,换句话说,就是RAID 5技术实际上没有备份磁盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID 5这样的技术特性“妥协”的兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。

image-20201029092233108

RAID 10 简介

鉴于RAID 5技术是因为磁盘设备的成本问题对读写速度和数据的安全性能而有了一定的妥协,但是在企业里更在乎的还是数据本身的价值而非硬盘的价格,因此在生产环境中推荐使用RAID 10技术。

RAID 10即RAID 0 + RAID 1的一个组合体。如下图所示,RAID 10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对若干个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。

image-20201029092825402

这样从理论上讲,只要坏的不是同一组中的所有磁盘,那么最多可以损坏50%的硬盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高速写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能都超过了RAID 5,因此当前成为广泛使用的一种存储技术。

CentOS 虚拟机 RAID 实验

写在前面:mdadm是Linux下用于创建和管理软件RAID的命令,是一个模式化命令。但由于现在服务器一般都带有RAID阵列卡,并且RAID阵列卡也很廉价,且由于软件RAID的自身缺陷(不能用作启动分区、使用CPU实现,降低CPU利用率),因此在生产环境下并不适用。但为了学习和了解RAID原理和管理,因此仍然进行一个详细的讲解。

实验环境说明:

物理机配置 AMD Ryzen 5 3550H RAM:16GB

虚拟机工具 VMWare WorkStation Pro 14.1.8 build-14921873

Linux版本 CentOS Linux release 7.3.1611 (Core) 2C4G 配置

远程连接工具 FinalShell 3.7.6

软RAID工具 mdadm - v4.1 - 2018-10-01

实验内容:下面实验将演示使用5块硬盘(5块磁盘,3块做RAID5,2块做备份),搭建RAID5磁盘阵列。

在虚拟机开机前,为虚拟机添加5块SCSI类型的硬盘。

image-20201029165919966

使用命令lsblk列出所有的块设备,可以看到新添加的5块硬盘。

image-20201029170148547

接下来就可以使用mdadm命令创建RAID了,mdadm命令创建RAID的用法为mdadm -C -x [热备盘数量] -n [主RAID磁盘数量] -l [RAID等级] {块设备名称……}

[root@centos7-standalone ~]# mdadm -C /dev/md1 -x 2 -n 3 -l 5 /dev/sd{d,e,f,g,h}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

以上,RAID 5就创建好了,接下来只需要格式化、挂载即可正常使用了。

[root@centos7-standalone ~]# mkfs.ext4 /dev/md1 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477056 blocks
523852 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   

[root@centos7-standalone ~]# mkdir /mnt/raid5
[root@centos7-standalone ~]# mount /dev/md1 /mnt/raid5
[root@centos7-standalone ~]# df -h
文件系统             容量  已用  可用 已用% 挂载点
devtmpfs             1.9G     0  1.9G    0% /dev
tmpfs                1.9G     0  1.9G    0% /dev/shm
tmpfs                1.9G   12M  1.9G    1% /run
tmpfs                1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda2             10G  7.6G  2.5G   76% /
/dev/sda1            297M  125M  173M   42% /boot
/dev/mapper/vg-test   16G   45M   15G    1% /mnt/myvg
tmpfs                378M     0  378M    0% /run/user/0
/dev/md1              40G   49M   38G    1% /mnt/raid5

可以看到RAID 5容量为40GB。因为用于RAID 5的磁盘只有3块,其中一块磁盘用于存放奇偶校验信息,利用率为\(\frac{n-1}{n},其中n为RAID 5磁盘数\)

使用命令mdadm --detail /dev/md1 可以查看阵列的详细信息。

[root@centos7-standalone ~]# mdadm --detail /dev/md1
/dev/md1:                                             # RAID的设备文件名
           Version : 1.2
     Creation Time : Thu Oct 29 17:07:48 2020         # 创建时间
        Raid Level : raid5                            # RAID等级
        Array Size : 41908224 (39.97 GiB 42.91 GB)    # 整组RAID的可用容量
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)    # 每个磁盘的容量
      Raid Devices : 3                                # 组成RAID的磁盘数量
     Total Devices : 5                                # 包括热备盘的总磁盘数量
       Persistence : Superblock is persistent

       Update Time : Thu Oct 29 17:30:44 2020
             State : clean                            # 目前磁盘阵列的使用情况
    Active Devices : 3                                # 启动的设备数量
   Working Devices : 5                                # 用于此阵列的设备数
    Failed Devices : 0                                # 损坏的设备数
     Spare Devices : 2                                # 热备盘数量

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : centos7-standalone:1  (local to host centos7-standalone)
              UUID : 08046432:852aef8f:35f9b279:a77270e2
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       48        0      active sync   /dev/sdd
       1       8       64        1      active sync   /dev/sde
       5       8       80        2      active sync   /dev/sdf

       3       8       96        -      spare   /dev/sdg
       4       8      112        -      spare   /dev/sdh

下面我们简单模拟一下RAID硬盘损坏错误并救援

[root@centos7-standalone ~]# cd /mnt/raid5
[root@centos7-standalone raid5]# echo "It's a test file." >> testfile.txt    # 在RAID目录下加一个文件
[root@centos7-standalone raid5]# mdadm --manage /dev/md1 --fail /dev/sdd     # 让其中一块RAID数据盘失效
mdadm: set /dev/sdd faulty in /dev/md1
[root@centos7-standalone raid5]# mdadm --detail /dev/md1                     # 查看RAID详细信息
/dev/md1:
           Version : 1.2
     Creation Time : Thu Oct 29 17:07:48 2020
        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 : 5
       Persistence : Superblock is persistent

       Update Time : Fri Oct 30 10:24:51 2020
             State : clean, degraded, recovering     # 恢复状态
    Active Devices : 2                               # 此时的可用设备数减少一块
   Working Devices : 4
    Failed Devices : 1
     Spare Devices : 2

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 17% complete                     # 可以看到系统正在为重建数据

              Name : centos7-standalone:1  (local to host centos7-standalone)
              UUID : 08046432:852aef8f:35f9b279:a77270e2
            Events : 22

    Number   Major   Minor   RaidDevice State
       4       8      112        0      spare rebuilding   /dev/sdh
       1       8       64        1      active sync   /dev/sde
       5       8       80        2      active sync   /dev/sdf

       0       8       48        -      faulty   /dev/sdd
       3       8       96        -      spare   /dev/sdg

等待一段时间后再次查看,可以看到数据已恢复完成。

[root@centos7-standalone raid5]# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Thu Oct 29 17:07:48 2020
        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 : 5
       Persistence : Superblock is persistent

       Update Time : Fri Oct 30 10:26:23 2020
             State : clean 
    Active Devices : 3                                # RAID设备数恢复
   Working Devices : 4RAID
    Failed Devices : 1
     Spare Devices : 1                                # 热备盘数量减少一块

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : centos7-standalone:1  (local to host centos7-standalone)
              UUID : 08046432:852aef8f:35f9b279:a77270e2
            Events : 39

    Number   Major   Minor   RaidDevice State
       4       8      112        0      active sync   /dev/sdh
       1       8       64        1      active sync   /dev/sde
       5       8       80        2      active sync   /dev/sdf

       0       8       48        -      faulty   /dev/sdd
       3       8       96        -      spare   /dev/sdg

恢复完成后,可以看到数据仍然存在。

image-20201030103050033

但是如果一次性损坏两块磁盘,或是在恢复过程中,阵列中又有磁盘损坏,那么RAID 5阵列将无法工作。

[root@centos7-standalone raid5]# mdadm --manage /dev/md1 --fail /dev/sde
mdadm: set /dev/sde faulty in /dev/md1
[root@centos7-standalone raid5]# mdadm --manage /dev/md1 --fail /dev/sdf
mdadm: set /dev/sdf faulty in /dev/md1

[root@centos7-standalone raid5]# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Thu Oct 29 17:07:48 2020
        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 : 5
       Persistence : Superblock is persistent

       Update Time : Fri Oct 30 10:31:43 2020
             State : clean, FAILED 
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 3
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : centos7-standalone:1  (local to host centos7-standalone)
              UUID : 08046432:852aef8f:35f9b279:a77270e2
            Events : 46

    Number   Major   Minor   RaidDevice State
       4       8      112        0      active sync   /dev/sdh
       -       0        0        1      removed
       -       0        0        2      removed

       0       8       48        -      faulty   /dev/sdd
       1       8       64        -      faulty   /dev/sde
       3       8       96        -      spare   /dev/sdg
       5       8       80        -      faulty   /dev/sdf

在生产环境中,即使有热备磁盘,热备磁盘也是在RAID 5坏了一块磁盘的情况下,根据那两块好的磁盘来恢复数据,如果同时坏两块,那你的热备盘也没有用。恢复数据也是要时间的,如果在恢复的过程中,又坏了一块磁盘,那数据的恢复也就中断了。

恢复时间主要与磁盘性能、阵列性能有关,在阵列工作繁忙的时候,用于数据恢复的空闲IO也会减少,恢复时间也会相应延长。

posted @ 2020-10-30 10:39  上海井盖王  阅读(490)  评论(0)    收藏  举报