Linux系统管理:RAID磁盘阵列

前言:

RAID独立磁盘冗余阵列,是把想通过的数据存储在多个硬盘不同地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个磁盘增加了平均故障间隔时间,存储冗余数据也增加了容错。

RAID的级别:RAID技术的几种不同等级,分别可以提供不同速度,安全性和性价比。

用户可以根据实际情况选择适当的RAID级别来满足用户对存储空间的可行性、性能、容量的要求。

一、RAID磁盘阵列功能

1、通过对磁盘上的数据进行条带化,实现数据成块存取,减少磁盘的机械寻道时间,提高了数据存存取速度。

2、通过对一个阵列中的几块磁盘同时读取,减少了磁盘的机械寻道时间,提高数据存储速度。

3、通过镜像或者存储奇偶校验信息的方式,实现了对数据的冗余保护。

RAID磁盘阵列性能汇总
在这里插入图片描述

二、阵列卡简介:
1.1 阵列卡

阵列卡是用来实现RAID功能的办卡,通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等一系列零组件构成的

不同的RAID卡支持的RAID功能不同,例如支持RAID0、RAID1、RAID5、RAID10等。

RAID卡的接口类型

IDE接口、SCSI接口、SATA接口和SAS接口。

1.2 阵列卡的缓存

缓存时RAID卡与外部总线交换数据的场所,RAID卡先将数据传输到缓存,再由存储和外边数据总线交换数据

缓存的大小与速度时直接关系到RAID卡的实际传输速度的重要因素

不同的RAID卡出厂时配备的内存容量不同,一般为几兆

三、磁盘阵列配置实验
1.1 环境配置

查询是否已安装mdadm,如果未安装,使用yum install mdadm安装一下我们才可以使用此命令。

[root@localhost ~]# rpm -qa mdadm
mdadm-4.0-5.el7.x86_64

准备用于RAID阵列的分区:添加磁盘,这里我们使用虚拟机为Linux服务器添加3块SCSI磁盘,每块20G。

1、使用fdis工具对每块磁盘进行分区,每块磁盘只分一个主区,大小为20G,依次为:dev/sdb1、dev/sdc1、dev/sdd1

2、将其类型改为“fd”,对应“Linux raid autodetect”,表示支持用于RAID磁盘阵列。

3、配置完成后检查一下磁盘配置:

[root@localhost ~]# fdisk -l

磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a821e

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    12584959     6291456   83  Linux
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa3d90d8b

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   fd  Linux raid autodetect

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x492f2bc3

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41943039    20970496   fd  Linux raid autodetect

磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00283bf3

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048    41943039    20970496   fd  Linux raid autodetec
1.2 条带卷:RAID 0

RAID 0:连续以位或字节位单位分割数据,并行读/写于多个磁盘上,因此有很高的数据传输率,但它没有属于冗余,因此不能算真正的RAID结构

RAID 0只是单纯地提高性能,并没有位数据的可靠性提供保证,而且其中的一个磁盘损失将影响到所有数据

RAID 0不能应用于数据安全性要求高的场合
在这里插入图片描述

实验:

创建RAID 0,命令:mdadm -C(创建) -v(显示详细过程) /dev/md0(在dev目录下创建md0,定义RAID的设备文件所在的位置) -l0(级别RAID0) -n(构成RAID0的磁盘数量) /dev/sd[b-c]1 (包含sdb1与sdc1两块磁盘)。

示例:

[root@localhost ~]# mdadm -C -v /dev/md0 -l0 -n2 /dev/sd[b-c]1
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

查看配置详情,命令:mdadm -D /dev/md0

方法一示例:

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Nov  8 10:19:22 2019
        Raid Level : raid0
        Array Size : 41908224 (39.97 GiB 42.91 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Nov  8 10:19:22 2019
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : f65c4d7c:e94808ef:227e2d85:5c9251a1
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

方法二示例:

cat /proc/mdstat (查看的状态、过程信息)

[root@localhost ~]#  cat /proc/mdstat  (mdstat 状态)
Personalities : [raid0]  
md0 : active raid0 sdc1[1] sdb1[0]  (RAID0 由sdc1、sdb1组成)
      41908224 blocks super 1.2 512k chunks
      
unused devices: <none>

格式化、创建挂载点、挂载

格式化md0,命令:mkfs.xfs /dev/md0

示例:

[root@localhost ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0               isize=512    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

创建挂载点,示例:

[root@localhost ~]# mkdir /opt/md0
[root@localhost ~]# ls /opt
demo01  md0  one  rh

挂载,示例:

[root@localhost ~]# mount /dev/md0 /opt/md0/
[root@localhost ~]# df -h  (查询挂载信息)
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda2        20G  4.3G   16G   22% /
devtmpfs        898M     0  898M    0% /dev
tmpfs           912M     0  912M    0% /dev/shm
tmpfs           912M  9.1M  903M    1% /run
tmpfs           912M     0  912M    0% /sys/fs/cgroup
/dev/sda5        10G   37M   10G    1% /home
/dev/sda1       6.0G  174M  5.9G    3% /boot
tmpfs           183M  4.0K  183M    1% /run/user/42
tmpfs           183M   24K  183M    1% /run/user/0
/dev/sr0        4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/md0         40G   33M   40G    1% /opt/md0 (挂载点)
(最后显示的RAID0的挂载信息)
1.3 镜像卷 RAID 1

RAID 1:通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据,当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。

RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。
在这里插入图片描述

实验:

我们先将虚拟机中CentOS2恢复快照,还原状态。

创建RAID 1,命令:mdadm -C -v /dev/md1 -l1 -n2 /dev/sd[b…c] -x1(备用盘)

[root@localhost ~]# mdadm -C -v /dev/md1 -l1 -n2 /dev/sd[b-c]1 -x1 /dev/sdd1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: size set to 20954112K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

查看过程信息:cat /proc/mdstat

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1] 
md1 : active raid1 sdd1[2](S) sdc1[1] sdb1[0]
      20954112 blocks super 1.2 [2/2] [UU]
      [=====>...............]  resync = 25.7% (5401856/20954112) finish=1.2min speed=207763K/sec
      
unused devices: <none>
[root@localhost ~]# 

稍等一会,同步完成:

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1] 
md1 : active raid1 sdd1[2](S) sdc1[1] sdb1[0]
      20954112 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

格式化:mkfs.xfs /dev/md1 示例:

[root@localhost ~]# mkfs.xfs /dev/md1 
meta-data=/dev/md1               isize=512    agcount=4, agsize=1309632 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5238528, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# 

创建挂载点:

[root@localhost ~]# mkdir /opt/md1

执行挂载:

[root@localhost ~]# mount /dev/md1 /opt/md1/

查看挂载信息:

[root@localhost ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  3.5G   17G   18% /
devtmpfs       devtmpfs  898M     0  898M    0% /dev
tmpfs          tmpfs     912M     0  912M    0% /dev/shm
tmpfs          tmpfs     912M  9.1M  903M    1% /run
tmpfs          tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5      xfs        10G   37M   10G    1% /home
/dev/sda1      xfs       6.0G  174M  5.9G    3% /boot
tmpfs          tmpfs     183M  4.0K  183M    1% /run/user/42
tmpfs          tmpfs     183M   20K  183M    1% /run/user/0
/dev/sr0       iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/md1       xfs        20G   33M   20G    1% /opt/md1

验证备用盘功能:

我们先查看RAID 1详细信息,示例:

[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Fri Nov  8 12:04:15 2019
        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 : Fri Nov  8 12:07:24 2019
             State : active 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : 150069e3:96415219:fb07675e:16408e04
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

       2       8       49        -      spare   /dev/sdd1
[root@localhost ~]# 

删除RAID 1中sdd1磁盘,测试备用盘是否会顶替使用。

命令:mdadm -f /dev/md1 /dev/sdb1

[root@localhost ~]# mdadm -f /dev/md1 /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md1

此时我们可以查看同步信息:

cat /proc/mdstat

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1] 
md1 : active raid1 sdd1[2] sdc1[1] sdb1[0](F)
      20954112 blocks super 1.2 [2/1] [_U]
      [====>................]  recovery = 20.0% (4200320/20954112) finish=1.3min speed=210016K/sec
      
unused devices: <none>

查看RAID 1详细信息:

[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Fri Nov  8 12:04:15 2019
        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 : Fri Nov  8 12:11:45 2019
             State : active, degraded, recovering 
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 1

Consistency Policy : resync

    Rebuild Status : 43% complete

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : 150069e3:96415219:fb07675e:16408e04
            Events : 27

    Number   Major   Minor   RaidDevice State
       2       8       49        0      spare rebuilding   /dev/sdd1
       1       8       33        1      active sync   /dev/sdc1
(/dev/sdd1 以顶替上去,并开始同步数据)
       0       8       17        -      faulty   /dev/sdb1
(sdb1已删除)

稍等一会,我们的同步已完成:

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1] 
md1 : active raid1 sdd1[2] sdc1[1] sdb1[0](F)
      20954112 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
1.4 RAID 5 (企业中常用)

RAID 5由N>=3块磁盘组成阵列,一份数据产生N-1个条带,同时还有1份校验数据,共N-1个条带,同时还有1份校验数据,共N份数据在N块盘上循环均衡存储N块盘同时读写,读性能很高,但由于有校验机制的问题,写性能相对不高。
在这里插入图片描述
环境:

还原虚拟机CentOS快照,添加4块磁盘,分区,将格式设置为fd。

创建RAID 5:

[root@localhost ~]# mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[b-d]1 -x1 /dev/sde1 (设置sde1做为备用盘)
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
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 : Fri Nov  8 12:21:14 2019
        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 : Fri Nov  8 12:22:59 2019
             State : clean 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 655bb595:befe6074:9e5fc8d6:ccb1e748
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1

       3       8       65        -      spare   /dev/sde1

验证备用盘功能:

删除sdb1磁盘,查看同步信息:

[root@localhost ~]# mdadm -f /dev/md5 /dev/sdb1  (删除sdb1磁盘)
mdadm: set /dev/sdb1 faulty in /dev/md5

等待同步,然后查询详细信息:

[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Fri Nov  8 12:21:14 2019
        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 : Fri Nov  8 19:56:18 2019
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 655bb595:befe6074:9e5fc8d6:ccb1e748
            Events : 38

    Number   Major   Minor   RaidDevice State
       3       8       65        0      active sync   /dev/sde1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1
(sde1磁盘已顶替上来并为活跃状态)
       0       8       17        -      faulty   /dev/sdb1
(sdb1磁盘已失效)
1.5 RAID 6 (企业中常用)

RAID 6 采用的是双重校验技术,在RAID5 的技术上增加了第二个独立的奇偶校验信息块,两个独立的奇偶系统使用不用的算法,即使两块磁盘同时失效也不会影响数据的使用,RAID6 至少需要4块磁盘组成。

在这里插入图片描述

1.6 RAID 1+0(企业中较常用)

RAID1+0 就是RAID1 和RAID0的组合,先做镜像1,再做条带0 ,它兼顾了RAID1 的容错能力与RAID0 的条带化读写数据的优点,性能好,可靠性高,属于混合型RAID。

实验:

还原虚拟机CentOS快照,添加4块磁盘,分区,将格式设置为fd。

我们的实验思路是,利用四块磁盘,制作2个RAID 1,每个RAID 1个包含2个磁盘,然后再将这两个RAID 1作为基础制作RAID 0。
在这里插入图片描述

制作两块RAID1示例:
在这里插入图片描述

以两个RAID 1为基础制作RAID 0,示例:

[root@localhost dev]# mdadm -C -v /dev/md10 -l0 -n2 /dev/md1 /dev/md2
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.

查看RAID详细信息:

[root@localhost dev]# mdadm -D /dev/md10
/dev/md10:
           Version : 1.2
     Creation Time : Fri Nov  8 22:35:43 2019
        Raid Level : raid0
        Array Size : 41875456 (39.94 GiB 42.88 GB)  (容量大小为两个RAID 1容量之和:40G)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Nov  8 22:35:43 2019
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : localhost.localdomain:10  (local to host localhost.localdomain)
              UUID : ff432631:45a27264:d53d7c0f:da75a7d6
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       9        1        0      active sync   /dev/md/01
       1       9        2        1      active sync   /dev/md/02
(两块RAID 1均处于活跃状态)

格式化RAID 10,最后在/opt目录下创建md10子目录。同时将RAID 10挂载到该目录上,示例:
在这里插入图片描述

总结:

本篇博客简要介绍了RAID0、RAID1、RAID5、RAID6、RAID10的特性,并通过实验写明的操作过程,同时设置、验证了磁盘备用的功能。更多的组合搭配方法可以由我们之后自己进行实验去验证。

可以通过Shell设置的磁盘阵列我们一般称之为软RAID,硬RAID是需要阵列卡,阵列卡的类型,在之后也会给大家进行介绍。

发布了48 篇原创文章 · 获赞 46 · 访问量 6628

猜你喜欢

转载自blog.csdn.net/weixin_45726050/article/details/102981435