mdadm构建RAID10¶
在 在软RAID10 + LVM上CentOS 7 部署Gluster 11 ,为了构建统一的大规格磁盘,采用 Linux 软RAID 实现磁盘统一管理:
磁盘准备¶
对于已经使用过的磁盘,需要清理磁盘分区和文件系统:
参考 LVM执行 pvcreate 时报错 Device /dev/XXX excluded by a filter. 经验,对于已经使用过的旧磁盘(已经有分区信息或文件系统),先抹除掉磁盘上信息:
wipefs -a /dev/nvme0n1
for i in {0..11};do wipefs -a /dev/nvme${i}n1;done
备注
构建 mdadm
软RAID建议采用分区,见 mdadm构建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
以上命令我实际上合并成一个组合脚本来完成:
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
中不需要的文件系统挂载配置,然后执行一次:
systemctl daemon-reload
这样才能确保 systemd-fstab-generator 自动生成的 .mount
unit 配置正确刷新,不会因为 Systemd挂载文件系统(自动) 反复自动挂载之前的文件系统
创建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 后再重新开始
如果正确,则提示信息:
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
检查状态:
cat /proc/mdstat
输出状态类似:
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>
备注
这里看到的 chunk
是 65536KB chunk
,让我有些疑惑,为何会这么巨大,是否有更好的优化? 看起来I/O可能会比较集中在个别磁盘,而不是非常均匀分布到所有磁盘;优点是…
使用
--detail
指令可以检查详情:
mdadm --detail /dev/md10
可以看到详细状态如下:
/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 作为中间逻辑卷数据管理
参考¶
Red Hat Enterprise Linux 9 Docs > Managing storage devices > Chapter 18. Managing RAID
Red Hat Enterprise Linux 9 Docs > 管理存储设备 > 第18章 管理RAID (中文版)
SUSE Linux Enterprise Server Documentation / Storage Administration Guide / Software RAID / Creating Software RAID 10 Devices SUSE的这个文档非常详细,其中有些细节需要仔细研究和学习(官方文档 Software RAID比RED HAT要详细很多)