Linux独立硬盘冗余阵列(RAID)

223 阅读5分钟

1.什么是RAID

1.1 RAID介绍

  • 独立硬盘冗余阵列RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列
  • 利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或数据冗余,或是两者同时提升。
  • RAID 层级不同,数据会以多种模式分散于各个硬盘,RAID 层级的命名会以 RAID 开头并带数字,例如:RAID 0、RAID 1、RAID 5、RAID 6、RAID 10。每种等级都有其理论上的优缺点,不同的等级在两个目标间获取平衡,分别是(增加数据可靠性以及增加存储器群)读写性能

1.2 RAID功能实现

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

1.3 RAID实现的方式

  • 外接式磁盘阵列:通过扩展卡提供适配能力
  • 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
  • 软件RAID:通过OS实现,比如:群晖的NAS

2. RAID磁盘阵列详解

2.1 RAID 0(条带化存储)

image.png

  • 因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。
  • RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
  • 读、写性能提升可用空间:N min(S1,S2,...)。
  • 无容错能力
  • 最少磁盘数:1+

2.2 RAID 1(镜像存储)

image.png

  • 也称为镜像, 两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。
  • 另外写入速度有微小的降低。
  • 读性能提升、写性能略有下降
  • 可用空间:1 min(S1,S2,...)
  • 磁盘利用率 50%有冗余能力
  • 最少磁盘数:2n

2.3 RAID 5

image.png

  • 读、写性能提升
  • 可用空间:(N-1) min(S1,S2,...)
  • 有容错能力:允许最多1块磁盘损坏
  • 最少磁盘数:3, 3+

2.4 RAID 1+0(先做镜像,再做条带)

image.png

  • 读、写性能提升
  • 可用空间:N min(S1,S2,...)/2
  • 有容错能力:每组镜像最多只能坏一块
  • 最少磁盘数:4, 4+

3. 配置RAID

3.1实现软raid

3.1.1 需求

  • 为Linux服务器添加4块SCSI硬盘
  • 使用mdadm软件包,构建RAID5磁盘阵列,提磁盘存储的性能和可靠性

3.1.2 实验过程

  • 检查是否安装mdadm,准备用于RAID阵列的分区

如果没有安装,可以使用 yum -y install mdadm 安装mdadm工具:为软RAID提供管理界面,为空余磁盘添加冗余,结合内核中的md(multi devices)RAID设备可命名 为/dev/md0、/dev/md1、/dev/md2、/dev/md3等

mdadm [mode] <raiddevice> [options] <component-devices>
命令 模式 阵列名字(md0) 选项 选择/dev/sd[b-e]
mdadm -Cv /dev/md0 -l 10(raid) -n 4 -x 1 /dev/sd[bcde]
常用选项说明

模式:
创建:-C
装配:-A
监控:-F
管理:-f, -r, -a

<raiddevice>: /dev/md#
<component-devices>: 任意块设备

创建模式:
-n #: 使用#个块设备来创建此RAID
-l #:指明要创建的RAID的级别 0 1 5 10
-c CHUNK_SIZE: 指明块大小,单位k
-x #: 指明空闲盘的个数 热备 盘 -x 1 /dev/sd#
-D:显示raid的详细信息

mdadm -D /dev/md#(软raid名字)  ##显示详细信息

管理模式:
-f: 标记指定磁盘为损坏
-a: 添加磁盘
-r: 移除磁盘
观察md的状态: cat /proc/mdstat
  • 为Linux服务器添加4块SCSI硬盘
  • 实现配置
[root@localhost ~]# mdadm -C /dev/md0 -l 5 -n 3 -x 1 /dev/sd[b-e]  '##创建md0指定创建等级5使用3个硬盘,1个空闲硬盘'
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

[root@localhost ~]# mkfs.xfs /dev/md0 '##建立xfs类型的文件系统'
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 ~]# mdadm -D /dev/md0   ##显示详细信息
/dev/md0:
           Version : 1.2
     Creation Time : Thu Aug  4 10:51:30 2022
        Raid Level : raid5
        Array Size : 41910272 (39.97 GiB 42.92 GB)
     Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Thu Aug  4 10:52:29 2022
             State : clean, degraded, recovering 
    Active Devices : 2
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 2

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 57% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 677fed64:b50360a6:8a3ad242:aba9afb6
            Events : 12

    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      spare rebuilding   /dev/sdd

       3       8       64        -      spare   /dev/sde
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb  ##指定一个磁盘块坏掉
mdadm: set /dev/sdb faulty in /dev/md0

[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb   ##删除一块磁盘
mdadm: hot removed /dev/sdb from /dev/md0

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[4](S) sde[3](S) sdc[1]
      41910272 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/1] [_U_]
      
unused devices: <none>