我们出售的每台独立服务器都配有两块 NVMe 硬盘,下单表单会询问您希望如何组织它们。默认的镜像,几乎适合所有人,这也是它成为默认选项的原因。本文面向镜像并不合适的那些时刻:当您对容量的需求高于冗余,当写入成为瓶颈,以及当您想要只有 ZFS 才能提供的校验和与快照时。
磁盘布局
| 布局 | 硬盘数 | 可用容量 | 可容忍的故障 | 读取速度 | 写入速度 |
|---|---|---|---|---|---|
| RAID 1(镜像) | 2 | 1 块盘 | 1 块盘故障 | ~2× 单盘 | 1× 单盘 |
| RAID 0(条带) | 2 | 2 块盘 | 无 | ~2× | ~2× |
| RAID 10 | 4 | 2 块盘 | 每个镜像对 1 块盘 | ~4× | ~2× |
| ZFS 镜像 | 2 | 1 块盘,再减去约 3% | 1 块盘故障,外加静默数据损坏 | ~2× | ~0.9× 单盘 |
| ZFS RAIDZ1 | 3+ | 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,其他一切都不受影响。您可以自行提交工单,也可以等我们这边发起的工单:我们会在下一个窗口更换硬盘,重建会自动运行。对于条带,在我们更换硬盘、并由您重新安装系统之前,服务器都处于宕机状态,到那时人们才会希望自己读过这篇文章。在下单时就选定布局,意义正在于:故障还只是一种假设的时候,就已经决定好了发生故障时会怎样。
