ZFS 和缓存设备

dis*_*man 10 zfs ssd cache

我将向我的 ZFS 存储添加一个 SSD 驱动器作为缓存。任何人都有这方面的经验?如果缓存设备死了,任何数据会受到影响吗?

not*_*ter 14

基本上有三种类型的 ZFS 缓存,都用于数据和元数据。

  • ARC(自适应替换缓存)- 用于读取和写入的主内存 DRAM 缓存。
  • L2ARC (Level 2 ARC) - 安全读取缓存:设备故障不会导致数据丢失/服务中断。通常基于 SSD。
  • ZIL(ZFS 意图日志) - 安全地保存永久存储上的写入,这些写入也在 ARC 中等待刷新到磁盘。数据应该很少在这个缓存中停留超过 30 秒,除非在崩溃后重放任何未提交的池写入,否则数据永远不会被读取。在最近的任何 ZFS 版本中,Zil 设备故障不会导致数据丢失(所有数据仍在 ARC 中),但设备故障 + 崩溃或断电可能会导致某些写入丢失。

首先升级您的 ARC,购买大量主内存。注意 L2ARC 和 Zil 也都有分配给 ARC 的开销。

L2Arc 由读取缓存块填充,因为它们从 ARC 中被逐出。默认情况下,ZFS 仅将随机 IO(小读)缓存到 L2ARC 中,并且不用于流式处理工作负载(除非有指示)。您基本上可以为此使用任何设备(包括快速 15k 高清),但它最适合轻松处理许多随机读取 IOPS 的 SSD。

ZIL 加速需要同步写入的工作负载(进程在继续执行之前等待确认写入实际上已提交到磁盘)。Zil 在高端 RAID 控制器上执行与电池备份缓存类似的角色。尽管写入延迟和流写入 IOPS 定义了一个好的 Zil SSD,但 Zil 最重要的是在断电时绝不能丢失任何数据。许多合适的设备都有一个超级电容器,可以在没有系统电源的情况下完成任何挂起的操作。过去推荐使用具有高写入耐久性的 SLC SSD(Intel X25-E),但较新的设备使用带有电池/超级电容的 RAM 在发生电源故障时写回 NAND。ZIL 不需要很大,但只需使用大型设备的一小部分(例如 300GB Intel 320 MLC SSD 中的 8GB),您可以获得更高的有效写入耐久性。“企业”供应商总是推荐镜像 ZIL,我的工作负载从未如此重要。

至于具体的产品,STEC 为 Sun 的 Fishworks 项目(Logzilla 和 Readzilla)制造了第一批 SSD,并拥有适用于 ZIL(ZeusRAM $2500/8GB)和 L2ARC(Zeus IOPS $3k/400GB)的当前设备,这两种设备都强烈推荐。基于 PCIe 的 SSD 也值得考虑,例如 ZIL 特定的DDRdrive x1(2000 美元/4GB)或任何用于 L2ARC 的大型 PCIe SSD。其他性能较低(读取:更便宜)的 2.5 英寸 SSD 设备也可以提供显着的性能提升,尤其是在聚合用于 L2ARC 时。

  • OCZ Vertex2Pro 是 MLC NAND,但与几乎所有其他 SSD 不同,它具有超级电容,允许在断电时完成正在进行的写入。DDRdrive X1 是 4GB DDR2、4GB SLC 和超级电容,可在断电 60 秒内将 ram 复制到 NAND。Logzilla 是写优化的 SLC NAND,带有超级电容(也没有 DDR) (3认同)