我有36 * 4TB的HDD SAN机架。 RAID控制器在一个RAID组中不支持RAID60和不多于16个HDD。 所以我决定做2个16HDD的RAID6组或8个HDD的4个。 我想把所有的存储作为一个分区。
那么,如果我将在硬件RAID6之上使用zfs池,可能会出现什么问题呢? 是的,我知道强烈build议使用本地硬盘或直通模式。 但是我没有这个select。
或者我应该远离ZFS和软件袭击在这种情况下? (我主要对压缩和快照感兴趣)
所以我决定做2个16HDD的RAID6组或8个HDD的4个。
这不是做事情的最好方法。 它可能工作得不错,但取决于你的性能要求,它可能不会。
RAID5 / 6arrays的理想大小将使得“跨越”arrays的数据量的确切倍数匹配在其上构build的文件系统的块大小。
RAID5 / 6arrays作为块设备工作 – 单个数据块跨越arrays中的磁盘,该块也包含奇偶校验数据。 大多数RAID控制器会向arrays中的每个磁盘写入一个2的幂的数据块 – 其确切的值可以在更好的RAID系统中configuration – 而Dot Hill单元就是其中一个“更好的RAID系统”。 这很重要。
因此,需要N x(每个磁盘块存储的数据量)跨越arrays,其中N是数据磁盘的数量。 5个磁盘的RAID5arrays有4个“数据”磁盘,10个驱动器的RAID6arrays有8个数据磁盘。
因为当数据写入RAID5 / 6arrays时,如果数据块的大小足以跨越整个arrays,则会为该数据计算奇偶校验(通常在控制器的内存中),然后将整个条带写入磁盘。 简单,快速。
但是,如果正在写入的数据块大小不足以跨越整个arrays,那么RAID控制器为了计算新的奇偶校验数据必须做什么? 考虑一下 – 它需要整个条带中的所有数据来重新计算新的奇偶校验数据。
因此,如果您使用512kb的默认每磁盘块创build16个驱动器的RAID6arrays,则意味着需要7 MB来“扩展”arrays。
ZFS通常工作在128kb的块中。
所以ZFS写了一个128kB的块 – 到一个16个驱动器的RAID6arrays。 在您提出的configuration中,这意味着RAID控制器需要从arrays中读取将近7 MB,并重新计算这7 MB的奇偶校验。 然后将整个7 MB重写到磁盘。
如果你幸运的话,这一切都在caching中,你不会受到巨大的性能影响。 (这是“不使用RAID5 / 6”位置的主要原因之一 – RAID1 [0]不会受此影响)。
如果你运气不好,而且没有正确地alignment你的文件系统分区,那么这个128kB的块跨越了两个不在caching中的RAID条带,控制器需要读取14MB,重新计算奇偶校验,然后写入14MB。 全部写一个128kB块。
现在,这就是需要逻辑发生的事情。 好的RAID控制器可以采取很多优化来减less这种IO模式的IO和计算负载,所以它可能并不那么糟糕。
但是在将128kB块写入随机位置的负担很重的情况下,具有7 MB条带大小的16个驱动器的RAID6arrays的性能绝对是非常糟糕的。
对于ZFS, 大多数访问实际上是随机的通用文件系统的“理想”底层RAID5 / 6 LUN的条带大小是128kB,例如32kB,64kB或128kB。 在这种情况下,将RAID5 / 6arrays中的数据磁盘数量限制为1(这是无意义的 – 即使可以configuration,最好使用RAID1 [0]),2,4或8.最佳性能在最好的情况下,对于RAID5 / 6arrays使用128kB的条带大小,但最好的情况在通用文件系统中不会经常发生 – 通常是因为文件系统不会像它们那样存储元数据存储文件数据。
我build议设置5磁盘RAID5arrays或10磁盘RAID6arrays,每个磁盘块大小设置足够小的数据量跨越整个arrays条纹是64kB(是的,我已经这样做了之前为ZFS – 很多次)。 这意味着对于具有4个数据磁盘的RAIDarrays,每个磁盘块大小应该是16kB,而对于8个数据磁盘RAIDarrays,每个磁盘块大小应该是8kB。
然后允许ZFS使用整个数组 – 不要对其进行分区。 无论驱动器是简单的单个磁盘还是由RAID控制器提供的RAIDarrays,ZFS都会将其自身正确alignment到整个驱动器。
在这种情况下,如果不知道您的确切空间和性能要求,build议您设置三个10驱动器RAID6arrays或六个具有64kB条带大小的5驱动器RAID5arrays,configuration几个热备份,并保存四个磁盘为未来的任何事情。 因为会有东西
我绝对不会在JBOD模式下使用该磁盘系统 – 这是一个完全符合NEBS 3级标准的设备 ,可以在硬件中提供显着的可靠性和可用性保护。 不要因为“ZFS !!!!”而把它扔掉。 如果这是一个便宜的商品硬件,你把它们放在一起呢? 是的,用ZFS处理RAID的JBOD模式是最好的 – 但这不是你的硬件。 使用硬件提供的function。
好吧,我会咬…
这是应用程序的错误硬件。 DotHill设置与HP StorageWorks MSA2000 / P2000具有相同的局限性,即在一个arrays组中只能使用16个驱动器。
硬件RAID或导出的SAN LUN上的 ZFS不一定是问题。
但是,在未知的互连上跨越扩展机箱剥离ZFS LUN会带来一些风险。
认真地说,可能值得评估是否需要在单个命名空间中存储所有这些存储空间…
如果您需要在单一安装中使用这种types的容量,则应该使用专用的HBA连接的JBOD机箱,并可能使用多个带有弹性布线和更智能布局的机头单元 。
您应该直接将所有驱动器连接到运行ZFS的盒子。 获取SAS HBA并将驱动器连接到支持ZFS的盒子(例如运行OmniOS或SmartOS)。 然后,您可以通过NFS,SMB,iScsi …
在硬件RAID逻辑卷之上的ZFS的原因是一个非常糟糕的想法,是因为ZFS需要块级访问实际上正常的function。 是的,它是可用的,但是直到通过HBA或直接SATA连接将驱动器直接连接到操作系统时,function才会完整。 举个例子,在你提出的configuration中,ZFS不能合理地保护你的数据免受下面数据(在HW RAID控制器的另一端)的变化, 因此不能保证数据的安全 。 这是ZFS被使用的主要原因之一,除了超级快速。
ZFS是令人敬畏的技术,我强烈推荐它。 但是,您将需要重新访问您的结构,以便能够正确使用它。 即让ZFS直接从磁盘创build逻辑卷(vdevs)。
听起来你需要做更多的阅读,才能准确地理解你提出的build议,而不是真的应该做什么。