mdadm 同步速度

警告

当你调整系统默认配置时,务必充分理解参数含义以及影响,并做好详细记录。本文是 我的一次经验教训总结

我在 mdadm构建RAID10 实践时,由于服务器硬件规格极大,采用了 4TB 的 NVMe存储 ,所以在构建 RAID10 初始化RAID的 sync 同步非常耗时,原因是默认同步限速是 200MB/s ,对于海量存储来说完成首次全量同步可能会需要以天为计量单位。

例如,我的实践 mdadm构建RAID10 ,刚完成 RAID10 构建时检查 mdstat :

检查md状态
cat /proc/mdstat

可以看到同步速度是 207272K/sec 也就是大约 200MB/s ,预估完成时间 1803min (30小时):

检查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>

对于构建 在 mdadm_raid10 上部署LVM 底层基础工作,虽然没有明显影响(raid同步时依然可以读写),但是还是会带来一些不便(主要是想快速完成部署和验证 Gluster Atlas 性能)

检查同步速度

对于同步限制的主要参数调整是 md 设备 sync_speed_max ,这个参数可以通过 /sys/block/md10/md/sync_speed_max 检查:

  • 检查 md 设备同步速度:

检查 md 设备 md10sync_speed_max 限速
cat /sys/block/md10/md/sync_speed_max

默认值是 200000 也就是 200MB/s :

md 设备默认 sync_speed_max 限速是 200MB/s
200000 (system)
  • 此外还有一个默认的 md_sync_speed_min :

检查 md 设备 md10sync_speed_min 最小同步速度(下限)
cat /sys/block/md10/md/sync_speed_min

默认值是 1000 也就是 1MB/s :

检查 md 设备 md10sync_speed_min 最小同步速度(下限)
cat /sys/block/md10/md/sync_speed_min

调整同步速度

  • 可以在线调整同步速度:

在线调整 md 设备 md10 同步速率
# 我在构建RAID的初始化时调整放宽了同步速率10倍
sysctl -w dev.raid.speed_limit_max=2000000
sysctl -w dev.raid.speed_limit_min=10000

警告

md 配置默认 200MB/s 同步速度是有一定道理的,我在这里踩了一个坑(见下文)

参考