centos7配置RAID和管理

1、什么是RAID
RAID称之为磁盘阵列,主要用于提高存储的可用性,和性能上的改善,同时大大提高磁盘的容错能力,磁盘阵列是由多个物理磁盘组成,但是对于操作系统而言,它就是一个逻辑磁盘,系统上存储的数据会分布在阵列中的多个物理磁盘。
2、RAID的几种级别

级别 说明 最少物理磁盘数 最大容错能力 I/O性能 磁盘容量利用率
RAID 1 1级别又称之为磁盘镜像,同样是需要2块盘,但是磁盘具有了容错能力 需要2个磁盘 允许一块硬盘发生故障 读性能提升,写入性能一般 50%
RAID 5 5级别称之为分布式奇偶校验阵列,以数据的校验位来保证数据的安全,但是数据的校验位不是存放在单独的磁盘,而是交互式的存放在各个阵列中的磁盘,如果阵列中任何一个磁盘出现故障,都可根据其他盘的校验位重建损坏的数据 至少3块磁盘 允许一块硬盘发生故障 读写性能较好 90%
RAID 6 6级别与5级别类似,5级别会将数据的校验信息存放在硬盘上,6级别会比5级别多保存一份校验信息 至少需要4块硬盘 允许两块硬盘发生故障 读写性能较好 80%
RAID 10 称之为高可靠性与高效磁盘结构,兼具了0级别和1级别的优点,此种级别先用两个磁盘建立镜像,然后将镜像后的逻辑磁盘,做0级别 至少需要4块硬盘 允许一块盘发生故障 读写性能好 50%

3、RAID种类

种类 说明
软RAID 利用操作系统提供的软件技术实现RAID功能,优点廉价,几乎没有任何成本,缺点受限操作系统的稳定性,同时占用一定的系统资源
硬RAID 通过硬件RAID控制器实现,优点是不需要占用其他硬件资源,同时提供了高速缓存机制,大大的提升了磁盘的读写性能,同时稳定性也是非常高

4、Linux系统上实现软RAID
模拟平台:VMware workstation
测试环境:centos7计算机一台,添加一块硬盘
使用工具:mdadm
【raid1】实现过程:
1、首先查看磁盘标签类型
如果是MBR可以使用fdisk创建相同大小的磁盘分区
如果是GPT可以使用gdisk创建相同大小的磁盘分区

[root@lab-236 ~]# fdisk -l /dev/sdb
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt              #硬盘类型GPT
Disk identifier: 037192CD-B94D-4F5D-A559-A90B74EECA9D
  Start          End    Size  Type            Name

2、创建2个分区,并更改分区系统类型为Linux RAID
因为我们的磁盘标签类型是GPT,所以使用gdisk执行

[root@lab-236 ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): n     #创建新的分区
Partition number (1-128, default 1): 1      #分区编号1
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:     #指定起始扇区,默认即可
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +5G   #指定分区大小
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): fd00      #更改分区系统类型为LinuxRAID
Changed type of partition to 'Linux RAID'

Command (? for help): n   #继续创建第二分区
Partition number (2-128, default 2): 2     #分区编号2
First sector (34-41943006, default = 10487808) or {+-}size{KMGTP}:  #指定起始扇区,默认即可
Last sector (10487808-41943006, default = 41943006) or {+-}size{KMGTP}: +5G  #指定分区大小
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): fd00   #更改分区系统类型为LinuxRAID
Changed type of partition to 'Linux RAID'

Command (? for help): p     #显示分区信息
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 037192CD-B94D-4F5D-A559-A90B74EECA9D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 20971453 sectors (10.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        10487807   5.0 GiB     FD00  Linux RAID
   2        10487808        20973567   5.0 GiB     FD00  Linux RAID

Command (? for help): w         #保存分区信息
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y        #分区发生改变,提示是否继续保存
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

3、执行mdadm工具创建RAID1
注意创建RAID设备编号要从0开始

[root@lab-236 ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdb2 
mdadm: /dev/sdb1 appears to be part of a raid array:
       level=raid1 devices=2 ctime=Thu Dec 10 20:52:02 2020
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: /dev/sdb2 appears to be part of a raid array:
       level=raid1 devices=2 ctime=Thu Dec 10 20:52:02 2020
Continue creating array? Y      #提示创建是否继续,是Y
mdadm: Fail to create md0 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

注意:创建过程,有提示这个阵列不适合作为启动盘的信息,这个是由于超级块类型决定的,超级块的类型可以使用–metadata选项设置,默认是1.2,只有这个值不大于1.0时才可以作为启动盘
4、检查创建的RAID详细信息和运行状态

[root@lab-236 ~]# mdadm --detail /dev/md0       #查看RAID详细信息
/dev/md0:
           Version : 1.2
     Creation Time : Fri Dec 11 16:46:33 2020
        Raid Level : raid1
        Array Size : 5237760 (5.00 GiB 5.36 GB)
     Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent
       Update Time : Fri Dec 11 16:46:59 2020
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0
Consistency Policy : resync
              Name : lab-236.com:0  (local to host lab-236.com)
              UUID : 52f68880:b4d10435:d271aaa2:261ed9cb
            Events : 17
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2
[root@lab-236 ~]# cat /proc/mdstat          #查看运行状态
Personalities : [raid1] 
md0 : active raid1 sdb2[1] sdb1[0]
      5237760 blocks super 1.2 [2/2] [UU]
unused devices: <none>

5、创建好RAID分区,接下来就是格式化文件系统,才可以被使用

[root@lab-236 ~]# mkfs.xfs   /dev/md0       #格式化为xfs文件系统
meta-data=/dev/md0               isize=512    agcount=4, agsize=327360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1309440, 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

6、挂载RAID分区到指定目录,此处挂载到/mnt

[root@lab-236 ~]# mount /dev/md0 /mnt

通过df命令查看磁盘使用情况

[root@lab-236 ~]# df  -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 471M     0  471M    0% /dev
tmpfs                    488M  8.1M  480M    2% /run
tmpfs                    488M     0  488M    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  4.5G   12G   28% /
/dev/md0                 5.0G   33M  5.0G    1% /mnt        #可以看到挂载成功

7、模拟磁盘故障,并修复磁盘RAID
首先我们RAID分区挂载的目录创建一个文件

[root@lab-236 ~]# echo "hello world" > /mnt/hello.txt

此时我们通过mdadm工具将一个分区(/dev/sdb1)设置为故障分区

[root@lab-236 ~]# mdadm /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0

然后我们在查看RAID的配置信息

[root@lab-236 ~]# mdadm --detail /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Fri Dec 11 16:46:33 2020
        Raid Level : raid1
        Array Size : 5237760 (5.00 GiB 5.36 GB)
     Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent
       Update Time : Fri Dec 11 17:05:32 2020
             State : clean, degraded 
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 1
     Spare Devices : 0
Consistency Policy : resync
              Name : lab-236.com:0  (local to host lab-236.com)
              UUID : 52f68880:b4d10435:d271aaa2:261ed9cb
            Events : 21
    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       18        1      active sync   /dev/sdb2
       0       8       17        -      faulty   /dev/sdb1     #此时/dev/sdb1状态时有缺陷的

我们可以看到/dev/sdb1的状态提示为faulty,是有缺陷的,存在故障。
查看运行情况

[root@lab-236 ~]# cat  /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdb2[1] sdb1[0](F)
      5237760 blocks super 1.2 [2/1] [_U]   #发现超级块数量变成[2/1],缺失1个

unused devices: <none>

8、此时我们查看挂载目录中文件是否正常

[root@lab-236 ~]# cat  /mnt/hello.txt 
hello world

我们发现文件正常,这就是RAID1的容错能力,一块磁盘出现故障,不影响数据文件的继续使用
9、接下来我们修复RAID
首先我们要将已经有缺陷的磁盘分区移除

[root@lab-236 ~]# mdadm /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0

然后我们将购买的新磁盘,添加到这个RAID中,如果实际物理环境中,直接将物理磁盘换上,添加即可,这里我们模拟环境。就当/dev/sdb1修复后重新添加回去

[root@lab-236 ~]# mdadm /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1

此时我们查看RAID信息,可以看到新加入的磁盘正在进行spare rebuilding RAID,这个过程需要时间,时间的长短与空间数据大小有关

[root@lab-236 ~]# mdadm --detail /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Fri Dec 11 16:46:33 2020
        Raid Level : raid1
        Array Size : 5237760 (5.00 GiB 5.36 GB)
     Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent
       Update Time : Fri Dec 11 17:24:08 2020
             State : clean, degraded, recovering 
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 1
Consistency Policy : resync
    Rebuild Status : 57% complete
              Name : lab-236.com:0  (local to host lab-236.com)
              UUID : 52f68880:b4d10435:d271aaa2:261ed9cb
            Events : 41
    Number   Major   Minor   RaidDevice State
       2       8       17        0      spare rebuilding   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2

总结:
1、配置过程如果此前创建过软RAID,需要先将原来RAID设备停止

mdadm  --stop  /dev/md0

如果不停止会出现如下错误:
mdadm: cannot open /dev/sdb1: Device or resource busy
2、如果要重建软RAID,步骤应如下:
1、先卸载目录
2、停止RAID设备
3、移除RAID设备中的磁盘

上一篇:Python-字符串-笔记


下一篇:236 二叉树的最近公共祖先