硬件RAID 6之上的ZFS条带。可能出什么问题?


9

我有36 * 4TB HDD SAN机架。RAID控制器不支持RAID60,并且一个RAID组中最多支持16个HDD。因此,我决定将2个RAID6组的16HDD或4个8个HDD组成。我想将所有存储作为一个分区。

因此,如果我在硬件RAID6之上使用zfs池,可能​​会出错吗?是的,我知道强烈建议您使用本机HDD或直通模式。但是我没有这个选择。

还是在这种情况下我应该远离ZFS和软件突袭?(我对压缩和快照最感兴趣)


2
如果您要使用ZFS,那为什么不只是单独公开所有磁盘(有时称为HBA模式)并让ZFS处理它-这才是最好的。我们有很多真正的专家(首先是ewwhite),他们将为您提供帮助-您正在使用什么磁盘控制器?
斩波器

1
您将使用这种方法来破坏许多ZFS功能,但是总的来说,这样做不会对任何事情造成伤害。在此配置中,校验和稍微没用,因为RAID控制器将抽象出所有磁盘详细信息。我对您为什么不能使用JBOD感兴趣。suresan 3530是支持JBOD的装置。
后台打印程序

2
我等着ewwhite-他在美国中部,正在睡觉,但他比我认识的任何人都更了解ZFS
Chopper3

1
@Severgun 另外4个HDD仍然没有用,因为在热备份中不需要。您真的认为与故障驱动器一起故障运行的RAID阵列比自动拾取热备用,重建并完全恢复到完全状态更好吗?功能状态?
安德鲁·亨利

1
@ Chopper3我会……无奈地回答。
ewwhite

Answers:


5

因此,我决定将2个RAID6组的16HDD或4个8个HDD组成。

那不是做事情的最好方法。它可能效果很好,但是根据您的性能要求,可能效果不佳。

RAID5 / 6阵列的理想大小应使“跨越”该阵列的数据量的精确倍数与其上建立的文件系统的块大小相匹配。

RAID5 / 6阵列用作块设备-单个数据块跨越阵列中的磁盘,并且该块还包含奇偶校验数据。大多数RAID控制器都会将大小为2的幂的数据块写入阵列中的每个磁盘-确切的值可以在更好的RAID系统中配置-而Dot Hill单元就是那些“更好的RAID系统”之一。那很重要

因此,需要N x(每个磁盘块存储的数据量)来跨越整个阵列,其中N是数据磁盘的数量。一个5磁盘RAID5阵列具有4个“数据”磁盘,而一个10驱动器RAID6阵列具有8个数据磁盘。

因为当将数据写入RAID5 / 6阵列时,如果数据块足够大以覆盖整个阵列,则将为该数据(通常在控制器的内存中)计算奇偶校验,然后将整个条带写入磁盘。简单,快捷。

但是,如果要写入的数据块不足以覆盖整个阵列,那么RAID控制器必须做什么才能计算新的奇偶校验数据?考虑一下-它需要整个条带中的所有数据来重新计算新的奇偶校验数据。

因此,如果您使用默认的每磁盘块512kb制作一个16驱动器的RAID6阵列,则意味着需要7 MB的空间来“扩展”该阵列。

ZFS通常以128kb的块工作。

因此,ZFS将128kB块写入16驱动器RAID6阵列。在您建议的配置中,这意味着RAID控制器需要从阵列读取近7 MB的内存,然后重新计算这7 MB的奇偶校验。然后将整个7 MB重写回磁盘。

如果幸运的话,它们全都在高速缓存中,并且不会对性能造成重大影响。(这是“请勿使用RAID5 / 6”位置具有以下跟随项的主要原因之一-RAID1 [0]不受此影响。)

如果您不走运并且未正确对齐文件系统分区,则该128kB块将跨越两个不在高速缓存中的RAID条带,并且控制器需要读取14 MB,重新计算奇偶校验,然后写入14 MB。全部写一个128kB的块。

现在,这就是逻辑上需要发生的事情。好的RAID控制器可以采取很多优化措施来减少此类IO模式的IO和计算负载,因此可能还不错。

但是,在将128kB块写入随机位置的繁重负担下,拥有7 MB条带大小的16驱动器RAID6阵列的性能绝对是非常好的机会。

对于ZFS,用于大多数访问实际上是随机的通用文件系统的“理想”基础RAID5 / 6 LUN 的条带大小应是128kB 的偶数除数,例如32kB,64kB或128kB。在这种情况下,这会将RAID5 / 6阵列中的数据磁盘数量限制为1(这是无意义的-即使可以进行配置,最好仅使用RAID1 [0]),2、4或8。最佳性能在最好的情况下,最好对RAID5 / 6阵列使用128kB的条带大小,但是在通用文件系统中,最好的情况并不经常发生-通常是因为文件系统存储的元数据与其存储方式不同存储文件数据。

我建议设置5磁盘RAID5阵列或10磁盘RAID6阵列,并且将每个磁盘的块大小设置得足够小,以使跨越整个阵列条带的数据量为64kB(是的,我已经做到了ZFS之前-很多次)。这意味着对于具有4个数据磁盘的RAID阵列,每磁盘块大小应为16kB,而对于8数据磁盘的RAID阵列,每磁盘块大小应为8kB。

然后让ZFS使用整个阵列-也没有对它进行分区。无论驱动器是简单的单个磁盘还是RAID控制器提供的RAID阵列,ZFS都能正确地将其自身对准整个驱动器。

在这种情况下,在不知道确切的空间和性能要求的情况下,建议您设置三个具有64kB条带大小的10驱动器RAID6阵列或六个5驱动器RAID5阵列,配置几个热备份,并保存四个磁盘,以备将来使用。因为会的。

我肯定不会在JBOD模式下使用该磁盘系统-它是完全兼容NEBS 3级的设备,可直接在硬件中提供显着的可靠性和可用性保护。不要仅仅因为“ ZFS !!!!”就扔掉它。如果这是便宜的商品硬件,您可以将它们组装在一起吗?是的,具有ZFS处理RAID的JBOD模式是最好的-但这不是您拥有的硬件。 使用硬件提供的功能。


这意味着对于具有4个数据磁盘的RAID阵列,每磁盘块大小应为16kB,而对于8数据磁盘的RAID阵列,每磁盘块大小应为32kB。我对此数学有些困惑。为什么要有8个磁盘-32kB块?如果我输入错误,请纠正我:每个RAID阵列128kB(ZFS块)/ 3(RAID阵列)= 43 kB。10个磁盘的RAID6 43kB / 8 = 5kB(不可用的块大小),最接近8kB的块大小也无法通过硬件获得。因此,无法获得最佳性能吗?
Severgun

@Severgun我将块大小倒退。在RAID5 / 6上实现绝对最佳性能的问题在于,只有在几乎所有IO操作都与RAID阵列条带大小完全匹配时才会发生这种情况。小于条带大小的大量IO操作会严重降低性能。采用较小的块大小有助于限制随机小块写入的影响。以我的经验,最好放弃可能的最大性能的1-2%,以限制最坏的情况。通用文件系统往往具有大量的小写操作。
Andrew Henle

(续)RAID5 / 6阵列中的8个数据磁盘(每个磁盘块大小为16kB)使整个阵列的条带大小为128kB。同样,一个4数据磁盘阵列的32kB块。ZFS将一个128kB的文件数据块写入单个设备-不会在所有zdev上拆分。同样,对于通用文件系统,将会有很多低于128kB的写操作,因此,较小的条带大小(64kB)可以避免在繁重的写负载下更好地降低性能,但是最好以较低的成本实现,案例表现。
安德鲁·亨利

4

好吧,我咬...

这是应用程序错误的硬件。DotHill设置与HP StorageWorks MSA2000 / P2000具有相同的限制,因为单个阵列分组中只能使用16个驱动器。

硬件RAID上的 ZFS 或导出的SAN LUN不一定是问题。

但是,跨扩展机箱跨未知互连条带化ZFS LUN会带来一些风险。

  • 例如,您是否在具有双控制器的环形拓扑中运行多路径SAS?
  • 您是否有多余的电缆连接回服务器?
  • 您是否以减轻单个机箱/电缆/控制器故障并防止其破坏RAID0条带的一部分的方式在机箱之间垂直分布驱动器?

认真地说,可能值得评估您是否需要在单个命名空间中使用所有这些存储...

如果您确实需要在单个安装架中使用这种类型的容量,则应该使用专用的HBA连接的JBOD机柜,并可能使用具有弹性电缆和更智能布局的多个主机。


1

您应该将所有驱动器直接连接到运行ZFS的盒子。获取SAS HBA,然后将驱动器连接到具有ZFS功能的设备(例如,运行OmniOS或SmartOS)。然后,您可以通过NFS,SMB,iScsi共享空间。


您应该将所有驱动器直接连接到运行ZFS的盒子。 不一定-更换某些控制器上的硬件阵列中的故障驱动器很容易:拔出故障指示灯点亮的硬盘驱动器,然后弹出一个新的驱动器。无需系统管理员即可运行ZFS命令来更换驱动器。在具有成百上千台服务器以及可能分布在多个数据中心的数以万计的硬盘驱动器的企业设置中,这是一个问题。驱动器故障远不止是发生故障。
安德鲁·亨利

@Tobi Oetiker告诉我如何将36个3.5英寸硬盘放入2U盒中
Severgun

我们只是将它们放在一个额外的盒子中……使用sas扩展器……对于大型部署,也许要问Joyent如何处理它。
Tobi Oetiker

@AndrewHenle公平地说,可以使用ZFS和正确的HBA来实现相同的简单更换过程和状态LED(如果不使用预打包的解决方案,可能需要一些小的脚本编写)。
user121391 '16

0

在硬件RAID逻辑卷之上的ZFS之所以是一个非常糟糕的主意,是因为ZFS需要块级访问才能真正正常运行。是的,它将可用,但是直到通过HBA或直接SATA连接将驱动器直接连接到OS上,功能才能完成。一个例子是,在您提出的配置中,ZFS不能合理地保护您的数据免受以下数据的更改(在HW RAID控制器的另一侧),因此不能保证数据的安全性。这是使用ZFS的主要原因之一,此外它还具有超快的速度。

ZFS是很棒的技术,我强烈推荐它。但是您将需要在这里重新访问您的结构,以便能够正确使用它。即让ZFS直接从磁盘创建逻辑卷(vdev)。

听起来您需要对ZFS的运行方式有更多的了解,然后才能准确地了解所提出的内容,而不是应实际执行的内容。


是的,是的。我了解ZFS的工作方式。但是有一些复杂性:1)我已经有SAN机箱,需要使用它。我不是从头开始构建存储。2)这不是我可以购买和丢弃物品的家用NAS。3)存储配置重建的预算为零。从存储设备中,我需要最大可用写入速度,且存储空间应约为100Tb。我之所以选择ZFS,主要是因为压缩和快照。我可以尝试btrfs,但这是实验性的。嗯可能也是ZoL不稳定的吗?我不知道。
Severgun '16

@Severgun只要您知道不利之处,我认为您会很好。ZFS具有许多不错的功能(例如快照),它们彼此独立工作。互联网上的大多数建议都强调了最佳实践在所有领域中的重要性,但这只是建议,而不是严格的要求。随着越来越多的LInux发行版更改为ZFS,并且大多数Linux系统在虚拟环境下运行,这一点在将来将变得不再重要。
user121391 '16

1
在硬件RAID逻辑卷之上的ZFS之所以非常糟糕,是因为ZFS需要块级访问才能真正正常运行。 太糟糕了,甚至还不足以被称为错误。您显然不知道兼容NEBS 3的硬件是什么意思,对吗? 除了超级快。 ZFS有很多好处。“超级傻瓜快” 不是其中之一。 这是一个快速的文件系统。 这也是。随着文件系统的发展,ZFS 并不快。
安德鲁·亨利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.