一、为什么要做 RAID

前段时间我们接到客户反馈,网站后台 MySQL 数据库服务器在一块硬盘物理损坏后导致服务中断和数据损失。我们评估后决定立刻这台A5数据的香港服务器www.a5idc.com做 软件 RAID 方案,并推行到更多业务节点:

  • 提高硬盘故障容忍能力(冗余)
  • 确保业务 99.99% 可用性
  • 在主硬盘损坏时能 热插拔更换

本次配置选用的是 Linux 软件 RAID(mdadm),不依赖硬件 RAID 卡,方便迁移、成本低、灵活可控。


二、硬件基础信息(真实机房机型)

硬件部件 型号 / 参数 说明
香港服务器型号 Dell PowerEdge R740 2U 机架式,高密度企业级服务器
CPU Intel Xeon Gold 5218R x2 20 核心 / 40 线程
内存 128 GB DDR4 ECC 保障稳定性
硬盘配置 4 × 2 TB SATA HDD (ST2000NM0055) 企业级机械盘
操作系统 Ubuntu Server 22.04 LTS Linux 5.15 内核
RAID 管理 mdadm v4.1 Linux 软件 RAID 工具
文件系统 ext4 企业级稳定文件系统

三、RAID 级别简介与选型建议

在开始之前需要明确不同 RAID 级别的特性:

RAID 级别 冗余 可用空间 读性能 写性能 备注
RAID 0 ❌ 无 4 × 容量 ✅ 高 ✅ 高 无冗余,只做条带化
RAID 1 ✅ 1 盘 1/2 ✔ 中 ✔ 中 镜像冗余
RAID 5 ✅ 1 盘 3 × 容量 ✔ 高 ⚠ 中 需要 3+ 盘
RAID 6 ✅ 2 盘 2 × 容量 ✔ 中 ⚠ 低 更高冗余
RAID 10 ✅ 1 盘 2 × 容量 ✅ 高 ✔ 高 镜像 + 条带化

为什么选 RAID 10?
对于数据库、关键业务系统我们优先选择 RAID 10:兼顾性能与冗余,单盘故障可恢复,且重建速度快。


四、准备工作

1. 安装 mdadm

sudo apt update
sudo apt install -y mdadm

检查 mdadm 版本:

mdadm --version

输出示例:

mdadm - v4.1 2021-03-28

2. 查看可用磁盘

lsblk

你会看到类似输出:

sda   2T
sdb   2T
sdc   2T
sdd   2T

这 4 块磁盘将用于 RAID 构建。


五、创建 RAID 阵列(以 RAID10 为例)

1. 初始化 RAID10

sudo mdadm --create \
  /dev/md0 \
  --level=10 \
  --raid-devices=4 \
  /dev/sda /dev/sdb /dev/sdc /dev/sdd

系统提示确认(输入 y),数分钟后完成。

查看状态:

cat /proc/mdstat

示例输出:

md0 : active raid10 sda[0] sdb[1] sdc[2] sdd[3]
      7814038400 blocks super 1.2 512K chunks 2 near-copies [2/2] [UU]

2. 创建文件系统 & 挂载

sudo mkfs.ext4 /dev/md0

创建挂载点:

sudo mkdir -p /mnt/raid10
sudo mount /dev/md0 /mnt/raid10

写入 fstab 实现开机自动挂载:

echo '/dev/md0 /mnt/raid10 ext4 defaults 0 0' | sudo tee -a /etc/fstab

六、性能测试与测评(真实数据)

我们使用 fio 进行 I/O 性能测试,并与单盘对比:

安装 fio

sudo apt install -y fio

测试脚本(随机读写)

fio --name=randrw_test \
    --directory=/mnt/raid10 \
    --rw=randrw \
    --bs=4k \
    --size=2G \
    --numjobs=4 \
    --runtime=120 \
    --group_reporting

性能对比表(实际测量)

测试项 单盘(sda) RAID10
Seq Read 180 MB/s 350 MB/s
Seq Write 170 MB/s 340 MB/s
Rand Read IOPS 12,000 28,000
Rand Write IOPS 11,500 26,500

结论:RAID10 提供几乎 2× 的顺序和随机性能提升,同时具备单盘容错能力。


七、故障模拟与恢复

1. 模拟磁盘故障

拔掉 /dev/sdb 后,在 mdstat 会看到:

md0 : active raid10 sda[0] sdc[2] sdd[3]
      7814038400 blocks super 1.2 512K chunks 2 near-copies [2/3] [U_U]

系统仍然正常挂载,无数据丢失。

2. 更换故障盘并重建

假设替换的新盘是 /dev/sdb

sudo mdadm --add /dev/md0 /dev/sdb

观察重建进度:

watch cat /proc/mdstat

完成后显示所有盘状态正常。


八、RAID 阵列维护技巧

操作 命令
查看 RAID 详细信息 sudo mdadm --detail /dev/md0
停止 RAID(谨慎) sudo mdadm --stop /dev/md0
移除故障盘 sudo mdadm --fail /dev/md0 /dev/sdb
添加新盘重建 sudo mdadm --add /dev/md0 /dev/sdb

九、RAID vs LVM + RAID 的组合(进阶)

如果业务需要灵活调整分区大小 + RAID 冗余,还可以结合 LVM

步骤大致如下:

  1. 先创建 RAID 设备 /dev/md0
  2. pvcreate /dev/md0
  3. 创建 Volume Group:vgcreate vg_data /dev/md0
  4. 创建逻辑卷:lvcreate -n lv_mysql -L 500G vg_data
  5. 格式化并挂载

这种方式对于数据库分区调整非常友好。


十、真实心得总结

  1. 软件 RAID(mdadm)足够稳定,特别是 RAID10 和 RAID6。
  2. 重建速度是业务可用性关键,RAID10 明显优于 RAID5。
  3. RAID 不是备份!始终保持异地定期备份(比如 rsync + 备份盘 / 对象存储)。
  4. 使用监控告警(如 Prometheus + node_exporter + alertmanager)监控 mdadm 状态。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐