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