分步教程:在Linux中配置软件RAID 1

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

在本文中,我将分享使用和不使用备用磁盘配置软件RAID 1的步骤,即镜像RAID存储数据的位置。
我将在接下来的章节中对此进行更详细的解释。

什么是RAID 1?

RAID-1通常称为"镜像"。
RAID-1区域中的每个子对象都包含该区域中数据的相同副本。
写入RAID-1区域会导致该数据同时写入所有子对象。
从RAID-1区域读取可能导致从任何一个子对象读取数据。
RAID-1区域的子对象不必具有相同的大小,但是区域的大小将等于最小子对象的大小。

创建不带备用磁盘的软件RAID 1

最简单的RAID-1配置必须至少包含两个成员磁盘。
在此示例中,/dev/sdb1/dev/sdc1是RAID-1的成员磁盘,位于/dev/md0处:

重要的提示:

RAID-1阵列应包含分区大小相同的成员磁盘。
如果这些数组包含大小不同的分区,则较大的分区将被截断以反映最小分区的大小。

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

重要的分区规则

使用fdisk分区

现在我们有了可用的分区,可以使用lsblk进行验证

[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
sr0              11:0    1 1024M  0 rom

配置软RAID1

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

说明:

" chunk-size"对RAID-1没有影响,因为不涉及磁盘条带化。
但是,仍需要块大小作为占位符。
另请注意,RAID-1不需要`persistent-superblock'。

[root@node1 ~]# mdadm -Cv -l1 -n2 /dev/md0 /dev/sd{b,c}1
mdadm: Note: this array has metadata at the start and
    Jan 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: size set to 2094080K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 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阵列已成功创建。
使用以下命令验证更改

[root@node1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
      2094080 blocks super 1.2 [2/2] [UU]
      [=======>.............]  resync = 38.1% (800128/2094080) finish=0.1min speed=200032K/sec
unused devices: <none>

现在,"/proc/mdstat"报告有关阵列的信息,还包括有关重新同步过程的信息。
每当首次初始化支持数据冗余的新阵列时,就会发生重新同步。
重新同步过程可确保镜像中的所有磁盘都包含完全相同的数据。

重新同步已完成约40%,并应根据软件RAID 1阵列大小在一段时间内完成。

说明:

我们甚至可以在重新同步完成之前就开始在阵列上创建文件系统,但是我们可能不应该在阵列完成之前将其投入生产。

[root@node1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
      2094080 blocks super 1.2 [2/2] [UU]
unused devices: <none>

创建文件系统

现在,由于我们的软件raid 1阵列已准备就绪,我们将在其之上创建一个文件系统,以便将其用于存储数据。
为了本文的方便,我将创建一个" ext4文件系统",但我们可以根据需要在软件RAID 1上创建任何其他文件系统。

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

要检查软件raid 1阵列的详细信息,可以使用以下命令

[root@node1 ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Jun 10 16:28:24 2019
        Raid Level : raid1
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent
       Update Time : Mon Jun 10 16:32:08 2019
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0
Consistency Policy : resync
              Name : node1.theitroad.com:0  (local to host node1.theitroad.com)
              UUID : cdde32cb:6150eddb:35ab33ee:faba0154
            Events : 17
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

创建挂载点

接下来,我们需要一个安装点来访问软件RAID 1阵列文件系统。

[root@node1 ~]# mkdir /raid1
[root@node1 ~]# mount /dev/md0 /raid1/

现在,既然我们有了挂载点,就已经在挂载点上挂载了软件raid 1阵列。
让我们检查一下我们的软件RAID 1阵列的详细信息。

[root@node1 ~]# df -h /raid1/
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        2.0G  6.0M  1.9G   1% /raid1

因此,此软件raid 1阵列可用于存储数据。
但是目前,由于我们已经临时挂载了此文件系统,因此重新启动后将不可用。

要使更改重新启动成为持久性文件,请将以下内容添加到/etc/fstab中。

/dev/md0        /raid1       ext4    defaults        0 0

接下来,保存文件并重新启动节点。
节点启动后,请确保将软件RAID 1阵列安装在安装点上,即

[root@node1 ~]# df -h /raid1/
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        2.0G  6.0M  1.9G   1% /raid1

使用备用磁盘配置软件RAID 1

当某个磁盘确实发生故障时,能够自动将另一个磁盘升级到阵列中以替换发生故障的磁盘非常有用,因此在配置软件团队1时添加备用磁盘是个好方法。

" spare disk"(备用磁盘)参数与device参数结合使用,以定义当成员磁盘发生故障时将插入阵列的磁盘。
在本文中,我添加了新的虚拟磁盘,以演示如何使用备用磁盘创建软件RAID 1阵列。

[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
sr0              11:0    1 1024M  0 rom

如果使用的是mdadm,则-x标志定义备用磁盘的数量。
成员磁盘在命令行上从左到右进行解析。
因此,此示例中列出的前两个磁盘("/dev/sdb1"和"/dev/sdc1")成为活动RAID成员,最后一个磁盘("/dev/sdd1")成为备用磁盘。

[root@node1 ~]# mdadm -Cv -l1 -n2 -x1 /dev/md0 /dev/sd{b,c,d}1
mdadm: Note: this array has metadata at the start and
    Jan 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: size set to 2094080K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

如果该阵列中的磁盘发生故障,内核将从/dev/md0中删除发生故障的驱动器(/dev/sdb1或者/dev/sdc1),将/dev/sdd1插入阵列,开始重建。
在这种情况下,/dev/sdb1已(强制)失败,如以下列表中的(F)所示。

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

md驱动程序已自动插入备用磁盘/dev/sdd1并开始恢复。

[root@node1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdd1[2] sdc1[1] sdb1[0](F)
      2094080 blocks super 1.2 [2/1] [_U]
      [===>.................]  recovery = 19.9% (418688/2094080) finish=0.1min speed=209344K/sec
unused devices: <none>

要检查软件RAID 1阵列/dev/md0的详细信息

[root@node1 ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Jun 10 16:55:26 2019
        Raid Level : raid1
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent
       Update Time : Mon Jun 10 16:59:55 2019
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 0
Consistency Policy : resync
              Name : node1.theitroad.com:0  (local to host node1.theitroad.com)
              UUID : 89dd3976:5265ed93:8b595605:2b3aa122
            Events : 36
    Number   Major   Minor   RaidDevice State
       2       8       49        0      active sync   /dev/sdd1
       1       8       33        1      active sync   /dev/sdc1
       0       8       17        -      faulty   /dev/sdb1