7.1 RAID(独立冗余磁盘阵列)

目录

7.1.1 RAID 0

7.1.2 RAID 1

7.1.3 RAID 5

7.1.4 RAID 10

7.1.5 部署磁盘阵列:

7.1.6 损坏磁盘阵列及修复

7.1.7 磁盘阵列+备份盘


讲解了硬盘设备分区、格式化、挂载等知识后,本章将深入讲解各个常用 RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)技术方案的特性,并通过实际部署 RAID 10RAID 5+备份盘等方案来更直观地查看 RAID 的强大效果,以便进一步满足生产环境对硬盘设备的 IO 读写速度和数据冗余备份机制的需求。同时,考虑到用户可能会动态调整存储资源,本章还将介绍 LVMLogical Volume Manager,逻辑卷管理器)的部署、扩容、缩小、快照以及卸载删除的相关知识。相信学完本章内容后,便可以在企业级生产环境中灵活运用 RAID LVM 来满足对存储资源的高级管理需求了。


近年来, CPU 的处理性能保持着高速增长, Intel 公司在 2017 年最新发布的 i9-7980XE处理器芯片更是达到了 18 核心 36 线程。但与此同时,硬盘设备的性能提升却不是很大,因此逐渐成为当代计算机整体性能的瓶颈。而且,由于硬盘设备需要进行持续、频繁、大量的 IO 操作,相较于其他设备,其损坏几率也大幅增加,导致重要数据丢失的几率也随之增加。
1988 年,加利福尼亚大学伯克利分校首次提出并定义了 RAID 技术的概念。 RAID 技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。
任何事物都有它的两面性 RAID 技术确实具有非常好的数据冗余备份功能,但是它也相应地提高了成本支出。就像原本我们只有一个电话本,但是为了避免遗失,我们将联系人号码信息写成了两份,自然要为此多买一个电话本,这也就相应地提升了成本支出。RAID 技术的设计初衷是减少因为采购硬盘设备带来的费用支出,但是与数据本身的价值相比较,现代企业更看重的则是 RAID 技术所具备的冗余备份机制以及带来的硬盘吞吐量的提升。也就是说,RAID 不仅降低了硬盘设备损坏后丢失数据的几率,还提升了硬盘设备的读写速度,所以它在绝大多数运营商或大中型企业中得以广泛部署和应用。
出于成本和技术方面的考虑,需要针对不同的需求在数据可靠性及读写性能上作出权衡,制定出满足各自需求的不同方案。目前已有的 RAID 磁盘阵列的方案至少有十几种,接下来会详细讲解 RAID 0RAID 1RAID 5 RAID 10 4 种最常见的方案。

7.1.1 RAID 0

RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。通俗来说,RAID 0 技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。如图 7-1 所示,数据被分别写入到不同的硬盘设备中,即 disk1 disk2 硬盘设备会分别保存数据资料,最终实现分开写入、读取的效果。

 

7.1.2 RAID 1

尽管 RAID 0 技术提升了硬盘设备的读写速度,但是它是将数据依次写入到各个物理硬盘中,也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时,就需要用到 RAID 1 技术了。
在图 7-2 所示的 RAID 1 技术示意图中可以看到,它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。
RAID 1 技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降,从理论上来说,图 7-2 所示的硬盘空间的真实可用率只有 50% ,由三块硬盘设备组成的 RAID 1 磁盘阵列的可用率只有 33% 左右,以此类推。而且,由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。
那么,有没有一种 RAID 方案既考虑到了硬盘设备的读写速度和数据安全性,还兼顾了成本问题呢?实际上,单从数据安全和成本问题上来讲,就不可能在保持原有硬盘设备的利用率且还不增加新设备的情况下,能大幅提升数据的安全性。下面要讲解的 RAID 5 技术虽然在理论上兼顾了三者(读写速度、数据安全性、成本), 但实际上更像是对这三者的“相互妥协”。

7.1.3 RAID 5

如图 7-3 所示, RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5 磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命缺陷;图 7-3 parity 部分存放的就是数据的奇偶校验信息,换句话说,就是 RAID 5 技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID 这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。

7.1.4 RAID 10

鉴于 RAID 5 技术是因为硬盘设备的成本问题对读写速度和数据的安全性能而有了一定的妥协,但是大部分企业更在乎的是数据本身的价值而非硬盘价格,因此生产环境中主要使用 RAID 10 技 术。 顾名思义,RAID 10 技术是 RAID 1+RAID 0 技术的一个“组合体”。如图 7-4 所示,RAID 10 技术需要至少 4 块硬盘来组建,其中先分别两两制作成 RAID 1 磁盘阵列,以保证数据的安全性;然后再对两个 RAID 1 磁盘阵列实施 RAID 0 技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一组中的所有硬盘,那么最多可以损坏 50% 的硬盘设备而不丢失数据。由于 RAID 10 技术继承了 RAID 0 的高读写速度和 RAID1 的数据安全性,在不考虑成本的情况下 RAID 10 的性能都超过了 RAID 5,因此当前成为广泛使用的一种存储技术。

7.1.5 部署磁盘阵列:

在具备了上一章的硬盘设备管理基础之后,再来部署 RAID LVM 就变得十分轻松了。首先,需要在虚拟机中添加 4 块硬盘设备来制作一个 RAID 10 磁盘阵列。

这几块硬盘设备是模拟出来的,不需要特意去买几块真实的物理硬盘插到电脑上。需要注意的是,一定要记得在关闭系统之后,再在虚拟机中添加硬盘设备,否则可能会因为计算机架构的不同而导致虚拟机系统无法识别添加的硬盘设备。

mdadm 命令用于管理 Linux 系统中的软件 RAID 硬盘阵列,

格式为   “ mdadm   [模式]   <RAID设备名称>    [选项]    [成员设备名称”。

当前,生产环境中用到的服务器一般都配备 RAID 阵列卡,尽管服务器的价格越来越便宜,但是我们没有必要为了做一个实验而去单独购买一台服务器,而是可以会用 mdadm 命令在 Linux 系统中创建和管理软件 RAID 磁盘阵列,而且它涉及的理论知识的操作过程与生产环境中的完全一致。mdadm 命令的常用参数以及作用如表 7-1 所示。

接下来,使用 mdadm 命令创建 RAID 10,名称为“/dev/md10

RAID10需要4 + 2*N 个磁盘驱动器(N >=0), 而且只能使用其中一半或更小的磁盘用量, 例如 4 个 250G 的硬盘使用RAID10 阵列, 实际容量是 500G。

第6 章中讲到,udev Linux 系统内核中用来给硬件命名的服务,其命名规则也非常简单。我们可以通过命名规则猜测到第二个 SCSI 存储设备的名称会是/dev/sdb,然后依此类推。使用硬盘设备来部署 RAID 磁盘阵列很像是将几位同学组成一个班级,但总不能将班级命名为/dev/sdbcde 吧。尽管这样可以一眼开出它是由哪些元素组成的,但是并不利于我们的记忆和阅读。更何况如果我们是使用 1050100 个硬盘来部署 RAID 磁盘阵列呢?

此时,就需要使用 mdadm 中的参数了。其中,-C 参数代表创建一个 RAID 阵列卡-v 参数显示创建的过程同时在后面追加一个设备名称/dev/md0,这样/dev/md0 就是创建后的 RAID 磁盘阵列的名称;-a yes 参数代表自动创建设备文件-n 4 参数代表使用 4 块硬盘来部署这个 RAID 磁盘阵列而 -l 10 参数则代表 RAID 10 方案;最后再加上 4 块硬盘设备的名称就搞定了。其次,把制作好的 RAID 磁盘阵列格式化为 ext4 格式。

再次,创建挂载点然后把硬盘设备进行挂载操作。挂载成功后可看到可用空间为 20 GB。

 最后,查看/dev/md0 磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效。

查看磁盘阵列的详细信息:mdadm -D /dev/md10 

挂载信息写入到配置文件:echo "/dev/md10 /zhangxu ext4 defaults 0 0" >> /etc/fstab

[root@localhost ~]# mdadm -D /dev/md10
/dev/md10:
        Version : 1.2
  Creation Time : Thu Sep  2 18:00:19 2021
     Raid Level : raid10
     Array Size : 20954112 (19.98 GiB 21.46 GB)
  Used Dev Size : 10477056 (9.99 GiB 10.73 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Thu Sep  2 18:06:29 2021
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : localhost.localdomain:10  (local to host localhost.localdomain                                                                              )
           UUID : a57b1084:42c1e8dd:67036a0d:bc141dad
         Events : 19

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

7.1.6 损坏磁盘阵列及修复

之所以在生产环境中部署 RAID 10 磁盘阵列,是为了提高硬盘存储设备的读写速度及数据的安全性,但由于我们的硬盘设备是在虚拟机中模拟出来的,因此对读写速度的改善可能并不直观,因此讲解一下 RAID 磁盘阵列损坏后的处理方法,这样在步入运维岗位后遇到类似问题时,也可以轻松解决。
在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用 mdadm 命令将其移除,然后查看 RAID 磁盘阵列的状态,可以发现状态已经改变。
[root@localhost ~]# mdadm /dev/md10 -f /dev/sdc    #模拟设备损坏
mdadm: set /dev/sdc faulty in /dev/md10
[root@localhost ~]# mdadm -D /dev/md10            #查看磁盘阵列状态
/dev/md10:
        Version : 1.2
  Creation Time : Thu Sep  2 18:00:19 2021
     Raid Level : raid10
     Array Size : 20954112 (19.98 GiB 21.46 GB)
  Used Dev Size : 10477056 (9.99 GiB 10.73 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Thu Sep  2 18:16:26 2021
          State : clean, degraded
 Active Devices : 3
Working Devices : 3
 Failed Devices : 1            #发现已经坏掉一块
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : localhost.localdomain:10  (local to host localhost.localdomain                                                                              )
           UUID : a57b1084:42c1e8dd:67036a0d:bc141dad
         Events : 21

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

       0       8       32        -      faulty   /dev/sdc

RAID 10 级别的磁盘阵列中,当 RAID 1 磁盘阵列中存在一个故障盘时并不影响 RAID10 磁盘阵列的使用。当购买了新的硬盘设备后再使用 mdadm 命令来予以替换即可,在此期间我们可以在/RAID 目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到 RAID 磁盘阵列中。

新硬盘添加到 RAID 磁盘阵列使用 -a : mdadm /dev/md10 -a /dev/sdg

[root@localhost ~]# umount /dev/md10
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE   MOUNTPOINT
sda             8:0    0   30G  0 disk
├─sda1          8:1    0  500M  0 part   /boot
└─sda2          8:2    0 29.5G  0 part
  ├─rhel-root 253:0    0 26.5G  0 lvm    /
  └─rhel-swap 253:1    0    3G  0 lvm    [SWAP]
sdb             8:16   0   20G  0 disk
├─sdb1          8:17   0    4G  0 part
├─sdb2          8:18   0    4G  0 part
├─sdb3          8:19   0    4G  0 part
├─sdb4          8:20   0    1K  0 part
├─sdb5          8:21   0    4G  0 part
└─sdb6          8:22   0    2G  0 part
sdc             8:32   0   10G  0 disk
sdd             8:48   0   10G  0 disk
└─md10          9:10   0   20G  0 raid10
sde             8:64   0   10G  0 disk
└─md10          9:10   0   20G  0 raid10
sdf             8:80   0   10G  0 disk
└─md10          9:10   0   20G  0 raid10
sdg             8:96   0   10G  0 disk
sr0            11:0    1  3.5G  0 rom
[root@localhost ~]# mdadm /dev/md10 -a /dev/sdg
mdadm: added /dev/sdg
[root@localhost ~]# mdadm -D /dev/md10
/dev/md10:
        Version : 1.2
  Creation Time : Thu Sep  2 18:00:19 2021
     Raid Level : raid10
     Array Size : 20954112 (19.98 GiB 21.46 GB)
  Used Dev Size : 10477056 (9.99 GiB 10.73 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Thu Sep  2 18:26:07 2021
          State : clean, degraded, recovering
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : near=2
     Chunk Size : 512K

 Rebuild Status : 40% complete

           Name : localhost.localdomain:10  (local to host localhost.localdomain)
           UUID : a57b1084:42c1e8dd:67036a0d:bc141dad
         Events : 39

    Number   Major   Minor   RaidDevice State
       4       8       96        0      spare rebuilding   /dev/sdg
       1       8       48        1      active sync   /dev/sdd
       2       8       64        2      active sync   /dev/sde
       3       8       80        3      active sync   /dev/sdf

7.1.7 磁盘阵列+备份盘

RAID 10 磁盘阵列中最多允许 50% 的硬盘设备发生故障,但是存在这样一种极端情况,即同一 RAID 1 磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失。换句话说,在 RAID 10 磁盘阵列中,如果 RAID 1 中的某一块硬盘出现了故障,而我们正在前往修复的路上,恰巧该 RAID1 磁盘阵列中的另一块硬盘设备也出现故障,那么数据就被彻底丢失了。这种 RAID 1 磁盘阵列中的硬盘设备同时损坏的情况还真会发生。
在这样的情况下,该怎么办呢?其实,完全可以使用 RAID 备份盘技术来预防这类事故。该技术的核心理念就是准备一块足够大的硬盘,这块硬盘平时处于闲置状态,一旦 RAID 磁盘阵列中有硬盘出现故障后则会马上自动顶替上去。这样很棒吧!
为了避免多个实验之间相互发生冲突,我们需要保证每个实验的相对独立性,为此需要大家自行将虚拟机还原到初始状态。另外,由于刚才已经演示了 RAID 10 磁盘阵列的部署方法,我们现在来看一下 RAID 5 的部署效果。部署 RAID 5 磁盘阵列时,至少需要用到 3 块硬盘,还需要再加一块备份硬盘,所以总计需要在虚拟机中模拟 4 块硬盘设备,如图所示。
现在创建一个 RAID 5 磁盘阵列 + 备份盘。在下面的命令中,参数 -n 3 代表创建这个 RAID 5 磁盘阵列所需的硬盘数参数 -l 5 代表 RAID 的级别,而参数 -x 1 则代表有一块备份盘当看/dev/md5 (即 RAID 5 磁盘阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了。
[root@localhost ~]# mdadm -Cv /dev/md5 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954624K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Thu Sep  2 19:15:21 2021
     Raid Level : raid5
     Array Size : 41909248 (39.97 GiB 42.92 GB)
  Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Thu Sep  2 19:17:09 2021
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

           Name : localhost.localdomain:5  (local to host localhost.localdomain)
           UUID : 707f0735:1a5899d0:8e0a82d4:0d95b8ec
         Events : 22

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       3       8       64        -      spare   /dev/sde

将部署好的 RAID 5 磁盘阵列格式化为 ext4 文件格式,然后挂载到目录上,之后就可以使用了。

[root@localhost ~]# mkfs.ext4 /dev/md5
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477312 blocks
523865 blocks (5.00%) reserved for the super user
First data block=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: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[root@localhost ~]# echo "/dev/md5 /RAID5 ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# mkdir /RAID5
[root@localhost ~]# mount -a
最后验证效果!我们再次把硬盘设备 /dev/sdb 移出磁盘阵列,然后迅速查看 /dev/md0 磁盘阵列的状态,就会发现备份盘已经被自动顶替上去并开始了数据同步。 RAID 中的这种备份盘技术非常实用,可以在保证 RAID 磁盘阵列数据安全性的基础上进一步提高数据可靠性,所以,如果公司不差钱的话还是再买上一块备份盘以防万一。
[root@localhost ~]# mdadm /dev/md5 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Thu Sep  2 19:15:21 2021
     Raid Level : raid5
     Array Size : 41909248 (39.97 GiB 42.92 GB)
  Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Thu Sep  2 19:25:03 2021
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 5% complete

           Name : localhost.localdomain:5  (local to host localhost.localdomain)
           UUID : 707f0735:1a5899d0:8e0a82d4:0d95b8ec
         Events : 24

    Number   Major   Minor   RaidDevice State
       3       8       64        0      spare rebuilding   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty   /dev/sdb

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值