mdadm构建RAID10

在软RAID10 + LVM上CentOS 7 部署Gluster 11 ,为了构建统一的大规格磁盘,采用 Linux 软RAID 实现磁盘统一管理:

磁盘准备

对于已经使用过的磁盘,需要清理磁盘分区和文件系统:

使用 wipefs 擦除磁盘上分区和文件系统
wipefs -a /dev/nvme0n1
简单脚本(类似 为GlusterFS部署准备CentOS环境 ),将服务器上12块 NVMe存储 磁盘初始化
for i in {0..11};do wipefs -a /dev/nvme${i}n1;done

备注

构建 mdadm 软RAID建议采用分区,见 mdadm构建RAID时应该使用分区还是直接使用磁盘?

  • 分区构建:

创建分区并设置为RAID
for i in {0..11};do
    parted -s -a optimal /dev/nvme${i}n1 mklabel gpt
    # 避免类似 Error: Failed to add partition 1 (Device or resource busy) 可以添加 sleep 1
    # sleep 1
    parted -s -a optimal /dev/nvme${i}n1 mkpart primary 0% 100%
    parted -s -a optimal /dev/nvme${i}n1 set 1 raid on
    parted -s -a optimal /dev/nvme${i}n1 name 1 raid_part
done

以上命令我实际上合并成一个组合脚本来完成:

mdadm 准备磁盘分区脚本
wipefs -a /dev/nvme{0..11}n1
for i in {0..11};do
    parted -s -a optimal /dev/nvme${i}n1 mklabel gpt
    parted -s -a optimal /dev/nvme${i}n1 mkpart primary 0% 100%
    parted -s -a optimal /dev/nvme${i}n1 set 1 raid on
    parted -s -a optimal /dev/nvme${i}n1 name 1 raid_part
done

警告

如果之前已经在 /etc/fstab 中配置过磁盘目录挂载,则一定要先删除 /etc/fstab 中不需要的文件系统挂载配置,然后执行一次:

执行 daemon-reload 刷新
systemctl daemon-reload

这样才能确保 systemd-fstab-generator 自动生成的 .mount unit 配置正确刷新,不会因为 Systemd挂载文件系统(自动) 反复自动挂载之前的文件系统

创建RAID10

  • 执行创建RAID10( 注意使用分区 ):

创建RAID10
# 这里我没有指定 --chunk 参数(--chunk=32),待后续学习改进
mdadm --create /dev/md10 --run --level=10 --raid-devices=12 /dev/nvme{0..11}n1p1

备注

这里我闹过一个乌龙,忘记加上分区,正确应该是 /dev/nvme{0..11}n1p1 表示 NVMe存储 设备的第一个分区,我错写成 /dev/nvme{0..11}n1 实际上就是直接对整个磁盘进行创建RAID,此时会提示告警:

mdadm: /dev/nvme0n1 appears to be part of a raid array:
       level=raid0 devices=0 ctime=Thu Jan  1 08:00:00 1970
mdadm: partition table exists on /dev/nvme0n1 but will be lost or
       meaningless after creating array
...

mdadm删除md 后再重新开始

如果正确,则提示信息:

创建RAID10
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
  • 检查状态:

检查md状态
cat /proc/mdstat

输出状态类似:

检查md状态可以看到RAID正在构建
Personalities : [raid10]
md10 : active raid10 nvme11n1p1[11] nvme10n1p1[10] nvme9n1p1[9] nvme8n1p1[8] nvme7n1p1[7] nvme6n1p1[6] nvme5n1p1[5] nvme4n1p1[4] nvme3n1p1[3] nvme2n1p1[2] nvme1n1p1[1] nvme0n1p1[0]
      22499205120 blocks super 1.2 512K chunks 2 near-copies [12/12] [UUUUUUUUUUUU]
      [>....................]  resync =  0.3% (75593088/22499205120) finish=1803.0min speed=207272K/sec
      bitmap: 168/168 pages [672KB], 65536KB chunk

unused devices: <none>

备注

这里看到的 chunk65536KB chunk ,让我有些疑惑,为何会这么巨大,是否有更好的优化? 看起来I/O可能会比较集中在个别磁盘,而不是非常均匀分布到所有磁盘;优点是…

  • 使用 --detail 指令可以检查详情:

使用 mdadm --detail 检查RAID详情
mdadm --detail /dev/md10

可以看到详细状态如下:

使用 mdadm --detail 检查RAID详情输出
/dev/md10:
        Version : 1.2
  Creation Time : Wed Aug 16 10:57:24 2023
     Raid Level : raid10
     Array Size : 22499205120 (21456.91 GiB 23039.19 GB)
  Used Dev Size : 3749867520 (3576.15 GiB 3839.86 GB)
   Raid Devices : 12
  Total Devices : 12
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Wed Aug 16 11:18:11 2023
          State : clean, resyncing
 Active Devices : 12
Working Devices : 12
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

  Resync Status : 1% complete

           Name : u94j03332.alipay.ea134:10  (local to host u94j03332.alipay.ea134)
           UUID : 34792e30:9f8d47fd:3a2e2d19:baceefbd
         Events : 245

    Number   Major   Minor   RaidDevice State
       0     259        9        0      active sync set-A   /dev/nvme0n1p1
       1     259       11        1      active sync set-B   /dev/nvme1n1p1
       2     259       10        2      active sync set-A   /dev/nvme2n1p1
       3     259        6        3      active sync set-B   /dev/nvme3n1p1
       4     259        5        4      active sync set-A   /dev/nvme4n1p1
       5     259       12        5      active sync set-B   /dev/nvme5n1p1
       6     259       16        6      active sync set-A   /dev/nvme6n1p1
       7     259       17        7      active sync set-B   /dev/nvme7n1p1
       8     259       18        8      active sync set-A   /dev/nvme8n1p1
       9     259       19        9      active sync set-B   /dev/nvme9n1p1
      10     259       25       10      active sync set-A   /dev/nvme10n1p1
      11     259       26       11      active sync set-B   /dev/nvme11n1p1

下一步

在软RAID10 + LVM上CentOS 7 部署Gluster 11 方案中, 在 mdadm_raid10 上部署LVM 作为中间逻辑卷数据管理

参考