我们有 20 个 2TB SATA 驱动器用于 ZFS 池。我需要一些建议,以了解如何实现良好的 I/O 性能,同时能够提供一些冗余(我们希望在数据丢失之前发生 3 个磁盘故障)。
我有点困惑,是否需要使用镜像还是 raidz。
20 个驱动器将插入 2 个 16 端口 raid 控制器(每个控制器 10 个)。也许我为每批 10 个磁盘创建硬件 raid 卷,然后在 zfs 中镜像两个可用的 raid 卷,从而创建一个超级卷?
任何建议都很好。
答案1
有了 20 个磁盘,您就有很多选择。我假设您已经有操作系统的驱动器,因此这 20 个磁盘将是专用的数据驱动器。在我看来太阳火x4540(48 个驱动器),我在镜像设置中分配了 20 个驱动器,在条带 raidz1 配置中分配了 24 个驱动器 (每个 raidz 6 个磁盘和 4 个条带 vdev)。两个磁盘用于操作系统,其余为备用。
您正在使用哪个控制器?您可能需要参考:ZFS SAS/SATA 控制器建议
如果可以,请不要使用硬件 raid。当驱动器作为原始磁盘呈现给操作系统时,ZFS 会蓬勃发展。
raidz1 性能会随着 raidz1 组中条带数量的增加而提高。如果使用 20 个磁盘,则可以使用 4 个 raidz1 组(每个组包含 5 个磁盘),或者 5 个 raidz1 组(每个组包含 4 个磁盘)。后者的性能会更好。该设置中的容错能力将承受每组 1 个磁盘的故障(例如,在适当条件下可能会有 4 个或 5 个磁盘发生故障)。
raidz1 或 raidz2 组的读取速度相当于一个磁盘的读取速度。使用上述设置,理论上的最大读取速度将相当于 4 个或 5 个磁盘(对于每个 vdev/raidz1 磁盘组)。
使用镜像设置可以最大程度地提高速度,但此时您将遇到控制器的带宽限制。您可能不需要这种速度,因此我建议使用 raidz1 和 stripes 的组合。在这种情况下,每个镜像对可以承受一个故障磁盘(例如,如果它们是正确的磁盘,则 10 个磁盘可能会发生故障)。
无论如何,无论采用哪种解决方案,您都应该考虑热备用配置。也许是 18 个磁盘采用镜像配置,其中 2 个热备用,或者 3 条带 6 磁盘 raidz1,其中 2 个热备用...
当我构建我的第一个 ZFS 设置时,我使用了 Sun 的这个说明来帮助了解 RAID 级别的性能……
http://blogs.oracle.com/relling/entry/zfs_raid_recommendations_space_performance
20 个磁盘的示例:
20 个磁盘镜像对。
pool: vol1
state: ONLINE
scrub: scrub completed after 3h16m with 0 errors on Fri Nov 26 09:45:54 2010
config:
NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 0
mirror ONLINE 0 0 0
c4t1d0 ONLINE 0 0 0
c5t1d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c6t1d0 ONLINE 0 0 0
c7t1d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c8t1d0 ONLINE 0 0 0
c9t1d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c4t2d0 ONLINE 0 0 0
c5t2d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c6t2d0 ONLINE 0 0 0
c7t2d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c8t2d0 ONLINE 0 0 0
c9t2d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c4t3d0 ONLINE 0 0 0
c5t3d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c6t3d0 ONLINE 0 0 0
c7t3d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c8t3d0 ONLINE 0 0 0
c9t3d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c4t4d0 ONLINE 0 0 0
c5t4d0 ONLINE 0 0 0
20 磁盘条带化 raidz1,由 4 个 5 磁盘 raidz1 vdev 条带组成。
pool: vol1
state: ONLINE
scrub: scrub completed after 14h38m with 0 errors on Fri Nov 26 21:07:53 2010
config:
NAME STATE READ WRITE CKSUM
vol1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c6t4d0 ONLINE 0 0 0
c7t4d0 ONLINE 0 0 0
c8t4d0 ONLINE 0 0 0
c9t4d0 ONLINE 0 0 0
c4t5d0 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c6t5d0 ONLINE 0 0 0
c7t5d0 ONLINE 0 0 0
c8t5d0 ONLINE 0 0 0
c9t5d0 ONLINE 0 0 0
c4t6d0 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c6t6d0 ONLINE 0 0 0
c7t6d0 ONLINE 0 0 0
c8t6d0 ONLINE 0 0 0
c9t6d0 ONLINE 0 0 0
c4t7d0 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c6t7d0 ONLINE 0 0 0
c7t7d0 ONLINE 0 0 0
c8t7d0 ONLINE 0 0 0
c9t7d0 ONLINE 0 0 0
c6t0d0 ONLINE 0 0 0
编辑:或者如果您想要两个存储池,您可以将 20 个磁盘分成两组:
10 disks in mirrored pairs (5 per controller).
AND
3 stripes of 3-disk raidz1 groups
AND
1 global spare...
这为您提供了两种类型的存储、良好的冗余、备用驱动器,并且您可以连续测试每个池的性能。
答案2
看看最佳实践指南。
我们有 20 个 2TB SATA 驱动器用于 zfs 池。我需要一些关于如何实现良好 i/o 性能的建议,同时能够提供一些冗余(我们希望在数据丢失之前出现 3 个磁盘故障)。
带有 RAIDZ-3(三重奇偶校验 RAID)的 ZFS 将为您提供所需的冗余。与任何 RAID-5 式配置一样,i/o 性能对于读取来说会比写入更好,并且它是否“足够好”在很大程度上取决于您的硬件。其他人可能能够提供有关此领域的更好信息(我使用的 ZFS 文件系统在设计时并未将性能作为主要考虑因素)。
20 个驱动器将插入 2 个 16 端口 raid 控制器(每个控制器上 10 个)。也许我为每批 10 个磁盘创建硬件 raid 卷,然后在 zfs 中镜像两个可用的 raid 卷,创建一个超级卷?
ZFS 的一大优势是它将 RAID、卷管理和文件系统管理整合到一起,为您提供环境的单一管理点。如果您在 JBOD 配置中配置磁盘,您将获得更大的灵活性。
答案3
每个人都告诉你使用 RAIDZ 是错误的。RAIDZ 是糟糕的为了提高性能!镜像是提高性能的最佳方式!仅当您需要空间大于性能时才使用 RAIDZ。
您有 20 个磁盘。创建 9 个双向镜像 vdev 和两个热备用。这样,即使三个磁盘发生故障,您仍可拥有 18TB 的存储空间。
不要使用硬件 RAID根本。如果可能,请在 JBOD(有时称为“直通”)中配置 raid 控制器。如果不可能,请创建 20 个 RAID0(这是一件很糟糕的事情,但如果您无法配置 JBOD,这是最不糟糕的)。任何其他配置都会破坏 ZFS。
尽可能将磁盘分散到控制器上(最好是 1-1,但我知道这对你的情况来说并不实用)。如果可能的话,购买更多控制器。
答案4
不要将硬件 raid 与 ZFS 结合使用。文件系统不会察觉硬件控制器察觉到的任何问题,也不会做出相应的反应。
您可以使用 RAIDZ3 来实现 3 个磁盘故障安全性。镜像也可以实现这一点,但对哪 3 个磁盘有限制。如果您选择故障概率,而不是随意说您可以允许 3 个磁盘发生故障,那么会更有意义。
在这种情况下,性能主要会受到网络连接(我假设大多数阵列以某种方式用于通过网络提供文件服务)和计算机的 CPU(所有奇偶校验不会自行计算,并且 ZFS 不会使用加密加速器)的限制。