RAID(Redundant Array of Independent Disks)通过将多块物理磁盘组合为逻辑阵列,提供数据冗余与性能提升。服务器部署中,RAID是数据安全的基础层。硬件RAID卡提供独立计算资源但成本较高,Linux mdadm软件RAID无需额外硬件,在SSD普及后性能表现同样优秀。本文覆盖RAID级别选型、mdadm配置、状态监控与故障恢复的完整流程。
RAID级别特性对比与业务场景选型
不同RAID级别在冗余能力、磁盘利用率和读写性能上差异显著,选型需匹配业务特征:
- RAID 0:条带化,无冗余,N块盘容量为N倍,读写速度最快,任一磁盘故障导致全部数据丢失,仅适合临时数据和缓存
- RAID 1:镜像,两盘互为副本,容量利用率50%,读性能翻倍,写性能略降,适合系统盘和关键配置
- RAID 5:分布式奇偶校验,最少3盘,容量利用率(N-1)/N,允许1盘故障,读性能优秀,写性能受校验计算影响,适合读密集型业务
- RAID 6:双重奇偶校验,最少4盘,容量利用率(N-2)/N,允许2盘同时故障,适合大容量存储和数据安全要求高的场景
- RAID 10:RAID 1+0组合,镜像后条带化,容量利用率50%,读写性能优秀,允许每组镜像坏1盘,适合数据库和高IO场景
生产环境推荐方案:系统盘用RAID 1,数据库存储用RAID 10,文件存储用RAID 6。企业级SSD组建RAID 5/6后写入性能下降已不显著,但重建时间远短于机械硬盘,实际可用性更高。
Linux mdadm软RAID创建与配置
mdadm是Linux标准的软RAID管理工具,支持RAID 0/1/5/6/10等所有级别。以4块2TB SATA SSD组建RAID 10为例。
# 安装mdadm
yum install mdadm -y # CentOS/RHEL
apt install mdadm -y # Ubuntu/Debian
# 查看可用磁盘
lsblk -d -o NAME,SIZE,MODEL,ROTA
# 创建RAID 10阵列(4块盘)
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# 查看阵列状态与同步进度
mdadm --detail /dev/md0
cat /proc/mdstat
# 等待同步完成后格式化
mkfs.xfs /dev/md0
# 创建挂载点并挂载
mkdir -p /data
mount /dev/md0 /data
# 持久化挂载,使用UUID而非设备名
blkid /dev/md0
echo "UUID=xxxx-xxxx-xxxx /data xfs defaults 0 0" >> /etc/fstab
# 保存RAID配置(关键步骤,防止重启后阵列名变化)
mdadm --detail --scan >> /etc/mdadm.conf
update-initramfs -u # Ubuntu/Debian
dracut -H -f # CentOS/RHEL
创建RAID 5阵列只需将–level改为5,最少3块盘。RAID 6改为6,最少4块盘。–raid-devices参数指定数据盘数量,热备盘用–spare-devices单独添加。
RAID阵列状态监控与故障盘替换
磁盘故障时RAID阵列会自动降级运行,及时替换故障盘并重建是数据安全的保障。mdadm支持邮件告警和主动巡检。
# 配置邮件告警(故障时自动通知)
echo "MAILADDR admin@yunthe.com" >> /etc/mdadm.conf
echo "PROGRAM /usr/local/bin/raid-alert.sh" >> /etc/mdadm.conf
# 定期一致性检查(每周日凌晨扫描)
echo "0 0 * * 0 root echo 'check' > /sys/block/md0/md/sync_action" >> /etc/crontab
# 模拟磁盘故障(测试用)
mdadm /dev/md0 --fail /dev/sdc
mdadm --detail /dev/md0 # 状态显示active, degraded
# 移除故障盘
mdadm /dev/md0 --remove /dev/sdc
# 插入新盘并添加到阵列
mdadm /dev/md0 --add /dev/sdf
# 监控重建进度
watch -n 5 cat /proc/mdstat
# 重建完成后状态恢复active
RAID 5在单盘故障时处于降级状态,此时再坏一块盘数据将全部丢失。重建过程中阵列IO性能下降约30%-50%,应在业务低峰期执行。对于重要业务,建议配置热备盘(–spare-devices),故障时自动重建,减少人工干预窗口。
RAID性能测试与扩容方案
使用fio测试RAID阵列的IO性能,关注4K随机读写(数据库典型负载)和顺序读写(文件存储典型负载)。
# 4K随机写测试
fio --name=randwrite --ioengine=libaio --iodepth=32 \\
--rw=randwrite --bs=4k --direct=1 \\
--size=1G --numjobs=4 --runtime=60 \\
--time_based --group_reporting --filename=/data/testfile
# 顺序读测试
fio --name=read --ioengine=libaio --iodepth=32 \\
--rw=read --bs=1M --direct=1 \\
--size=4G --numjobs=1 --filename=/data/testfile
# RAID 10典型性能(4x 2TB SATA SSD):
# 4K随机写:约180K IOPS
# 4K随机读:约350K IOPS
# 顺序读写:约1.8GB/s
mdadm不支持在线扩容已有阵列的磁盘数量。如果需要扩容,方案是新建更大阵列,通过LVM或文件系统层面迁移数据。更实用的做法是使用LVM on RAID:RAID阵列作为LVM物理卷,逻辑卷可以动态扩展。后续添加新RAID阵列为新的物理卷,通过vgextend和lvextend在线扩展逻辑卷容量,无需停机。
# RAID + LVM扩展示例
pvcreate /dev/md0 # 新RAID阵列作为PV
vgextend datavg /dev/md0 # 扩展VG
lvextend -l +100%FREE /dev/datavg/lv_data # 扩展LV
xfs_growfs /data # 在线扩展XFS文件系统
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/fu-wu-qi-ci-pan-raid-zhen-lie-shi-zhan-raid-ji-bie-xuan/