Linux RAID 配置与性能优化案例

2次阅读

raid选型需匹配负载特性:数据库日志盘禁用raid 5,应选raid 10;raid 0无冗余仅适用临时场景;raid 1适合小关键系统;raid 5/6重建压力大、随机写性能差;raid 10为高频io首选。

Linux RAID 配置与性能优化案例

RAID级别选错,性能和容错直接打折扣

RAID不是选“听起来高级”的那个,而是看你的负载到底在读多、写多、还是怕丢数据。比如数据库日志盘用RAID 5,写放大严重,重建时还容易拖垮整台机器;而RAID 10虽然贵一半容量,但随机写IOPS能稳在35K+,故障恢复也快得多。

  • RAID 0:只适合临时缓存或视频转码——没冗余,一块盘挂,全盘完蛋
  • RAID 1:两块盘镜像,读快、写慢、容错强,适合小关键系统(如监控告警库)
  • RAID 5:三盘起步,单盘故障可扛,但小文件随机写性能差,重建压力大
  • RAID 6:四盘起步,双校验,适合大容量归档盘,但写延迟更高
  • RAID 10:四盘起(偶数最佳),兼顾速度与容错,高频数据库、虚拟化存储首选

mdadm创建阵列时,chunk size和元数据格式不能默认

默认chunk=64K对SSD是浪费,对机械盘又太小;--metadata=1.2比旧版0.90支持更大阵列、热备识别更稳——不指定,重启可能根本组不上阵列。

  • 机械盘(如ST4000DM004):设--chunk=256K,匹配顺序大文件吞吐
  • NVMe SSD:建议--chunk=1048576(1MB),减少元数据开销
  • 务必加--metadata=1.2,否则/dev/md0可能无法被initramfs识别
  • 热备盘要提前分区为FD00类型,用gdisk设,别用fdisk——后者不识别RAID元数据

阵列建好就完事?漏掉这三步,重启后大概率变md127

linux不会自动记住你手敲的mdadm --create命令。没配mdadm.conf、没更新initramfs、没检查mdstat状态,开机就是降级或未组装状态。

  • 生成配置:sudo mdadm --detail --scan --verbose >> /etc/mdadm/mdadm.conf,然后确认文件里真有Array
  • debian/ubuntu必须跑:sudo update-initramfs -u;RHEL/centossudo dracut -f
  • 启动后立刻查:cat /proc/mdstat,看到active raid5且无degraded才算落地
  • 别信lsblk显示的md0——它可能只是设备节点存在,实际没激活

性能上不去?先关掉barrier=1atime,再看iostat

默认挂载选项会拖慢RAID写入,尤其XFS/ext4下barrier=1强制刷盘,atime记录访问时间纯属IO浪费。但关之前得确认你的磁盘有没有断电保护(BBU/电容)。

  • 安全前提:确认硬盘/阵列有掉电保护(如企业级SSD或带BBU的RAID卡),否则barrier=0有丢数据风险
  • 挂载时加:noatime,barrier=0(XFS)或noatime,errors=remount-ro,barrier=0(ext4)
  • 验证效果:iostat -x 1%util是否长期>90%,await是否持续>20ms
  • 别一上来就调/sys/block/md0/queue/nr_requests——先确保底层没被udev规则或BIOS SATA模式锁死

真正卡住人的地方,往往不是“怎么建RAID”,而是“为什么重启不认”“为什么写入卡在30MB/s不动”“为什么换新盘后同步慢得像爬”。这些都藏在/proc/mdstatdmesg | grep mdmdadm --detail /dev/md0的输出里——别跳过它们。

text=ZqhQzanResources