最多讨论ZFS 建议关闭硬件 RAID,并且 ZFS 应该直接与磁盘对话并管理主机上的 RAID(而不是 RAID 控制器)。
这对于具有 2-16 个甚至更多本地磁盘的计算机来说是有意义的,但是在具有大型 SAN 的环境中呢?
例如,我所在的企业拥有一个我认为规模适中的 SAN,其中装有 2 个装满磁盘的机架,大约有 400 个主轴。我见过比我们的 SAN 密度大得多的 SAN 机架,以及比我们的 SAN 部署规模大得多的 SAN 机架。
人们会直接将 100 个磁盘暴露给大型 ZFS 服务器吗?300 个磁盘?3000 个磁盘?SAN 管理工具是否有助于实现此类事情的自动化管理?
答案1
FWIW 我有以下经验92 个磁盘在单个 ZFS 池中,到目前为止它运行良好。
但如果你真的谈论几百个磁盘,我会考虑分割将它们分成少量不连续(但仍然很大)的池。我不想知道例如zpool scrub
在 3000 个磁盘池上运行多长时间(但您想定期清理)。此外,zpool status
对于如此大量的磁盘,命令的输出会很笨拙。那么为什么要把所有的鸡蛋都放在一个篮子里呢?
(附注去重:请注意,虽然可以在数据集级别控制重复数据删除,但它会在池级别找到重复项。也就是说,如果您按照建议进行分区,您可能会得到更糟糕的重复数据删除结果。另一方面,您需要更多内存保存单个巨型池的重复数据删除哈希,如果池太大,则可能无法放入 ARC+L2ARC。因此,如果您使用重复数据删除,则可用内存量可能是最大实际池大小的一个很好的指标。)
答案2
我们让 SAN 管理 RAID。为什么要花钱购买所有由电池供电的 NVRAM 和专用处理器,然后将工作转移到服务器上,而我希望服务器的 CPU 执行 RAID 校验以外的其他操作?
答案3
这是一个老问题,但今天它仍然与 7 年前一样重要!
回答问题的第一部分,我不知道我们所谓的“SAN”会将原始磁盘暴露给可以运行 ZFS 的服务器。根据定义,SAN 仅提供块存储 (LUN),或者可能使用 Filer/FS 之类的东西提供 NFS 或 CIFS。有些“SAN”实际上在内部运行 ZFS,但这在很大程度上被抽象化了 - 磁盘永远不会暴露给服务器,相反,SAN 的“Filer”组件向服务器提供块或网络文件系统。
提供原始磁盘(通过 SAS 或不太可能通过 FC)的设备是 DAS。要运行 ZFS,通常需要告诉 RAID 控制器将磁盘显示为 JBOD。
但是,您是否应该在 SAN 提供的 LUN 上使用 ZFS?可能:与 EXT4 相比,ZFS 提供了一些额外的功能,例如检查校验和或运行快照的清理。清理可能无法像执行磁盘 RAID 那样自动修复,但它仍然可以提醒您损坏,有助于防止位腐烂。您可以在 Linux SAMBA 文件服务器上创建的快照远远优于使用 EXT 可以创建的快照,这些快照甚至可以在 Windows 中显示为“以前的版本”。
答案4
如果您不为 ZFS 提供冗余数据(例如镜像、RAID-Z),那么您将失去使用它的许多好处。所涉及的磁盘数量不会改变这一事实。但是,这是否重要取决于您的环境。您必须确定您需要哪些存储功能(可能需要大量劳动力的分析),然后寻找满足您需求的最便宜的解决方案(您可以负担得起)。这可能意味着在任何地方使用 ZFS 以及专用的 Oracle 存储设备(有些人这样做,并且有许多磁盘暴露给 ZFS 而没有问题,并使用 Oracle 工具进行管理),它可能意味着仅使用企业 SAN 产品,或者它可能意味着使用某种混合产品(在这种情况下,您可能必须自己开发一些工具和流程来管理环境)。不要忘记,您的分析还需要考虑人为因素(例如,也许您有一个存储团队,他们接受过 SAN 产品的非常有用和专业的培训,如果您采用全 ZFS 解决方案,您将失去这些培训)。