RAID 1、RAID 10 还是 ZFS 镜像:如何为独立服务器选择存储方案

每种布局会让您损失多少容量和速度,能防住哪些故障,以及我们为什么会应您的要求安装 ZFS on root。

C工CheapServ 工程团队作者 7 分钟阅读
基座上的镜像硬盘,二者之间连着一条发光的链路
本页目录7
  1. 磁盘布局
  2. 镜像:默认选项及其原因
  3. 条带:容量优先时
  4. RAID 10:四块盘,写入是重点
  5. ZFS:校验和、快照与复制
  6. 决策速查表
  7. 硬盘损坏时

我们出售的每台独立服务器都配有两块 NVMe 硬盘,下单表单会询问您希望如何组织它们。默认的镜像,几乎适合所有人,这也是它成为默认选项的原因。本文面向镜像并不合适的那些时刻:当您对容量的需求高于冗余,当写入成为瓶颈,以及当您想要只有 ZFS 才能提供的校验和与快照时。

磁盘布局

布局硬盘数可用容量可容忍的故障读取速度写入速度
RAID 1(镜像)21 块盘1 块盘故障~2× 单盘1× 单盘
RAID 0(条带)22 块盘无~2×~2×
RAID 1042 块盘每个镜像对 1 块盘~4×~2×
ZFS 镜像21 块盘,再减去约 3%1 块盘故障,外加静默数据损坏~2×~0.9× 单盘
ZFS RAIDZ13+n − 1 块盘1 块盘故障良好小块随机写入较低

这里的“速度”是相对于单块企业级 NVMe 硬盘而言的,而单块盘本身就能提供数十万 IOPS;对大多数负载来说,磁盘布局并不会改变您的实际体感。真正要紧的是可用容量,以及一块盘损坏时会发生什么。

镜像:默认选项及其原因

两块盘,每块都保存全部数据。其中一块损坏时,服务器会在另一块上继续运行,我们会在下一个维护窗口更换故障盘(您提出要求的话可以更早),镜像则在后台重建,一块 2 TB 的盘大约需要二十分钟。没有停机,也无需恢复数据。读取请求由两块盘共同响应,所以数据库和 Web 服务这类读密集型负载,会比单盘略快。代价是损失一半的原始容量;对于配有两块 2 TB 硬盘的服务器,这意味着可用容量为 2 TB。

镜像默认使用 Linux 软件 RAID(mdadm):没有会出故障、或向您隐瞒错误的硬件控制器,cat /proc/mdstat 任何时候都能告诉您真实状态。控制面板的存储标签页显示的是同样的状态,并且会在硬盘降级时给您发送邮件。

条带:容量优先时

条带把两块盘当作一块大盘使用,没有任何冗余。它适合存放可以重新生成的数据:构建缓存、渲染用的临时空间、主库在别处的数据库副本、转码节点。任何一块盘损坏,两块盘上的数据都会全部丢失,所以规则是:条带上的任何内容,都不应是某份数据的唯一副本。只要有可靠的异地备份,用这样的代价换来双倍的空间,就是一笔划算的交易。

RAID 10:四块盘,写入是重点

在四盘配置上,RAID 10 是跨两组镜像做条带:可用空间相当于 2 块盘,每个镜像对中的任意一块盘都可以损坏,写入会分散到两组镜像上,而不是全部压在一组上。它是写入密集型数据库和消息队列的首选布局,因为在这类场景里,镜像的单盘写入上限会直接体现在延迟分位数上。如果您的负载以读为主,多出来的硬盘对容量的帮助大于对速度的帮助,这时按用途拆分,一对镜像加一对条带,往往是更好的用法。

ZFS:校验和、快照与复制

ZFS on root 附加组件会把基础系统安装在 ZFS 镜像上,而不是 mdadm 上。随之而来的有三样其他布局都无法提供的东西:

  • 端到端校验和。每个数据块在读取时都会被校验。一块悄悄返回错误数据的硬盘(这比轰然损坏的情况更常见)会被发现,系统会改用另一块盘上的好副本,并把它重写回去。mdadm 无法判断镜像的哪一侧是对的,ZFS 可以。
  • 几乎零成本的快照。zfs snapshot rpool/data@before-upgrade 只需几毫秒,在数据发生变化之前不占用空间。它与控制面板里的快照是同一个思路,但完全由您掌控,可以脚本化,以数据集为单位,回滚只需一秒。
  • 复制。zfs send | ssh other-server zfs receive 会把增量快照传送到第二台服务器,这是我们所知道的、在另一个节点保存独立服务器热备副本的最便宜的方式。

代价是小块写入的原始吞吐量损失约 5%,以及每 TB 容量约需 1 GB 内存才能让缓存发挥作用,而对一台 64 GB 内存的服务器来说,这根本不算什么。有一条铁律:永远不要把 ZFS 架在硬件 RAID 卷之上,我们也不这么做;该附加组件会把裸盘直接交给 ZFS。

决策速查表

  • Web、应用、数据库,以及一切丢了会让您难过的数据:镜像(默认),如果想要快照和校验和,则选 ZFS 镜像。
  • 临时数据、缓存、副本、渲染节点:条带,前提是明白这些数据是可丢弃的。
  • 四盘服务器上写入密集的数据库:RAID 10。
  • 备份目标、文件服务器,以及任何有很多块盘的场景:ZFS RAIDZ1 或由多组镜像构成的存储池,通过工单与我们一起选定。

硬盘损坏时

服务器会给您发送邮件,并在控制面板中把阵列标记为降级。对于镜像或 RAID 10,其他一切都不受影响。您可以自行提交工单,也可以等我们这边发起的工单:我们会在下一个窗口更换硬盘,重建会自动运行。对于条带,在我们更换硬盘、并由您重新安装系统之前,服务器都处于宕机状态,到那时人们才会希望自己读过这篇文章。在下单时就选定布局,意义正在于:故障还只是一种假设的时候,就已经决定好了发生故障时会怎样。

C工
CheapServ 工程团队

负责构建开通流水线、控制面板和存储层的工程师。

一分钟内部署您的第一台服务器。

以 BTC、ETH、XMR 或 USDT 充值,$25 起。余额永不过期,未使用的部分可退款。

立即注册