适合家庭 NAS 的最佳 ZFS 池配置

适合家庭 NAS 的最佳 ZFS 池配置

我正在考虑升级我的家用 NAS,我用它来存储电影(使用 Plex Media Server)、图片和备份。

目前它在raidz1池中有5个3TB的磁盘。

我受到 SATA 端口数量的限制,但是随着 8 端口控制器的获得,我现在有 14 个 SATA 端口的限制。(系统为 -1,因此有 13 个端口)。

由于我打算保留这台服务器几年,所以我想以一种高性能和未来兼容的方式制造它,所以我读到建议使用 SSD 来存储 ZIL 和 L2ARC 以获得更好的写入和读取性能。

对于 ZIL,我读到几 GB 就足够了,但建议对其进行镜像。

因此,这是我想到的设置:

  • 1 个系统 SSD
  • 11 存储磁盘(raidz2)
  • 2 个 SSD 切片用于 ZIL/L2ARC(镜像 ZIL,并添加另外两个切片用于缓存)

我选择切片 SSD 的理由如下:

  • 我不需要最快的系统,所以我可以接受 ZIL 和 L2ARC 共享 IO 的权衡
  • 我仍然可以享受镜像 ZIL 的好处,因此如果发生崩溃,我应该是安全的

存储磁盘目前为 3TB 驱动器,据我了解,池的总大小为(numberOfDisks-2)*sizeOfSmallestDisk:(11-2) * 3TB = 27TB

所以,我的问题是:

  • 这个设置是否平衡?
  • 是否可以将 SSD 切分为日志和缓存?
  • 我的泳池尺寸公式正确吗?
  • 我能否逐个用更大的磁盘替换这些磁盘,并在它们全部更新后扩大池?例如,用 4TB 磁盘替换这些磁盘并获得 36TB 存储空间
  • 这在 Linux 上能正常工作吗?我目前有 OpenIndiana,想迁移到 Ubuntu Server。

提前致谢。

我的主要灵感来源:

答案1

您的大部分观点都是正确的,所以我只关注其余部分:

  1. 使用 SLOG 设备进行 ZIL 只能帮助您进行少量同步写入,因此如果您想在其上存储虚拟机,它就是必不可少的,而在大多数其他家庭使用情况下,尤其是备份和流媒体,它几乎毫无用处。由于您以后可以随时添加和删除它,因此您应该先不使用它,然后仅在必要时添加。

  2. L2ARC 可以提高您的读取性能,但它比 RAM 慢,需要额外的 RAM,并且只有在读取相同数据时才有用。同样,这对于流式传输整部电影或音乐来说很糟糕,但如果您托管一个访问量很大的网站或有数百名用户访问文件共享,那就太好了。经验法则是:首先最大化您的 RAM(最有可能是 32、64、128 或 256 GB,具体取决于您的主板),然后再考虑 L2ARC。

  3. 在同一设备上使用 ZIL 和 L2ARC 通常不是一个好主意,因为它们的需求直接相反:

    • ZIL 会不断写入小型随机同步 IO(大型和连续 IO 会绕过它,任何类型的异步 IO 根本不使用它),这意味着您需要一个具有非常低写入延迟的 SSD(英特尔是我发现的唯一一家指定此特性的供应商,即使是较便宜的消费级 SSD)、可接受的写入 IOPS(几乎所有 SSD 都足够了)和高 TBW,这样您的 SSD 就不会每年因耗尽而损坏。对于大小,对于小型系统,<10 GB 通常就足够了。最好使用镜像来防止电源和 SSD 同时发生故障时数据丢失。
    • 另一方面,L2ARC 需要大几倍(通常大于 64 GB,具体取决于 RAM),很少写入但经常读取,因此您需要高读取 IOPS、可接受的读取延迟,并且不太关心 TBW。在大多数情况下,镜像是浪费金钱,因为它只是一个缓存设备,可能会丢失并重新创建而不会出现问题。
  4. 当然,单个根池是可行的,但如果您镜像它,则可以省去一些麻烦。由于它通常不会受到太多影响,因此两个慢速磁盘甚至 USB 设备(每个主板至少有两个 USB 端口作为内部接头)对于家庭使用来说完全没问题,而且您可以获得另一个可用的磁盘插槽。特别是在没有 UPS 的情况下运行时,两个 rpool 设备确实可以让您高枕无忧。

  5. 您的池大小是正确的,但可以选择 12 个磁盘,其中 2 个 Z2(每个 6 个磁盘)或 1 个 Z3(每个 12 个磁盘)。根据经验,使用 Z1/2/3 时,您应该首先填充所有可用的磁盘插槽,因为虽然逐个升级磁盘大小很简单,但以后添加更多磁盘是不可能的。

  6. 我不知道 Linux(应该可以正常工作),但你看过其他基于 illumos 的系统吗?OmniOS 很小、简单、稳定,可以根据您的需求进行定制(它还包括 KVM 和 LX 品牌区域)。SmartOS 类似,但主要关注区域(容器),因此您可以独立运行所有服务,甚至可以在这些区域中运行 Linux 客户机,以提供 Solaris 上不可用的少数服务。还有 Delphix 和 NexentaStore 社区版,但我没有测试过它们。


我的个人建议:

  • 使用您习惯的任何操作系统(如果您喜欢 Solaris 的稳定性,请尝试 OmniOS;如果您想要虚拟化,请尝试 SmartOS)
  • 使用 USB 磁盘(USB3 HDD 或带有 SLC 内存的 USB3 棒)上的镜像 rpools 来为磁盘提供更多插槽
  • 使用主板上的 6 个端口和 HBA 卡上的 6 个端口,这样即使丢失一个控制器,系统仍可继续运行
  • 2 个空闲端口将来可根据需要用于 SLOG 或 L2ARC 设备
  • 布局(12 是一个非常好的数字,16 是次佳数字,因为大多数控制器都是 4 或 8 端口):
    • 如果您需要最高性能:两个控制器上各有 6x2 个镜像
    • 如果您需要最大弹性:4x3 镜像或 1x RAID Z3(12) 或 2x RAID Z2(6)
    • 如果您需要最大空间:1x RAID Z2(12)
  • 首先最大化 RAM,然后再做其他事情

关于您在评论中提出的后续问题:

我喜欢在系统中使用两个镜像 USB3 棒的想法,但它可以启动吗?

USB 棒本质上与 USB 磁盘相同,因此您可以毫无问题地从它们启动(除了非常旧的主板,但过去十年的所有主板都应该没问题)。某些系统(如 SmartOS 或 ESXi)甚至将其宣传为最佳实践。

另一方面,有些(如 FreeNAS)不推荐它,因为它们不是为 USB 记忆棒定制的,因此会不断地写入磁盘,并很快磨损便宜的记忆棒(这就是为什么这么多 Raspberry Pi 早期出现故障的原因 - Linux 系统认为它有一个坚不可摧的 HDD,而不是一些 5 欧元的 USB 记忆棒或 SD 卡,它们是为不频繁的写入(如从数码相机)而设计的)。

使用 SLC 棒(或真正的 SSD),您不会遇到这些问题。当然,它们更贵,16 GB 棒大约 30 到 40 欧元(MachExtreme MX-ES 是这个领域唯一值得购买的东西)。SSD 可能更便宜(32 GB 30 欧元),但您需要一个 USB 适配器,而且它们占用更多空间。您可以在机箱外使用它们进行快速备份/交换,也可以在机箱内进行访问控制(如果您有喜欢闪亮玩具的孩子)。

看来我不需要日志/缓存磁盘,我应该将所有 14 个端口用于磁盘吗?

取决于您的需求和预算。如果您使用镜像,您可以稍后灵活地添加它们。如果您使用 RAID-Zn,我会在创建池之前设置最终数量,因为您无法轻松添加更多数量。另一方面,如果您的需求发生变化,您可能希望保留一些端口用于备份(例如,使用插槽式 3.5 英寸驱动器盒)或用于缓存目的。是否更看重空间而不是灵活性取决于您(并且这取决于您的硬件支持多少扩展卡)。

类似于 2x7 RaidZ2 条带化在一起?如果我这样做并且控制器发生故障,则池将发生故障,但如果我用相同的控制器替换控制器,它会再次运行吗?

是的,即使您使用另一个控制器,它也能正常工作,因为一切都是在软件中完成的。您只需添加足够的磁盘,以便每个 vdev 都能正常工作,然后您就可以让池重新上线。

在您的情况下,如果您的 8 端口控制器出现故障,您需要以任何方式向系统添加五个(7 - 2)个磁盘(第 8 个磁盘无论如何都是消耗性的,因为其他六个磁盘仍在运行),例如使用 4 端口控制器和单个 USB 磁盘(不推荐,只是为了表明连接基本上毫无意义)。

通常您只需用相同型号的控制器替换,因为您知道配置没有问题并且性能足够(每个控制器有 8 个磁盘,控制器本身的价格相对于而言很小)。

如果我这样做,我可以扩大池子的一部分而不触及另一部分吗?

您可以单独扩展 vdev,但前提是池本身处于在线状态(即在更换控制器并重新同步任何错误之后)。请注意,如果您将其扩展为“不平衡”,则如果扩展了其他 vdev,您的数据将不会在稍后重新平衡,除非出现任何新的和修改过的块(写入时复制不会在读取时重新排序数据)。这对于您的性能需求来说应该没有问题,但我想为了完整性而提到这一点。

相关内容