Raid(Redundant Arrays of Independent Disks)独立磁盘冗余阵列

一、raid磁盘阵列介绍

磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。另外它还能够利用同位检查的功能,当数组中任意一个硬盘发生故障时,仍可读出数据。在数据重构时,可将数据经计算后重新置入新硬盘中。

RAID 技术作为高性能、高可靠的存储技术,已经得到了非常广泛的应用。 RAID 主要利用数据条带、镜像和数据校验技术来获取高性能、可靠性、容错能力和扩展性,根据运用或组合运用这三种技术的策略和架构,可以把 RAID 分为不同的等级,以满足不同数据应用的需求。

二、Raid分类

目前RAID主要分为软RAID、硬RAID以及软硬混合RAID三种raid类型。软RAID所有功能都是由操作系统和CPU来完成,目前的操作系统中基本上有含有软raid支持,通过在磁盘设备驱动程序上添加一个软件层,提供一个物理驱动器与逻辑驱动器之间的抽象层。目前,操作系统支持的最常见的RAID等级有RAID0、RAID1、RAID10、RAID01和RAID5等,他没有独立的RAID控制/处理芯片和I/O处理芯片,效率低下,软RAID由操作系统来实现,因此系统所在分区不能作为RAID的逻辑成员磁盘,软RAID不能保护系统盘,对于部分操作系统而言,RAID的配置信息保存在系统信息中,而不是单独以文件形式保存在磁盘上。这样当系统意外崩溃而需要重新安装时,RAID信息就会丢失。
硬RAID拥有自己的RAID控制处理与I/O处理芯片,甚至还有阵列缓冲,对CPU的占用率和整体性能是三类实现中最优的,但实现成本也最高的。硬RAID通常都支持热交换技术,在系统运行下更换故障磁盘。

硬RAID包含RAID卡和主板上集成的RAID芯片,服务器平台一般都会采用RAID卡。RAID 卡由RAID 核心处理芯片(RAID 卡上的CPU)、端口、缓存和电池4部分组成。其中,端口是指 RAID 卡支持的磁盘接口类型,如SCSI 、 SATA 、 SAS 等接口。
Raid技术是一种工业技术标准,每个厂商对于Raid级别的定义也是不同的。在之前的某些文章中定义了RAID1 ~ RAID5原始RAID等级,后来又扩展了RAID0和RAID6。近年来,存储厂商不断推出诸如RAID7、RAID10/01、RAID50、RAID53、RAID100等RAID等级,但这些并无统一的标准。目前业界公认的标准是RAID0 ~ RAID5,除RAID2外的四个等级被定为工业标准,而在实际应用领域中使用最多的RAID等级是RAID0、RAID1、RAID3、RAID5、RAID6 和RAID10。

三、等级介绍

1. raid0(无冗错的数据条带)

RAID0 是一种简单的、无数据校验的数据条带化技术。实际意义上来说它不是一种真正的 RAID,因为它并不提供任何形式的冗余策略。RAID0 将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。由于可以并发执行 I/O 操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0 的性能在所有 RAID 等级中是最高的。

RAID0成本比较低但是具有高读写性能优势,存储空间利用率能够达到百分之百等其他优点,但是它不提供数据冗余保护,如果发生数据损坏,将无法恢复。所以RAID0一般适用于对性能要求严格但对数据安全性低要求的文件,如视频、音频存储等。

2. Raid1(无校验的相互镜像)

RAID1被称作镜像,它将数据完全一致地分别写到工作磁盘和镜像磁盘上,它的磁盘空间利用率为50%。RAID1等级在数据写入时,响应时间会有延迟,但是读数据的时候没有影响。RAID1提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。

RAID1与RAID0恰好相反,是为了增强数据安全性使两块磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便。RAID1拥有完全容错的能力,但实现成本比较高。RAID1 应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。

3. Raid5(带分散校验的数据条带)

Raid5是目前组常见的阵列等级,它的原理与RAID4 相似,区别在于校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此,RAID5不存在并发写操作时的校验盘性能的问题。另外,RAID5还具备很好的扩展性。当阵列磁盘数量增加时,并行操作量的能力也随之增长。

除此之外还有一些等级被称之为Raid组合等级也就是类似于raid01/10/00/100/30等等,但目前得到实际应用广泛的还是RAID01 和RAID10两个等级,一般来说组合实现的等级成本价格都非常的昂贵,一般只在特定的场合下进行使用。

4. raid00

简单地说,RAID00 是由多个RAID0成员组成的高级RAID0。它与RAID0之间的区别在于,RAID0阵列替换了原先的成员磁盘。可以把RAID00理解为两层条带化结构的磁盘阵列,即对条带再进行条带化。这种阵列可以提供更大的存储容量、更高的I/O性能。

5. RAID01和RAID10

一般人认为这两种阵列级别都是相同的,实际上则不然,RAID01 是先做条带化再作镜像,本质是对物理磁盘实现镜像,而RAID10 是先做镜像再作条带化,是对虚拟磁盘实现镜像。相同的配置下,通常RAID01比RAID10具有更好的容错能力,RAID01兼备了RAID0和 RAID1的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。RAID01的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。RAID01和RAID10内部都含有RAID1模式,因此整体磁盘利用率均仅为50%。

四、软Raid制作

1.创建raid0

创建raid 0
利用磁盘分区新建2个磁盘分区,每个大小为20GB。用这2个20 GB的分区来模拟1个40 GB的硬盘。

  1. [root@localhost ~]#lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. sda 8:0 0 20G 0 disk
  4. ├─sda1 8:1 0 500M 0 part /boot
  5. └─sda2 8:2 0 19.5G 0 part
  6. ├─centos-root 253:0 0 17.5G 0 lvm /
  7. └─centos-swap 253:1 0 2G 0 lvm [SWAP]
  8. sdb 8:16 0 20G 0 disk
  9. sdc 8:32 0 20G 0 disk
  10. sr0 11:0 1 4G 0 rom

配置本地YUM安装源,将提供的mdadm_yum文件夹上传至/opt目录,示例代码如下:

[root@localhost ~]# mv /etc/yum.repos.d/* /media/
[root@localhost ~]# vi /etc/yum.repos.d/yum.repo
[mdadm]
name=mdadm
baseurl=file:///opt/mdadm_yum/
gpgcheck=0
enabled=1

安装工具mdadm,使用已有YUM源进行安装,命令如下:

[root@localhost ~]# yum install -y mdadm

创建一个RAID 0设备:这里使用/dev/sdb1 /dev/sdb2
将/dev/sdb1 /dev/sdb2建立RAID等级为RAID 0的md0(设备名)。

[root@localhost ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2 
mdadm: chunk size defaults to 512K
mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

命令解析:
-C v:创建设备,并显示信息。
-l 0:RAID的等级为RAID 0。
-n 2:创建RAID的设备为2块。
查看系统上的RAID,命令及返回结果如下。

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid0] 
md0 : active raid0 sdc[1] sdb[0]
      41908224 blocks super 1.2 512k chunks      
unused devices: <none>

查看RAID详细信息,命令及返回结果如下。

[root@localhost ~]# mdadm -Ds
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=35792eb3:51f58189:44cef502:cdcee441
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Sat Oct  5 10:21:41 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 : Sat Oct  5 10:21:41 2019
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K
        Consistency Policy : unknown

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 35792eb3:51f58189:44cef502:cdcee441
            Events : 0

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

生成配置文件mdadm.conf,命令如下。

[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf

对创建的RAID进行文件系统创建并挂载,命令如下。

[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf
[root@localhost ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0               isize=256    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
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 /raid0/
[root@localhost ~]# mount /dev/md0 /raid0/
[root@localhost ~]# df -Th /raid0/
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/md0       xfs    40G   33M   40G   1% /raid0

设置成开机自动挂载,命令如下。

[root@localhost ~]# blkid /dev/md0 
/dev/md0: UUID="8eafdcb6-d46a-430a-8004-d58a68dc0751" TYPE="xfs" 
[root@localhost ~]# echo "UUID=8eafdcb6-d46a-430a-8004-d58a68dc0751 /raid0 xfs defaults 0 0" >> /etc/fstab

删除RAID操作,命令如下:

[root@localhost ~]# umount /raid0/
[root@localhost ~]# mdadm -S /dev/md0
[root@localhost ~]# rm -rf /etc/mdadm.conf
[root@localhost ~]# rm -rf /raid0/
[root@localhost ~]# mdadm --zero-superblock /dev/sdb[1-2]
[root@localhost ~]# vi /etc/fstab
UUID=8eafdcb6-d46a-430a-8004-d58a68dc0751 /raid0 xfs defaults 0 0  //删除此行

2.创建Raid5

(1)raid 5运维操作
利用磁盘分区新建4个磁盘分区,每个大小为5 GB。用3个5GB的分区来模拟raid 5,加一个热备盘。

[root@localhost ~]# mdadm -Cv /dev/md5 -l5 -n3 /dev/sdb[1-3] --spare-devices=1 /dev/sdb4 
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Fail create md5 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.

查看RAID的详细信息,命令如下。

[root@localhost ~]# mdadm -D /dev/md5 
/dev/md5:
           Version : 1.2
     Creation Time : Sat Oct  5 13:17:41 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 : Sat Oct  5 13:19:27 2019
             State : clean 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : unknown

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : f51467bd:1199242b:bcb73c7c:160d523a
            Events : 18

    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

(2)模拟硬盘故障

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

查看RAID的详细信息,命令如下。

[root@localhost ~]# mdadm -D /dev/md5          
/dev/md5:
           Version : 1.2
     Creation Time : Sat Oct  5 13:17:41 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 : Sat Oct  5 13:28:54 2019
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : unknown

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : f51467bd:1199242b:bcb73c7c:160d523a
            Events : 37

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

       0       8       16        -      faulty   /dev/sdb

从以上结果可以发现原来的热备盘/dev/sde正在参与RAID 5的重建,而原来的/dev/sdb变成了坏盘。
热移除故障盘,命令如下:

[root@localhost ~]# mdadm -r /dev/md5 /dev/sdb1 
mdadm: hot removed /dev/sdb1 from /dev/md5

查看RAID的详细信息,命令如下:

[root@localhost ~]# mdadm -D /dev/md5          
/dev/md5:
           Version : 1.2
     Creation Time : Sat Oct  5 13:17:41 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 : 3
       Persistence : Superblock is persistent

       Update Time : Sat Oct  5 13:35:54 2019
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : unknown

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : f51467bd:1199242b:bcb73c7c:160d523a
            Events : 38

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

格式化RAID并进行挂载,命令如下:

[root@localhost ~]# mkfs.xfs /dev/md5 
meta-data=/dev/md5               isize=256    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
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 ~]# mount /dev/md5 /mnt/
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   18G  906M   17G   6% /
devtmpfs                 903M     0  903M   0% /dev
tmpfs                    913M     0  913M   0% /dev/shm
tmpfs                    913M  8.6M  904M   1% /run
tmpfs                    913M     0  913M   0% /sys/fs/cgroup
/dev/sda1                497M  125M  373M  25% /boot
tmpfs                    183M     0  183M   0% /run/user/0
/dev/md5                  40G   33M   40G   1% /mnt