硬件RAID的ZFS最佳做法


30

如果恰好有一些服务器级硬件可供使用,是否建议在基于硬件的RAID1或类似硬件上运行ZFS?是否应该关闭基于硬件的RAID,然后在a mirror或a 上运行ZFS raidz zpool

关闭硬件RAID功能后,与非硬件RAID控制器相比,基于硬件RAID的SATA2和SAS控制器是否更可能隐藏读写错误?

对于不可定制的服务器,如果存在一种情况,其中硬件RAID控制器实际上是成本中立的(甚至降低了预建服务器产品的成本,因为它的存在会提高托管公司提供补充IPMI的可能性)访问),应该完全避免吗?但是应该追寻吗?



2
@ShaneMadden,问题是相似的,但是,我的问题已经从硬件突击检查的角度出发,从zfs角度来看是糟糕的,我问的是问题有多严重?另外,请考虑对您的链接问题的公认答案根本无法解决我的问题;我的问题更像是您所链接问题的后续问题。
cnst

“在硬件镜像之上的ZFS,还是仅在ZFS中镜像?” 这个问题是两个不同的主题。该主题的范围比该主题窄。
Stefan Lasiewski

@ewwhite,您不是已经问过这个吗?
cnst

@cnst嗯,没有明显的答案,而且人们一直不赞成我的答案。因此,对所提出的问题进行一些封闭将是很好的。(这是负责任的事情
ewwhite15年

Answers:


17

ZFS的想法是让它尽可能多地了解磁盘的行为。然后,从最坏到更好:

  • 硬件突袭(ZFS绝对不了解真正的硬件),
  • JBOD模式(问题更多是关于任何潜在的扩展器:更少的带宽),
  • HBA模式是理想选择(ZFS知道有关磁盘的所有信息)

由于ZFS对硬件非常偏执,因此隐藏的次数越少,它就越能应付任何硬件问题。正如Sammitch指出的那样,RAID控制器配置和ZFS在发生故障(即硬件故障)时可能很难恢复或重新配置。

关于其中包含某些硬件RAID控制器的标准化硬件的问题,请注意硬件控制器具有真实的直通或JBOD模式。


10
还值得注意的是,如果您使用的是硬件RAID,并且控制器死亡(发生的次数比您想象的要多),但如果您无法获得完全相同或完全兼容的替代产品,那么您将大受打击。另一方面,如果将原始磁盘交给ZFS,则可以将这些磁盘重新插入任何计算机上的任何控制器中,并且ZFS可以重建阵列并继续进行,就像什么都没有发生。
Sammitch

1
高端服务器通常具有板载RAID控制器。例如,我从来没有必要在HP或Dell系统上更换控制器。
ewwhite

2
该答案没有任何回答。它只是表达了一种偏见,即服务器硬件的供应商和ZFS编程器比RAID控制器的供应商和RAID固件的编程器做得更好。FreeNAS社区里到处都是人,他们死于服务器内存故障或电源不当而杀死了他们的Zpool。大事物失败的机会高于小事物。
2015年

14

问:如果有人碰巧拥有一些服务器级硬件,是否建议在基于硬件的RAID1或类似硬件上运行ZFS?

答:最好将ZFS直接运行到磁盘,并且在两者之间不使用任何形式的RAID。是否有效地要求您使用RAID卡的系统会排除使用ZFS的重要性,而不是ZFS的其他优势在于数据弹性。毫无疑问,如果有底层RAID卡负责为ZFS提供单个LUN,则ZFS不会提高数据弹性。如果首先使用ZFS的唯一原因是提高了数据弹性,那么您就失去了使用它的所有理由。但是,ZFS还提供了ARC / L2ARC,压缩,快照,克隆以及您可能还需要的各种其他改进,在这种情况下,也许它仍然是您选择的文件系统。

问:是否应该关闭基于硬件的RAID,然后在镜像或raidz zpool上运行ZFS?

答:是的,如果可能的话。某些RAID卡允许通过模式。如果有,这是最好的选择。

问:关闭硬件RAID功能后,与非硬件RAID控制器相比,基于硬件RAID的SATA2和SAS控制器是否更有可能隐藏读写错误?

答:这完全取决于所讨论的RAID卡。您必须仔细阅读手册或与RAID卡的制造商/供应商联系以进行查找。是的,很多人都这样做,尤其是在“关闭” RAID功能实际上没有完全关闭的情况下。

问:对于不可定制的服务器,如果存在一种情况,其中硬件RAID控制器实际上是成本中立的(甚至降低了预建服务器产品的成本,因为它的存在会提高托管公司提供服务的可能性)补充IPMI访问),是否应完全避免?但是应该追寻吗?

答:这与您的第一个问题大致相同。再说一遍-如果您唯一希望使用ZFS的目的是提高数据弹性,并且您选择的硬件平台需要RAID卡为ZFS提供一个LUN(或多个LUN,但是它们之间有ZFS条带化),那么您在做没有什么可以提高数据弹性的,因此您选择ZFS可能不合适。但是,如果您发现其他任何ZFS功能都有用,则可能仍然有用。

我确实要增加一个额外的关注点-以上答案基于以下想法:在ZFS下使用硬件RAID卡,除了消除其提高数据弹性的能力外,对ZFS并无任何伤害。事实是,这更多是灰色地带。当处理多磁盘LUN(而非原始磁盘)时,ZFS中存在各种可调项和假设,这些调整和假设不一定能很好地运行。多数情况可以通过适当的调整来消除,但是开箱即用,在大型RAID LUN上使用ZFS时,效率将不如在单个主轴上那么高。

此外,有一些证据表明,与更传统的文件系统相比,ZFS与LUN进行交谈的方式截然不同,通常会在RAID控制器和工作负载中调用它们不习惯的代码路径,这可能会导致异常。最值得注意的是,如果您也不提供单独的日志设备,则可能会完全禁用放置在单个LUN顶部的任何池上的ZIL功能,从而对自己有所帮助,尽管我当然强烈建议您请为池提供单独的原始日志设备(如果可能的话,它不是RAID卡中的LUN)。


9

我经常在HP ProLiant Smart Array RAID配置上运行ZFS。

为什么?

  • 因为我喜欢将ZFS用于数据分区,而不是引导分区。
  • 因为Linux和ZFS引导现在可能还不够安全。
  • 因为HP RAID控制器不允许RAW设备通过。配置多个RAID 0卷与RAW磁盘不同。
  • 由于服务器底板通常不够灵活,无法将驱动器托架专用于特定的控制器或在两个控制器之间分配职责。这些天,您最经常看到8托架和16托架的设置。并不总是足够分割事物的样子。
  • 但是我仍然喜欢ZFS的卷管理功能。zpool使我可以动态地完成工作,并充分利用可用的磁盘空间。
  • 压缩,ARC和L2ARC是杀手features!
  • 在硬件RAID上正确设计的ZFS设置仍然可以提供良好的警告和故障警报,但性能优于纯硬件解决方案。

一个例子:

RAID控制器配置。

[root@Hapco ~]# hpacucli ctrl all show config

Smart Array P410i in Slot 0 (Embedded)    (sn: 50014380233859A0)

   array B (Solid State SATA, Unused Space: 250016  MB)
      logicaldrive 3 (325.0 GB, RAID 1+0, OK)

      physicaldrive 1I:1:3 (port 1I:box 1:bay 3, Solid State SATA, 240.0 GB, OK)
      physicaldrive 1I:1:4 (port 1I:box 1:bay 4, Solid State SATA, 240.0 GB, OK)
      physicaldrive 2I:1:7 (port 2I:box 1:bay 7, Solid State SATA, 240.0 GB, OK)
      physicaldrive 2I:1:8 (port 2I:box 1:bay 8, Solid State SATA, 240.0 GB, OK)

阻止设备列表

[root@Hapco ~]# fdisk  -l /dev/sdc

Disk /dev/sdc: 349.0 GB, 348967140864 bytes
256 heads, 63 sectors/track, 42260 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       42261   340788223   ee  GPT

zpool配置

[root@Hapco ~]# zpool  list
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
vol1   324G  84.8G   239G    26%  1.00x  ONLINE  -

zpool细节

  pool: vol1
 state: ONLINE
  scan: scrub repaired 0 in 0h4m with 0 errors on Sun May 19 08:47:46 2013
config:

        NAME                                      STATE     READ WRITE CKSUM
        vol1                                      ONLINE       0     0     0
          wwn-0x600508b1001cc25fb5d48e3e7c918950  ONLINE       0     0     0

zfs文件系统清单

[root@Hapco ~]# zfs list
NAME             USED  AVAIL  REFER  MOUNTPOINT
vol1            84.8G   234G    30K  /vol1
vol1/pprovol    84.5G   234G  84.5G  -

因此,关于您所链接的封闭问题,是否要说如果我要使用ZFS,则最好避免使用Dell PERC H200和HP P410?他们仍然没有办法禁用硬件RAID模式吗,是RAID0还是RAID1?
cnst

因此,它似乎像dell.com/learn/us/en/04/campaigns/dell-raid-controllers确实宣称H200“支持非RAID”,虽然h18004.www1.hp.com/products/servers/proliantstorage/ …关于P410的RAID功能是否可以关闭尚不完全清楚。
cnst

@cnst您不能禁用HP Smart Array P410的RAID功能。
ewwhite

仍然正确吗?您是说在硬件突袭中运行ZFS没有危险吗?
稀疏

正确。没危险
ewwhite

5

通常,永远不要在RAID阵列中配置的磁盘上运行ZFS。请注意,ZFS不必在RAID模式下运行。您可以只使用单个磁盘。但是,实际上有99%的人为ZRAID的RAID部分运行ZFS。您可以只在条带模式下运行磁盘,但这对ZFS的使用很差。就像其他发布者所说的那样,ZFS希望对硬件了解很多。ZFS应该仅连接到可以设置为JBOD模式的RAID卡,或者最好连接到HBA。跳到IRC Freenode频道#openindiana; 该频道中的任何ZFS专家都会告诉您同样的事情。如果您的托管服务提供商不提供HBA,则请他们提供JBOD模式。


1
是的,我同意。但这也取决于具有适合账单和规格的配置的库存产品。如果服务器具有出色的CPU,大量的ECC RAM,出色的带宽以及大量资源,但是必须配备基于硬件的RAID,则寻找替代方案可能并不划算,这可能会贵上几倍,由于在不同的类别为左右,或缺少一些企业的功能,如ECC RAM等
CNST

2

简而言之:在ZFS之下使用RAID只会扼杀使用ZFS的想法。为什么?—因为它是为在纯磁盘而不是RAID上工作而设计的。


1
不必要。如果我更关心卷管理的灵活性而不是围绕原始物理设备进行原始访问,那该怎么办?ZFS在我的用例中效果很好。
ewwhite

3
@ewwhite,好吧,有人可以开车骑自行车在附近走,说他喜欢走路,并且喜欢自行车,但事实是自行车是骑在自行车上制成的。)
poige

2

对于你们所有人...通过Raid进行的ZFS完全是痛苦,并且只能由MAD人员完成!...就像将ZFS与非ECC内存一起使用。

使用样本,您将更好地理解:

  • ZFS over Raid1,一个磁盘在未关闭电源时发生了一些变化……撬开所有信息,ZFS会发现是否损坏,这取决于所读取的磁盘(Raid控制器未看到该更改,并认为两个磁盘都可以) )...如果失败发生在VDEV部分中,则整个ZPOOL会永久丢失其所有数据。
  • ZFS over Raid0,一个磁盘在未关闭电源时发生了一些变化……撬动所有信息,(RAID控制器没有看到该位发生变化,并认为两个磁盘都可以)……ZFS会看到这种损坏,但是如果失败发生在VDEV部分...整个ZPOOL永远失去所有数据。

ZFS的优势在于,当磁盘断电(RAID控制器无法执行此操作)时,以及在某些情况下未经请求而发生更改时,检测出已更改的位。

这与在RAM模块中的某个位自发改变而不要求您...内存是否为ECC时,内存会自行对其进行更正一样。如果不是,则表明数据已更改,以便将数据发送到已修改的磁盘;撬动更改不在UDEV部分,如果失败在VDEV部分...整个ZPOOL会永久丢失其所有数据。

这是ZFS的弱点... VDEV失败意味着所有数据永远丢失。

硬件突袭和软件突袭无法检测到自发的位变化,它们没有校验和,在Raid1级别(镜像)上表现最差,他们没有读取所有部分并进行比较,他们假设所有部分始终具有相同的数据,总之(我说Raid认为数据没有任何其他变化……但是磁盘(作为内存)容易发生自发的位变化。

永远不要在非ECC RAM上使用ZFS,也永远不要在突击磁盘上使用ZFS,让ZFS查看所有磁盘,不要添加会破坏VDEV和POOL的层。

如何模拟这样的故障...关闭PC,关闭Raid1的一个磁盘并仅更改一位...重新连接,看看Raid控制器如何不知道已更改... ZFS可以进行所有读取,因为针对校验和,如果不匹配,则从另一部分读取... Raid再也不会读取,因为失败(除非硬件无法读取失败)...如果Raid可以读取,则认为数据是可以的(但在这种情况下不可以) )... RAID仅在读取的地方说“嘿,我不能从那里读取,硬件出现故障”时才尝试从其他磁盘读取...如果校验和与读取的地方也不匹配,则ZFS从另一个磁盘读取说“嘿,我无法从那里读取信息,硬件出现故障”。

希望我说得很清楚...在任何Raid级别上进行ZFS都将给您带来极大的痛苦,并对您的数据造成总体风险!以及非ECC存储器上的ZFS。

但是,除了我之外,没有人说:

  • 请勿使用具有内部缓存的磁盘(不仅是那些SHDD,还有一些具有8Mib至32MiB缓存的磁盘,等等)...其中一些将非ECC内存用于此类缓存
  • 请勿使用SATA NCQ(一种排队写方法),因为如果电源松动,它可能会破坏ZFS

那么要使用哪些磁盘?

  • 任何带有内部电池的磁盘都可以确保所有队列在掉电情况下都可以写入磁盘,并在其中使用ECC内存(对不起,所有磁盘都很少,而且价格昂贵)。

但是,嘿,大多数人都不知道这一切,也从来没有遇到过问题...我对他们说:哇,您真幸运,在幸运消失之前买了几张彩票。

那里有风险...可能会出现此类故障,因此更好的答案是:

  • 尽量不要在ZFS与实际存储数据(RAM,Raid,NCQ,内部磁盘高速缓存等)之间放置任何层……尽您所能。

我个人做什么?

  • 再放一些层...我在USB 3.1 Gen2 Type C机箱上使用每个2.5“ SATA III 7200 rpm磁盘,我将某些机箱连接到我连接到PC的USB 3.1 Gen 2 Type A集线器;另一个连接到另一个集线器我连接到PC上的另一个根端口等
  • 对于该系统,我在ZFS(Raid0级别)上使用内部sata连接器,因为我使用了一个不变的(如LiveCD)Linux系统,所以每次启动时内部磁盘上的内容都是相同的……并且我拥有可以还原的系统克隆映像(小于1GiB系统)...我还使用技巧将系统包含在文件中,并使用RAM映射的驱动器在启动时克隆该驱动器,因此启动后所有系统都在RAM中运行...将此类文件放在DVD也可以以相同的方式引导,因此,如果内部磁盘发生故障,我只需用DVD引导,然后系统又可以联机...与SystemRescueCD相似的技巧,但是由于ISO文件可以在其中有点复杂内部ZFS或只是真正的DVD,我不希望有两个不同的版本。

希望我能对ZFS对抗Raid有所了解,当事情出错时,这真的很痛苦!


因此,您是说ZFS太不可靠了,如果只更改一点,就可能会丢失整个文件系统?仅当扇区已成功写入(尽管顺序可能不同)时,驱动器仍通知主机时,SATA NCQ如何引起数据丢失?
Malvineous 18/09/24
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.