分步教程:在Linux中配置混合软件RAID 10
在本文中,我将分享"使用四个磁盘配置混合软件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