RAID 与企业级存储 —— 从单盘到存储阵列

单盘出错率即便是企业级也不为零。把多盘组成阵列,是数据中心存储的基础动作。本文讲 RAID 各级别、硬 RAID 和软 RAID 的取舍、SAN/NAS 的位置——以及 RAID 在 SSD 和分布式存储时代的角色变化。

RAID 是什么

RAID = Redundant Array of Independent Disks——把多块盘组合起来,用冗余换可靠性,用并行换性能

四个核心思路:

graph TB
  S[条带化
Striping
多盘并行 → 提速] M[镜像
Mirroring
同样数据存两份 → 容错] P[奇偶校验
Parity
多盘共享一块校验 → 容错节省空间] C[组合
RAID 10/50/60]

任何 RAID 都是这几种基础操作的组合。

主流 RAID 级别

RAID 0(条带化)

1
2
3
File:[A][B][C][D][E][F][G][H]
Disk1: A C E G
Disk2: B D F H

没有冗余,纯并行。

容量利用 性能 容错
100% 读写 N 倍 0(任何一盘坏全部丢)

应用:scratch、缓存、能容忍数据丢失的场景。

RAID 1(镜像)

1
2
Disk1: A B C D
Disk2: A B C D(完全相同副本)
容量利用 性能 容错
50% 读 2 倍,写 1 倍 N-1 盘失效

应用:操作系统盘、关键日志、双盘冗余。

RAID 5(分布式奇偶)

1
2
3
4
5
6
7
4 盘 RAID 5:
Disk1: A1 B1 C1 P_d
Disk2: A2 B2 P_c D2
Disk3: A3 P_b C3 D3
Disk4: P_a B4 C4 D4

P_x 是奇偶校验块(XOR)
容量利用 性能 容错
(N-1)/N 读 ~N 倍,写 ~N/4 倍 任意 1 盘

最经典的 RAID 级别。1990s-2010s 被大量使用。关键问题:写惩罚——每次小写要做 4 次 IO(读旧数据 + 读旧 P + 写新数据 + 写新 P)。

RAID 6(双奇偶校验)

1
比 RAID 5 多一份校验(不同算法,通常 Reed-Solomon)
容量利用 性能 容错
(N-2)/N 读 ~N 倍,写更慢 任意 2 盘

应用:大容量 HDD 阵列——SATA HDD 重建几小时,期间二次故障率不可忽略。

RAID 10(条带 + 镜像)

1
2
3
4
4 盘 RAID 10:
Group1: Disk1 + Disk2 (镜像)
Group2: Disk3 + Disk4 (镜像)
两组之间条带化
容量利用 性能 容错
50% 高(读写都快) 每个 mirror 各 1 盘

性能最好的 RAID,但最贵——数据库主存最常用 RAID 10

一表总结

RAID 最少盘 容量利用 容错 写性能 应用
0 2 100% 0 极快 scratch / 缓存
1 2 50% N-1 系统 / 日志
5 3 (N-1)/N 1 慢(写惩罚) 通用、容量盘
6 4 (N-2)/N 2 更慢 大容量阵列
10 4 50% 每组 1 数据库
50 6 (N-2)/N 每组 1 大容量 + 性能
60 8 (N-4)/N 每组 2 超大容量

RAID 的工作模式:硬 RAID vs 软 RAID

硬 RAID(HBA / RAID Controller)

主板上 / PCIe 上一颗 RAID 卡,对 OS 透明

graph TB
  CPU --- RAID[RAID 卡
SoC + DRAM + 电池/电容] RAID --- D1[Disk 1] RAID --- D2[Disk 2] RAID --- D3[Disk 3] RAID --- D4[Disk 4]

特点:

  • OS 看到一个虚拟磁盘,不知道下面有多少盘
  • 卡内自带计算、缓存、电池/电容
  • BIOS / 厂商工具配置
  • 启动盘可以做 RAID(OS 起来之前 RAID 已经工作)

主流厂家:

  • Broadcom / LSI / Avago:MegaRAID 系列,市场占有率最高
  • Microchip / Adaptec:SmartRAID 系列
  • Areca:高端
  • 服务器 OEM 自己包装:HPE Smart Array、Dell PERC、浪潮 Inspur

代表卡:MegaRAID 9670W-16i(PCIe 5.0、24 端口、SAS 4.0/SATA/NVMe 三协议)。

软 RAID

OS 内核做 RAID,不需要 RAID 卡

  • Linux mdadm(最经典)
  • Linux LVM RAID(LVM 自带)
  • ZFS RAID-Z(Solaris/FreeBSD/Linux)
  • btrfs RAID(Linux 内核)

特点:

  • 灵活(可跨控制器、跨设备类型组)
  • 性能取决于 CPU
  • 没有”看似透明”——OS 启动后才能用,启动盘需要 EFI 配合
  • 没有 BBU 电池——关闭 write-back 才安全
1
2
3
4
5
6
7
# 创建 mdadm RAID 6
sudo mdadm --create /dev/md0 --level=6 --raid-devices=4 \
/dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1

# 查看
cat /proc/mdstat
sudo mdadm --detail /dev/md0

HBA 直通模式(IT mode)

很多 RAID 卡可以”刷成 IT mode”——关掉 RAID 功能,直接把盘暴露给 OS

1
2
RAID 卡(IR mode):每个盘伪装成虚拟磁盘
HBA(IT mode): 每个盘原样暴露给 OS

ZFS、Ceph、HDFS 这种”分布式存储”或”软件 RAID”必须 IT 模式——它们要看到原始盘。

RAID 的写惩罚

1
2
3
4
5
6
7
RAID 5 单 4K 写:
1. 读旧 data block
2. 读旧 parity block
3. XOR 计算 new parity
4. 写新 data
5. 写新 parity
→ 4 次 IO 完成 1 次主机 4K 写

写放大 = 4。这就是 RAID 5 写性能差的根本原因。

优化:

  • 写缓存(Write Cache):RAID 卡 DRAM 暂存写,攒成大块再下盘
  • BBU/Flash 备份:write-back 模式必须有,否则掉电丢数据
  • 整条带写(full stripe write):满条带不需要”读 + 改 + 写”
  • TRIM passthrough:SSD RAID 必须,让 SSD 知道哪些数据没用

RAID 的几个隐藏问题

URE(Unrecoverable Read Error)

1
2
3
4
SATA HDD:~1e-14 ~ 1e-15 bit
重建 8 TB RAID 5:
读 8e12 byte × 8 bit = 6.4e13 bit
URE 概率 ≈ 64% (!!!)

大容量 HDD RAID 5 重建期间几乎必然遇到 URE——这就是为什么大盘必须 RAID 6。

企业 SSD UBER 1e-17,RAID 5 还可以接受,但 SAS 旋转盘已经不行。

Write Hole

RAID 5/6 写过程中突然掉电——可能 data 写了 parity 没写,下次重建时用错的 parity 算出错的 data

应对:

  • 硬 RAID 卡的 BBU/Flash 备份
  • ZFS Copy-on-Write(不存在 write hole)
  • 软 RAID 的 journal device

重建时间

1
2
3
8 TB SAS HDD 重建:8-12 小时
22 TB SAS HDD 重建:30-50 小时
8 TB NVMe SSD 重建:2-4 小时

重建期间二次故障的窗口期太长——所以大容量 HDD 必须 RAID 6 或更冗余

RAID 在 SSD 时代的尴尬

数据中心进入 SSD/NVMe 时代后,RAID 卡受到挑战:

痛点 说明
NVMe 速度太快 单盘 14 GB/s,RAID 卡的 SoC 抗不住聚合带宽
NVMe 队列太多 65535 队列 vs RAID 卡内部数百队列
延迟敏感 RAID 卡多一跳,10 μs 延迟变 30 μs
AIC vs RAID 卡 NVMe 直接进 PCIe Root,RAID 卡反而是中介

应对:

  • 部分 RAID 卡走 PCIe 5.0 SoC + DDR4/5 缓存(如 Broadcom 9670W)勉强跟上 4-8 颗 NVMe
  • 大量场景转向 OS 软件 RAID(mdadm、ZFS、Ceph)——CPU 多核 + DPDK/SPDK 比 RAID 卡更快
  • VROC(Intel 虚拟 RAID)/ NVMe RAID:CPU 直接管 RAID,不用专卡

数据中心新方向:云原生场景倾向不做本地 RAID,依赖分布式存储多副本/EC

SAN / NAS / DAS

存储部署方式三种:

graph TB
  subgraph DAS["DAS(直连)"]
    S1[Server] --- D1[内置盘]
  end
  subgraph SAN["SAN(块存储网络)"]
    S2[Server] --- N1[FC/iSCSI/NVMe-oF
专用网络] N1 --- AFA[全闪存阵列
EMC PowerMax
HPE Alletra
NetApp AFF] end subgraph NAS["NAS(文件存储)"] S3[Server] --- N2[Ethernet] N2 --- NFS[NFS/SMB Server
NetApp / 浪潮] end
DAS SAN NAS
协议 SATA/SAS/NVMe FC/iSCSI/FCoE/NVMe-oF NFS/SMB
暴露形式 块设备 块设备 文件
网络 服务器内部 专用 SAN TCP/IP
典型用途 服务器本地 数据库共享存储 文件共享
厂商 OEM EMC、NetApp、HPE、Hitachi NetApp、QNAP

全闪存阵列(AFA)

现代 SAN 主流是 AFA:

  • 几十到几百颗 NVMe SSD
  • 双控制器或多控制器
  • 内置去重 / 压缩 / 快照
  • 容量 100 TB - 数 PB
  • 接口 FC 32G、NVMe-oF(RoCE / TCP)

代表产品:

  • Dell EMC PowerMax / PowerStore
  • Pure Storage FlashArray
  • HPE Alletra
  • NetApp AFF / EF
  • 国产:浪潮 AS、华为 OceanStor Dorado、宏杉、得一微

待补充:作者公司在用的 SAN/NAS 厂商。

国内”超融合”和”云原生”对 SAN/NAS 的冲击

中国市场:

  • 互联网公司(BAT/字节)几乎不用商业 SAN——用 Ceph、HDFS、对象存储、自研分布式
  • 银行/保险/电信仍用商业 SAN(EMC、华为)
  • 私有云和边缘场景:超融合(HCI) 起步——Nutanix、SmartX、深信服等,把存储和计算融合

一些命令实操

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Linux 软 RAID
sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 \
/dev/nvme[0-3]n1
sudo mdadm --detail /dev/md0
cat /proc/mdstat

# LVM RAID
sudo vgcreate vg0 /dev/nvme0n1 /dev/nvme1n1
sudo lvcreate --type raid1 -m1 -L 100G -n lv1 vg0

# 查看 PERC / MegaRAID
sudo storcli /c0 show all
sudo perccli /c0 show all

# ZFS
sudo zpool create tank raidz2 /dev/nvme[0-5]n1
sudo zpool status

# 看到 nvme 通道、容量分布
sudo nvme list-subsys

选型实战

graph TD
  Q1[业务规模]
  Q1 -- "单机 / 小规模" --> A1[本地 RAID 1/10]
  Q1 -- "中等" --> A2[SAN AFA + 数据库]
  Q1 -- "大规模 / 云原生" --> A3[分布式存储
下一篇] Q2[盘类型] Q2 -- HDD --> B1[必须 RAID 6 / RAID-Z2] Q2 -- SSD --> B2[RAID 1/10 / 软 RAID] Q3[关键性?] Q3 -- 高 --> C1[硬 RAID + BBU + 双控] Q3 -- 一般 --> C2[软 RAID 即可]

小结

  • RAID 几十年的核心思路只有三种:条带、镜像、奇偶
  • 大容量 HDD 必须 RAID 6(URE 概率高),大容量 SSD 可以 RAID 5/10
  • 硬 RAID 在 SSD 时代受冲击,软 RAID + 分布式存储正在抢市场
  • SAN(块存储网络)= 块设备 + 专用网络,AFA 是现代主流
  • NAS = 文件级共享,常用 NFS/SMB
  • 互联网公司转向分布式存储,传统行业仍重 SAN

下一篇讲分布式存储入门——Ceph、HDFS、对象存储是怎么把上百节点的盘组成一个池的。