服务器运维

RAID 0 RAID 1 RAID 5 RAID 10 区别:一张表对比,按场景选

RAID 0、RAID 1、RAID 5、RAID 10 的区别核心在冗余方式:RAID 0 只条带,坏一块全丢;RAID 1 两块盘互为镜像;RAID 5 拿一块盘的容量存校验,容量划算但小块写和重建慢;RAID 10 先镜像再条带,容量减半,换来稳定的随机写。数据库、虚拟化选 RAID 10,系统盘选 RAID 1,读多写少要容量选 RAID 5。

作者 顶联产品团队发布于 6 分钟阅读

RAID 0、RAID 1、RAID 5、RAID 10 的区别,归根到底是数据怎么冗余。RAID 0 把数据切块轮流写到所有盘上,没有任何冗余;RAID 1 让两块盘存完全相同的数据;RAID 5 在每行数据旁边存一份奇偶校验,坏一块盘能算回来;RAID 10 先把盘两两做成镜像,再把镜像组做条带。冗余方式决定了其余的一切:最少几块盘、能用多少容量、写入要付出多少额外 IO、坏盘后还能不能用、重建要读多少数据。

RAID 0、RAID 1、RAID 5、RAID 10 区别对比表

N 为盘数,C 为单盘容量:

对比项 RAID 0 RAID 1 RAID 5 RAID 10
原理 条带:数据切块,轮流写到各盘 镜像:两块盘存相同数据 条带 + 分布式奇偶校验 先两两镜像,再条带
最少盘数 2 2 3 4,且为偶数
可用容量 N × C C(2 块盘时为一半) (N − 1) × C N / 2 × C
随机读 约 N 块盘之和 约 2 块盘之和 约 N 块盘之和 约 N 块盘之和
随机写(写惩罚) 约 N 块盘(1) 约 1 块盘(2) 约 N / 4 块盘(4) 约 N / 2 块盘(2)
大块顺序写 约 N 块盘 约 1 块盘 约 N − 1 块盘 约 N / 2 块盘
允许坏几块 0 1 1 至少 1,最多 N / 2(每个镜像组各 1 块)
坏 1 块之后 整卷数据丢失 照常读写,失去冗余 降级运行,读坏盘上的数据要读其余所有盘再计算 只有那一组少了一份副本
重建要读多少 无法重建 剩下的那 1 块 其余 N − 1 块全部 镜像伙伴 1 块
重建难度 — 低,整盘复制 高,逐行计算,耗时长、对业务影响大 低,整盘复制
典型用途 临时数据、可随时重建的缓存 系统盘、小型业务 读多写少、容量优先 数据库、虚拟化

表里最关键的一行是“随机写”。括号里的数字叫写惩罚,指业务写一次,磁盘实际要做几次 IO:

  • RAID 0 是 1:数据只写一份。
  • RAID 1、RAID 10 是 2:同一份数据写到镜像的两块盘上。
  • RAID 5 是 4:只改一个数据块时,要先读旧数据、读旧校验,算出新校验,再写新数据、写新校验,共 2 次读加 2 次写。

随机读四种级别差不多,都能用上几乎全部的盘;真正拉开差距的是随机写、坏盘后的表现和重建。

同样 4 块 8 TB 盘,四种做法各得到什么

4 块盘是四种级别都能做(RAID 1 做成两组)的最小盘数,用它比较最直观。假设每块 7200 转机械盘随机读写约 150 IOPS、顺序写约 200 MB/s,以下是理论估算:

做法 可用容量 系统里约显示 随机读 随机写 顺序写 能坏几块
RAID 0 32 TB 29.10 TiB 约 600 IOPS 约 600 IOPS 约 800 MB/s 0
RAID 5 24 TB 21.83 TiB 约 600 IOPS 约 150 IOPS 约 600 MB/s 1
RAID 10 16 TB 14.55 TiB 约 600 IOPS 约 300 IOPS 约 400 MB/s 1,坏在不同镜像组时可到 2
两组 RAID 1 两个独立的 8 TB 卷 各 7.28 TiB 每卷约 300 IOPS 每卷约 150 IOPS 每卷约 200 MB/s 每组 1

几点解读:

  1. RAID 5 比 RAID 10 多 8 TB,随机写却只有一半。 带掉电保护写回缓存的阵列卡能把突发写入先接住,实际表现会好于这个估算;持续写入超过缓存能力后,还是回到这个比例。
  2. 两组 RAID 1 和 RAID 10 容量相同,但它是两个独立的卷,单个卷的性能只有 RAID 10 的一半。业务能按目录拆开(比如系统一组、数据一组)时可以这样用,否则 RAID 10 更合适。
  3. RAID 0 的数字最好看,风险也随盘数放大。 任何一块盘坏,32 TB 全部丢失。假设单盘一年内损坏的概率是 2%,4 块盘的 RAID 0 一年内丢数据的概率约为 1 − 0.98⁴ ≈ 7.8%,接近单盘的 4 倍。
  4. 只有 2 块盘时只能二选一:RAID 0 得到 16 TB、约两倍的速度、零容错;RAID 1 得到 8 TB、单盘的写速度、能坏 1 块。除非数据可以随时重新生成,否则选 RAID 1。

换成 SSD 后,单盘随机 IOPS 高出两三个数量级,多数业务的瓶颈从性能变成容量,RAID 5 的写惩罚就不那么显眼了;但重建和降级的差别仍然存在。

坏一块盘之后:容错与重建差在哪

真正决定一种级别“好不好用”的,常常不是平时的性能,而是坏盘之后那几个小时到几天。仍以 4 块 8 TB 盘为例:

级别 坏 1 块后的业务 重建要读的数据 重建完成前,再出什么事会丢数据
RAID 0 整卷不可用 — 已经丢了,只能从备份恢复
RAID 1 基本正常,读请求只能走剩下的一块盘 8 TB 剩下的那块盘再坏,或读不出某些扇区
RAID 5 明显变慢,读坏盘上的数据要读其余 3 块再计算 24 TB 其余 3 块中任何一块再坏;任何一块读不出某个扇区,对应的数据块就补不回来
RAID 10 只影响坏盘所在的镜像组 8 TB 只有坏盘的镜像伙伴再出问题才会丢数据

重建时间在服务器空闲时主要取决于新盘写满需要多久,几种级别差别不大;业务繁忙时差别就出来了:RAID 1、RAID 10 的重建只占用两块盘,RAID 5 每重建一行都要读其余所有盘,和业务抢的是整个阵列的 IO,阵列卡还会为了保业务给重建限速,于是拖得更久,而这段时间里阵列没有任何冗余。

所以“RAID 5 能坏任意一块,RAID 10 坏两块要看位置,RAID 5 更安全”的说法并不成立:两者都只保证扛住 1 块,而坏盘之后 RAID 5 的风险窗口更长、暴露面更大。

先按盘数缩小范围

手里有几块盘,往往已经替你排除了一半选项:

盘数 能做的级别 常见选择
1 无冗余 只放能重建的数据,并另做备份
2 RAID 0、RAID 1 RAID 1;只有临时数据才用 RAID 0
3 RAID 0、RAID 5,或 RAID 1 加 1 块热备 要容量选 RAID 5;写多、重视坏盘后的安全,选 RAID 1 加热备
4 RAID 0、RAID 5、RAID 10 写多选 RAID 10,读多、要容量选 RAID 5
6–8 同上,还能拆成两组 2 块做 RAID 1 装系统,其余做 RAID 10 或 RAID 5 放数据
8 块以上的大容量机械盘 同上 RAID 5 重建风险偏高,改用 RAID 10 或 RAID 6

最后一行超出了本文的四种级别,但值得记住:单盘容量越大、盘数越多,RAID 5 重建要读的数据越多、时间越长,大容量机械盘阵列通常不再用 RAID 5。

再按业务选:数据库、虚拟化、备份

数据库:RAID 10

数据库的写入是小块随机写,InnoDB 的数据页默认 16 KB,事务日志还要频繁同步刷盘,对写延迟非常敏感。RAID 5 每次小块写要 4 次 IO,延迟高且不稳定;坏盘降级时查询变慢,往往直接表现为业务超时。

一台 8 盘位数据库服务器的典型配法:2 块 480 GB SSD 做 RAID 1 装系统,6 块 1.92 TB SSD 做 RAID 10 放数据目录,可用 5.76 TB。只读从库、报表库这类读多写少的实例,可以用 RAID 5 换容量;有人在可以随时从主库重建的从库上用 RAID 0,前提是接受坏盘后要花几个小时重新同步一份完整数据。

虚拟化宿主机:RAID 10,SSD 盘少时 RAID 5 也可以

一台宿主机上跑着几十台虚拟机,每台的顺序读写叠加在一起,到了磁盘上就变成了随机读写;一块盘降级,所有虚拟机一起变慢。所以本地存储首选 RAID 10,例如 2 块盘做 RAID 1 装虚拟化平台,8 块 SSD 做 RAID 10 存放虚拟机磁盘。全闪存、盘数在 3–5 块、写入不重的小集群,用 RAID 5 换容量也很常见。

用 VMware ESXi 时还有一条硬约束:单台主机的本地存储要冗余只能靠阵列卡,ESXi 本身不提供软 RAID(vSAN 这类跨主机的分布式存储是另一回事)。

备份服务器:容量优先,RAID 5 起步

备份是大块顺序写,正好是 RAID 5 不吃写惩罚的场景(整行写入时直接算出校验,不用读旧数据),而 RAID 10 拿一半容量换来的随机写优势在这里用不上。4 块 8 TB 盘做 RAID 5 可用 24 TB;盘数到 8 块以上或单盘更大时,换成 RAID 6。备份服务器上不要用 RAID 0,它存的往往是最后一份副本。也别忘了,备份服务器本身不应该是唯一的副本,重要数据还要再拷一份到另一个地方。

其他常见业务

  • 网站、文件共享、下载站:读多写少,盘少时 RAID 1,容量需求大时 RAID 5。
  • 编译缓存、转码中间文件、CDN 缓存节点:数据丢了可以重新生成,用 RAID 0 或直接单盘,冗余不如容量和速度重要。
  • 系统盘:两块盘做 RAID 1,和数据盘分开,以后重装系统或换数据盘的级别时互不影响。

在管理系统里怎么落地

在 IDC 出租的服务器上,RAID 级别通常在交付前就定好了,客户拿到的是一块虚拟盘,重装系统不会改变阵列。客户后来想换级别(比如从 RAID 5 改成 RAID 10),就不是重装能解决的:阵列要删除重建,盘上的数据会全部丢失。比较顺的流程是三步:客户先把数据备份到别处;运维在 IPMI 远程管理 里打开走 BMC 通道的 VNC 控制台,进阵列卡界面按新级别重建虚拟盘,不必到机房接显示器;客户再在 客户自助端 自己选镜像重装系统、恢复数据。

Toplink DCIM 的自助端里,重装、救援这类高危操作要输入手机上的 OTP 动态口令才执行,重装进度在任务队列里可以看到,也可以取消。把“改 RAID 级别要先备份”写进套餐说明,能省掉很多事后的纠纷。

常见问题

同一台服务器能同时用 RAID 1 和 RAID 5 吗?

能。阵列卡上可以有多个磁盘组,每组单独选级别,常见做法是 2 块盘做 RAID 1 装系统,其余盘做 RAID 5 或 RAID 10 放数据。一块盘同一时间只能属于一个磁盘组。

RAID 1 的读速度是单盘的两倍吗?

并发读多时,请求可以分摊到两块盘上,总吞吐接近两倍;单个大文件的顺序读,多数实现只从一块盘读,速度和单盘差不多。写入则始终是单盘的速度,因为两块盘都要写。

软 RAID 的 RAID 10 和阵列卡上的一样吗?

容量和容错的算法一样。Linux mdadm 的 raid10 是独立实现,还支持奇数块盘和 near、far、offset 几种布局,其中 far 布局的顺序读接近 RAID 0,代价是写入稍慢;阵列卡上的 RAID 10 通常就是经典的两两镜像再条带。

想看看在你的机房里怎么用?

从一次产品演示开始,梳理你的业务链路。

查看价格
服务热线 400-112-2951

让我们聊聊你的 IDC 业务

扫码添加企业微信,预约产品演示或申请试用。

Toplink 企业微信二维码

长按保存或使用企业微信 / 微信扫描

也可致电
400-112-2951
Telegram
@TopLink88