分步教程:在Linux中配置混合软件RAID 10

时间:2020-01-09 10:37:44  来源:igfitidea点击:

在本文中,我将分享"使用四个磁盘配置混合软件RAID 10(1 + 0)"的步骤。

混合阵列

伯克利论文发表后,许多供应商开始组合不同的RAID级别,以提高性能和可靠性。
大多数硬件RAID控制器和外部系统都支持这些混合阵列。
Linux内核还将允许两个或者多个RAID级别的组合以形成混合阵列。
实际上,它允许阵列的任何组合,尽管其中一些可能不会提供任何好处。

RAID-10(条纹镜)

RAID-0和RAID-1的组合是使用最广泛,最有效的混合阵列。
条带化的快速性能,再加上镜像的冗余特性,创建了一种快速可靠的解决方案,尽管它是最昂贵的解决方案。

一个" striped-mirror"或者" RAID-10"很简单。
将创建两个单独的镜像,每个镜像都有一组唯一的成员磁盘。
然后,将两个镜像阵列添加到新的条带化阵列中。
将数据写入逻辑RAID设备时,会在两个镜像之间进行条带化。

混合软件RAID 10如何工作?

配置混合软件RAID 10需要大量多余的磁盘硬件,尽管它提供了快速而可靠的解决方案。
I/O的吞吐量接近独立条带阵列的吞吐量。
当RAID-10中的任何单个磁盘发生故障时,尽管具有故障磁盘的那一侧将在降级模式下运行,但混合磁盘(每个镜像)的两侧仍可以运行。
RAID-10安排甚至可以承受条带不同侧的多个磁盘故障。

创建RAID-10时,最好将镜像阵列分布在多个I/O通道上。
这将有助于阵列承受控制器故障。
例如,以由两个镜像集组成的RAID-10为例,每个镜像集包含两个成员磁盘。
如果每个镜像都放置在其自己的I/O通道上,则该通道的故障将使整个混合阵列无用。
但是,如果将单个镜像的每个成员磁盘放在单独的通道上,则该阵列可以承受整个I/O通道的故障。

尽管我们可以将两个条带合并到一个镜像中,但是这种安排不会比" RAID1 + 0"提高性能,也不会增加冗余。
实际上,RAID 10可以承受的磁盘故障要比许多制造商所称的RAID 0 + 1(将两个条带组合成一个镜像)更多。
虽然RAID 0 + 1确实可以在同一条带中的两个磁盘故障中幸存,但第二个磁盘故障却是微不足道的,因为它已经是无法正常工作的条带的一部分。

如果我们安排镜像以使/dev/sda/dev/sdc在控制器A上,而/dev/sdb/dev/sdd在控制器B上?
在这种情况下,单个控制器的故障只会使我们的镜像进入降级模式,而使/dev/md2处于可操作状态。

另请阅读:

分步教程:在Linux中配置软件Linear RAID 0分步教程:在Linux中配置软件RAID 0分步教程:在Linux中配置软件RAID 1分步教程:配置软件RAID Linux分步教程中的4:在Linux中配置软件RAID 5

配置混合软件RAID 10阵列

在Linux节点上创建混合软件RAID 10阵列之前,必须遵循以下某些步骤。
由于我已经在较早的文章中执行了这些步骤,因此我将在此处共享超链接

重要的分区规则

要设置混合软件raid 10阵列,我们至少需要4个磁盘(sdb1,sdc1,sdd1和sde1),其中我们将在映射到/dev/md0的(sdb1 + sdc1)上配置Software RAID 1和(sdd1 + sde1)映射到/dev/md1
在此之上,我们将配置(Software RAID 0)阵列,并将(/dev/md0 +/dev/md1)映射到/dev/md2阵列。

用fdisk分区

创建混合软件RAID 10阵列

现在,由于我们拥有所有分区,因此我们将在这些分区上创建混合软件RAID 10阵列。

[root@node1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 27.5G  0 part
  ├─centos-root 253:0    0 25.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    2G  0 disk
└─sdb1            8:17   0    2G  0 part
sdc               8:32   0    2G  0 disk
└─sdc1            8:33   0    2G  0 part
sdd               8:48   0    2G  0 disk
└─sdd1            8:49   0    2G  0 part
sde               8:64   0    2G  0 disk
└─sde1            8:65   0    2G  0 part
sr0              11:0    1 1024M  0 rom

因此,我们的第一个软件RAID 1阵列/dev/md0将位于/dev/sdb1和/dev/sdc1上

[root@node1 ~]# mdadm -C -n2 -l1 /dev/md0 /dev/sd{b,c}1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

我们的下一个RAID 1阵列将使用/dev/sdd1和/dev/sde1创建

[root@node1 ~]# mdadm -C -n2 -l1 /dev/md1 /dev/sd{d,e}1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

其中

-C, --create
       Create a new array.
			  
-v, --verbose
       Be  more  verbose about what is happening. 
-l, --level=
       Set RAID level.  When used with --create, options are: linear, raid0,  0,  stripe,  raid1,  1,  mirror,
       raid4,  4,  raid5,  5, raid6, 6, raid10, 10, multipath, mp, faulty, container.  Obviously some of these
       are synonymous.
-c, --chunk=
       Specify chunk size of kilobytes.
-n, --raid-devices=
       Specify  the number of active devices in the array.

验证软件RAID 1的更改

在使用mdadm初始化每个RAID-1之后,它将开始重新同步。
/proc/mdstat应该在/dev/md0和/dev/md1上报告两个磁盘镜像

[root@node1 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sde1[1] sdd1[0]
      2094080 blocks super 1.2 [2/2] [UU]
      [=========>...........]  resync = 48.3% (1012736/2094080) finish=0.0min speed=202547K/sec
md0 : active raid1 sdc1[1] sdb1[0]
      2094080 blocks super 1.2 [2/2] [UU]
unused devices: <none>

创建软件RAID 0阵列

接下来配置混合软件raid 10阵列,我们将使用映射到/dev/md2的md0和md1数组创建软件raid 1

[root@node1 ~]# mdadm -C -n2 -l0 -c64 /dev/md2 /dev/md{0,1}
mdadm: /dev/md1 appears to contain an ext2fs file system
       size=2094080K  mtime=Mon Jun 10 16:31:37 2019
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.

验证混合软件RAID 10的更改

现在/proc/mdstat应该在/dev/md0和/dev/md1上报告两个磁盘镜像,在/dev/md2上报告RAID-0,该RAID-0由/dev/md0和/组成。
dev/md1`。

[root@node1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid0]
md2 : active raid0 md1[1] md0[0]
      4184064 blocks super 1.2 64k chunks
md1 : active raid1 sde1[1] sdd1[0]
      2094080 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdc1[1] sdb1[0]
      2094080 blocks super 1.2 [2/2] [UU]
unused devices: <none>

创建文件系统和挂载点

一旦所有三个阵列都被激活,在这种情况下,只需在条带/dev/md2上构建一个文件系统,然后挂载/dev/md2即可。
我们将为本文创建ext4文件系统。

[root@node1 ~]# mkfs.ext4 /dev/md2
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=16 blocks, Stripe width=32 blocks
261632 inodes, 1046016 blocks
52300 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1071644672
32 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

接下来,我们将在/hybrid_array下为/dev/md2创建一个挂载点。

[root@node1 ~]# mkdir /hybrid_array

我们可以手动挂载新文件系统以访问和存储数据

[root@node1 ~]# mount /dev/md2 /hybrid_array
[root@node1 ~]# df -h /hybrid_array
Filesystem      Size  Used Avail Use% Mounted on
/dev/md2        3.9G   16M  3.7G   1% /hybrid_array

说明:

使用mount命令可以临时挂载文件系统,但是这些更改在重新启动后将丢失,因此,我们必须更新/etc/fstab使其在重新启动后永久保留。

创建具有更多磁盘的混合软件RAID 1 + 0阵列

我们还可以将备用磁盘添加到每个镜像阵列,以使解决方案更可靠。
我们可以将两个以上的镜像合并到RAID-0中:

# mdadm -C -n2 -l1 -x1 /dev/md0 /dev/sd{b,c,d}1
# mdadm -C -n2 -l1 -x1 /dev/md1 /dev/sd{e,f,g}1
# mdadm -C -n2 -l1 -x1 /dev/md1 /dev/sd{h,i,j}1
# mdadm -C -n3 -l0 -c64 /dev/md2 /dev/md{0,1,2}

有关混合软件团队10的更多详细信息,请使用" mdadm --detail",如下所示

[root@node1 ~]# mdadm --detail /dev/md2
/dev/md2:
           Version : 1.2
     Creation Time : Fri Jun 14 14:07:15 2019
        Raid Level : raid0
        Array Size : 4184064 (3.99 GiB 4.28 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent
       Update Time : Fri Jun 14 14:07:15 2019
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0
        Chunk Size : 64K
Consistency Policy : none
              Name : node1.theitroad.com:2  (local to host node1.theitroad.com)
              UUID : c2ba009d:d077b4b5:eb28f342:e91ea39e
            Events : 0
    Number   Major   Minor   RaidDevice State
       0       9        0        0      active sync   /dev/md0
       1       9        1        1      active sync   /dev/md1