Raid磁盘阵列(详解,操作演示)

时间:2021-12-28 01:11:50

1.RAID概述

        RAID,( Redundant Arrays of Independent Disks ),中文为廉价冗余磁盘阵列。

2.RAID定义

        多个独立的物理硬盘按照不同的方式组合起来形成一个虚拟磁盘。而实际当中我们看到的是两块和一个聚合。 一般正在工作环境中一个磁阵连接也是至少有 两根线,实现多的,所以实际上我们看到的是两块磁盘,需要做一次聚合。

3.RAID级别

        根据磁盘的不同组合方式形成不能的级别,但是raid级别没有好与坏,只是组合方式不同性能不同选择方式也不同。
        有:0 1 2 3 4 5 6 7 10 01 50

        #:10指的就是raid 1 和 raid 0 组成磁盘阵列,01和50同理;

4.RAID优势

4.1.容量和管理方式上的优势

        易于灵活的进行容量扩展,’虚拟化‘使可能管理性极大的增强

4.2.性能上优势

         磁盘分块技术 带来性能的提高

4.3.raid的可靠性和可用性

        通过冗余技术和热备、热换提升了可靠性

5.raid详解:

raid 0 : 

                                        ​​​​​​​        Raid磁盘阵列(详解,操作演示)

通过条带的方式将数据均匀的写到磁盘,读取也是均匀的读取,简单来说就是raid 0 均匀的对磁盘进行读写数据;

Radi 0  :至少需要两块磁盘
优点 读写效率非常高,不校验,配置简单;
缺点 没有冗余,容错率低,只要一块磁盘损坏就导致所有磁盘不可用
使用场景 对性能要求高,对安全性,可靠性要求不高的场景;

 raid 0 操作演示:

(1):添加硬盘:

Raid磁盘阵列(详解,操作演示)

#:此处我选择添加了4块5G的硬盘,只是为了看到效果,没给太大,原理上是虚拟磁盘,不会占用物理磁盘,所以可以给大一些;

(2):重启进行磁盘配置,查看磁盘是否添加成功:

[root@131 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1  7.9G  0 rom  
nvme0n1       259:0    0   20G  0 disk 
├─nvme0n1p1   259:1    0    2G  0 part /boot
└─nvme0n1p2   259:2    0   18G  0 part 
  ├─rhel-root 253:0    0   15G  0 lvm  /
  └─rhel-swap 253:1    0    3G  0 lvm  [SWAP]
nvme0n2       259:3    0    5G  0 disk 
nvme0n3       259:4    0    5G  0 disk 
nvme0n4       259:5    0    5G  0 disk 
nvme0n5       259:6    0    5G  0 disk 
[root@131 ~]#

 (3):配置磁盘类型为fd,四块新加磁盘同样操作即可:操作完成之后再通过 fdisk -l 验证:

[root@131 ~]# fdisk /dev/nvme0n2
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-10485759, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-10485759, default 10485759): 

Created a new partition 1 of type 'Linux' and of size 5 GiB.

Command (m for help): t
Selected partition 1         
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'.

Command (m for help): p
Device         Boot Start      End  Sectors Size Id Type
/dev/nvme0n2p1       2048 10485759 10483712   5G fd Linux raid autodetect

Command (m for help): 

// 验证

[root@131 ~]# fdisk -l

Disk /dev/nvme0n2: 5 GiB, 5368709120 bytes, 10485760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1d521fc5

Device         Boot Start      End  Sectors Size Id Type
/dev/nvme0n2p1       2048 10485759 10483712   5G fd Linux raid autodetect


Disk /dev/nvme0n3: 5 GiB, 5368709120 bytes, 10485760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcd040ac1

Device         Boot Start      End  Sectors Size Id Type
/dev/nvme0n3p1       2048 10485759 10483712   5G fd Linux raid autodetect


Disk /dev/nvme0n4: 5 GiB, 5368709120 bytes, 10485760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9848f042

Device         Boot Start      End  Sectors Size Id Type
/dev/nvme0n4p1       2048 10485759 10483712   5G fd Linux raid autodetect


Disk /dev/nvme0n5: 5 GiB, 5368709120 bytes, 10485760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x19ee3e48

Device         Boot Start      End  Sectors Size Id Type
/dev/nvme0n5p1       2048 10485759 10483712   5G fd Linux raid autodetect

[root@131 ~]#

(4):安装mdadm管理raid,默认已经安装;

[root@131 ~]# yum install -y mdadm
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Repository 'BaseOS' is missing name in configuration, using id.
Repository 'AppStream' is missing name in configuration, using id.
Waiting for process with pid 2274 to finish.
Last metadata expiration check: 0:00:01 ago on Tue 28 Mar 2023 11:22:15 AM CST.
Package mdadm-4.1-13.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@131 ~]#

mdadm常用命令:

-D         显示RAID设备的详细信息
-A         加入一个以前定义的RAID
-B         创建一个没有超级块的RAID设备
-F         选项监控模式
-G         更改RAID设备的大小或形态
-I          添加设备到RAID中,或从RAID中删除设备
-z         组建RAID1、RAID4、RAID5、RAID6后从每个RAID成员获取的空间容量
-s         扫描配置文件或/proc/mdstat以搜寻丢失的信息
-C        把RAID信息写入每个成员超级块中
-v         显示RAID创建过程中的详细信息
-B        不把RAID信息写入每个成员的超级块中
-l          指定RAID的级别
-n         指定RAID中活动设备的数目
-f         把RAID成员列为有问题,以便移除该成员
-r         把RAID成员移出RAID设备
-a         向RAID设备中添加一个成员
--re-add         把最近移除的RAID成员重新添加到RAID设备中
-E         查看RAID成员详细信息
-c         创建一个RAID设备时默认为512kb
-R         开始部分组装RAID
-S         停用RAID设备,释放所有资源
-x         指定初始RAID设备的备用成员的数量
--zero-superblock         如果RAID设备包含一个有效的超级块,该块使用零覆盖

通过mdadm命令查看是否做raid:

// 查看磁盘是否做了raid
[root@131 ~]# mdadm -E /dev/nvme0n[0-9]p1
mdadm: No md superblock detected on /dev/nvme0n1p1.
mdadm: No md superblock detected on /dev/nvme0n2p1.
mdadm: No md superblock detected on /dev/nvme0n3p1.
mdadm: No md superblock detected on /dev/nvme0n4p1.
mdadm: No md superblock detected on /dev/nvme0n5p1.
[root@131 ~]#

//创建raid 0磁盘组,由于raid 0没有冗余,所以不用添加备份选项 -xNum /dev/...
[root@131 ~]# mdadm -C -v /dev/md0 -l0 -n3 /dev/nvme0n[2-4]p1
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

//查看创建进度
[root@131 ~]# cat /proc/mdstat 
Personalities : [raid0] 
md0 : active raid0 nvme0n4p1[2] nvme0n3p1[1] nvme0n2p1[0]
      15710208 blocks super 1.2 512k chunks
      
unused devices: <none>

//查看raid0信息
[root@131 ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Tue Mar 28 11:29:47 2023
        Raid Level : raid0                                  //raid类型
        Array Size : 15710208 (14.98 GiB 16.09 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Mar 28 11:29:47 2023
             State : clean 
    Active Devices : 3    //活跃设备
   Working Devices : 3    //工作设备
    Failed Devices : 0    //故障设备
     Spare Devices : 0    //空闲设备

            Layout : -unknown-
        Chunk Size : 512K

Consistency Policy : none

              Name : 131:0  (local to host 131)
              UUID : 0ce067ed:deea0ef8:7d1b2ac9:c4d04ef6
            Events : 0

    Number   Major   Minor   RaidDevice State
       0     259        8        0      active sync   /dev/nvme0n2p1
       1     259        7        1      active sync   /dev/nvme0n3p1
       2     259       10        2      active sync   /dev/nvme0n4p1
[root@131 ~]#

#:到这儿raid 0就创建完成了;

(5):模拟一块磁盘故障,使用mdadm -f 选项即可完成;

#:但是在raid 0 的情况下,没有冗余,只要一块出问题就都坏掉了,所以这个命令会显示磁盘busy,除了raid 0 q其他的磁盘阵列都可以使用mdadm -f 实现,因为有冗余,有备用的磁盘,可以顶上来,处于active的状态磁盘除非认为破坏或者故障,不能通过mdadm -f 来停止;

(6):raid使用:挂载使用

[root@131 ~]# mkdir /md0
[root@131 ~]# mkfs.xfs /dev/md0 
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/md0               isize=512    agcount=16, agsize=245504 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=3927552, imaxpct=25
         =                       sunit=128    swidth=384 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@131 ~]# mount /dev/md0 /md0/
[root@131 ~]# echo /dev/md0 /md0/ xfs defaults 0 0 > /etc/fstab 
[root@131 ~]# mount -a
[root@131 ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               872M     0  872M   0% /dev
tmpfs                  901M     0  901M   0% /dev/shm
tmpfs                  901M  9.4M  891M   2% /run
tmpfs                  901M     0  901M   0% /sys/fs/cgroup
/dev/mapper/rhel-root   15G  5.2G  9.9G  35% /
/dev/nvme0n1p1         2.0G  237M  1.8G  12% /boot
tmpfs                  181M  1.2M  179M   1% /run/user/42
tmpfs                  181M  4.0K  181M   1% /run/user/0
/dev/md0                15G  140M   15G   1% /md0
[root@131 ~]#

#:写到文件中实现永久挂载!!!

其他的raid就不做演示,操作和raid 0 y一样,只说原理;

raid 1:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Raid磁盘阵列(详解,操作演示)

至少需要两块硬盘,两块硬盘都读写相同的数据,但是有一块是做另一块的备份,只有当另一块磁盘出问题不能用才会使用备份的磁盘;所以使用率只有1/2;

Radi 1  :至少需要两块磁盘,两块都读写同样的数据,但是一块是做备份
优点 容错率高,安全性好,可靠性强;
缺点 读写性能较raid0低,成本高;
使用场景 高安全性的数据存储场景;

raid 5 :

        ​​​​​​​        ​​​​​​​        Raid磁盘阵列(详解,操作演示)

 raid 5 至少需要三块磁盘,就类似1 + 2 = 3 ,你如果不知道 2 怎么来的,你可以用3 - 1 得出,所以raid 5 最多可以损坏一块硬盘;可用的空间=磁盘数-1

Radi 5  :至少需要三块磁盘,最多允许坏一块磁盘
优点 读性能较好,写性能一般,数据安全性较好,空间利用率高;
缺点 构建比较复杂,只允许坏一块磁盘;
使用场景 高安全性且对性能有要求的数据存储场景;

raid 10:

        ​​​​​​​        Raid磁盘阵列(详解,操作演示)

 至少需要四块磁盘,因为两端做raid 0 ,raid 0 至少需要两块磁盘,而 raid 1 至少需要两组磁盘,所以至少需要四块磁盘,可以同时坏两块磁盘,因为外层是raid 1,只能是一边全坏,另一边备份;

Radi 01  :至少需要四块磁盘,最多允许坏两块磁盘
优点 读写性能好,安全性高;
缺点 成本高;
使用场景 高安全性且对性能有高要求的数据存储场景;

raid 01:

        ​​​​​​​        ​​​​​​​        Raid磁盘阵列(详解,操作演示)

 外层采用raid 0 ,提高读写效率,内层采用raid 1,提高安全性,允许坏一半磁盘,但是不能是一边的,因为内层是raid 1;

Radi 10  :至少需要四块磁盘,最多允许坏一半磁盘,不能是一边的;
优点 读写性能好,安全性高;
缺点 都坏在一边就麻烦了;
使用场景 高安全性且对性能有高要求的数据存储场景;