我正计划使用 OpenSolaris 和 ZFS 构建一个文件服务器,它将提供两个主要服务——作为 XenServer 虚拟机的 iSCSI 目标和作为通用家庭文件服务器。我正在查看的硬件包括 2 个 4 端口 SATA 控制器、2 个小型引导驱动器(每个控制器上一个)和 4 个用于存储的大驱动器。这允许每个控制器有一个空闲端口,用于在以后升级阵列。
我有点困惑的是如何设置存储驱动器。就性能而言,镜像似乎是王道。我很难看到使用 RAIDZ 而非镜像有什么好处。通过此设置,我可以看到两个选项 - 一个条带中的两个镜像池,或 RAIDZ2。两者都应该防止 2 个驱动器故障和/或一个控制器故障……RAIDZ2 的唯一好处是任何2 个驱动器都可能发生故障。在这两种情况下,存储都应该是容量的 50%,但第一种应该有更好的性能,对吧?
我要考虑的另一件事是具有两个以上设备的镜像阵列的好处。对于数据完整性,如果有的话,RAIDZ 相对于三向镜像有什么好处?由于 ZFS 维护文件完整性,RAIDZ 带来了什么……ZFS 的完整性检查不会否定 RAIDZ 的奇偶校验值吗?
RAID-Z 以一些 CPU 时间为代价,消除了 RAID 5/6 卷遭受的大部分写入损失和数据完整性问题。通常,系统有空闲的 CPU 周期,因此花费 CPU 时间来提高 IO 性能和数据完整性是与镜像相比的一个很好的折衷方案。
这是RAID-Z的详细说明,可能会回答其他问题。
另外,请记住RAID 是一种容错解决方案。您没有实施 RAID-Z2 来防止数据丢失——您执行备份或复制来做到这一点。您选择实施 RAID-Z2 与 RAID-Z 或 RAID-10 与 RAID-6 与 RAID-5,以在发生硬件故障时保持系统运行。
简单的答案是镜像某些东西几乎不需要处理能力——它只是第二次写入磁盘。对于 RAID-Z2,您必须计算一个全新的奇偶校验块,尽管当您必须快速写入大量数据时,它虽然很小,但会使 CPU 陷入困境。
镜像始终是高速数据的首选解决方案,如果它只是没有快速写入速度的大容量存储,RAID-Z2 是一个很好的选择,它确实允许任何两个驱动器像您提到的那样死机。
另一个优点是镜像池可以使用更多镜像设备进行扩展 - 而 RAID-Z2 无法扩展 - 虽然可以将更多 RAID-Z2 存储添加到池中,但它将是两个 RAID-Z2 存储池串联(在效果)而不是在所有存储和条带化之间平均分配。
镜像和 RAIDZ1/2 [1] 之间的主要性能差异不是预期的 CPU 使用率(我们现在有很多),而是 ZFS 随机 IOPS 取决于vdev的总数而不是磁盘的总数这一事实。
例如,4x 2-way mirrors 提供高达 8x 的随机读取性能和 4x 的单个磁盘的随机写入性能。另一方面,8x RAIDZ2 vdev(6 数据 + 2 奇偶校验)将提供与单个磁盘相同的随机 IOPS。
换句话说:对于随机 IO 繁重的工作负载,镜像是性能方面的最佳选择。
[1]:RAIDZ3 在 CPU 方面明显更重。