采用硬件RAID的ZFS最佳实践

如果某个人恰好有一些服务器级的硬件需要处理,那么是否build议在基于硬件的RAID1之上运行ZFS? 是否应该closures基于硬件的RAID,然后在mirrorraidz zpool上运行ZFS?

在硬件RAIDfunctionclosures的情况下,基于硬件RAID的SATA2和SAS控制器比非硬件RAID控制器隐藏读取和写入错误的可能性更大或更小?

就非可定制的服务器而言,如果存在硬件RAID控制器实际上成本中立的情况(甚至降低了预build服务器产品的成本,因为它的存在提高了托pipe公司提供互补IPMI的可能性访问),是否应该完全避免? 但是,它应该追求?

ZFS的想法是尽可能地让它知道磁盘是如何运作的。 那么,从最糟糕到最好:

  • 硬件RAID(ZFS对于真正的硬件完全没有线索),
  • JBOD模式(问题更多的是关于任何潜在的扩展器:更less的带宽),
  • HBA模式是理想的(ZFS知道磁盘的一切)

由于ZFS对于硬件相当偏执,所以隐藏的越less,就越能应付任何硬件问题。 正如Sammitch指出的那样 ,configurationRAID控制器也意味着在死亡(硬件和configuration)的日子里也会遇到同样的问题。

关于硬件标准化的问题,硬件RAID控制器,硬件控制器有一个真正的传递或JBOD模式。

问:如果某个人恰好拥有一些服务器级的硬件,那么build议在基于硬件的RAID1之上运行ZFS吗?

答:强烈build议将ZFS直接运行到磁盘,而不要使用任何forms的RAID。 无论是否有效地要求您使用RAID卡的系统都无法使用ZFS,与ZFS的其他好处相比,它具有更高的数据弹性。 如果有底层的RAID卡负责为ZFS提供单个LUN,那么ZFS就不会提高数据永续性。 如果你首先考虑使用ZFS的唯一原因是数据弹性改善,那么你就失去了使用它的一切理由。 但是,ZFS还提供了ARC / L2ARC,压缩,快照,克隆以及其他您可能也需要的其他改进,在这种情况下,它可能仍然是您select的文件系统。

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

答:是的,如果可能的话。 一些RAID卡允许直通模式。 如果有的话,这是最好的办法。

问:在硬件RAIDfunctionclosures的情况下,基于硬件RAID的SATA2和SAS控制器比非硬件RAID控制器隐藏读取和写入错误的可能性更大或更小?

答:这完全取决于有问题的RAID卡。 您必须仔细阅读手册或联系RAID卡的制造商/供应商才能find答案。 有一些非常重要,是的,特别是如果“closures”RAIDfunction实际上并没有完全closures它。

问:就非可定制的服务器而言,如果存在硬件RAID控制器实际上成本中立的情况(或者甚至降低了预先构build的服务器产品的成本,因为它的存在提高了主机公司提供的可能性互补的IPMI访问),是否应该完全避免? 但是,它应该追求?

答:这和你的第一个问题是一样的。 再说一次 – 如果您只希望使用ZFS,可以提高数据弹性,并且您select的硬件平台需要RAID卡为ZFS(或多个LUN,但您的ZFS分区)提供单个LUN,那么您正在没有什么可以提高数据弹性,因此您selectZFS可能不合适。 但是,如果您发现其他任何ZFSfunction都有用,它可能仍然是。

我想添加一个额外的问题 – 上述答案依赖于在ZFS下使用硬件RAID卡不会损害ZFS,除去提高数据永续性的能力。 事实是,这是一个灰色地带。 ZFS中有各种可调和假设,在交付多磁盘LUN而不是原始磁盘时,运行得并不一定好。 大多数情况下,可以通过适当的调整来取消,但是在大型RAID LUN之上,ZFS不会像在单个主轴之上一样高效。

此外,还有一些证据表明,ZFS与LUN的对话方式与传统的文件系统截然不同,它们通常会调用RAID控制器中的代码path以及他们不习惯的工作负载,这可能会导致一些怪异现象。 最值得注意的是,如果您不是还提供了一个单独的日志设备,您可能会完全禁用ZILfunction,如果您还没有提供单独的日志设备,尽pipe当然我会强烈build议您请提供一个单独的原始日志设备(如果可能的话,不是来自RAID卡的LUN)。

我经常在HP ProLiant Smart Array RAIDconfiguration上运行ZFS。

为什么?

  • 因为我喜欢ZFS的数据分区,而不是启动分区。
  • 因为现在Linux和ZFS启动对我来说可能不够安全。
  • 由于HP RAID控制器不允许RAW设备直通 。 configuration多个RAID 0卷与RAW磁盘不同。
  • 由于服务器背板通常不足以将驱动器托架专用于特定控制器或在两个控制器之间分配职责。 这几天你最常看到8和16机架的设置。 并不总是足够的分割事情的方式。
  • 但是我仍然喜欢ZFS的卷pipe理function。 zpool允许我dynamic地分割东西,充分利用可用的磁盘空间。
  • 压缩,ARC和L2ARC是杀手function!
  • 在硬件RAID上正确devise的ZFS设置仍然提供了良好的警告和故障警报,但是胜过仅硬件解决scheme。

一个例子:

RAID控制器configuration。

 [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 

zpoolconfiguration

 [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 - 

通常情况下,您不应该在RAIDarrays中configuration的磁盘上运行ZFS。 请注意,ZFS不必在RAID模式下运行。 您可以使用单个磁盘。 但是,几乎99%的人为它的RAID部分运行ZFS。 你可以在条带模式下运行你的磁盘,但这是ZFS的一个糟糕的用处。 就像其他海报所说的,ZFS想知道很多关于硬件的知识。 ZFS只能连接到可以设置为JBOD模式的RAID卡,或者最好连接到HBA。 跳到IRC Freenode频道#openindiana; 渠道中的任何ZFS专家都会告诉你同样的事情。 如果他们不提供HBA,请要求您的主机提供商提供JBOD模式。

简而言之:在ZFS下使用RAID只是简单地杀死了使用ZFS的想法。 为什么? – 因为它devise用于纯磁盘,而不是RAID。

对于你们所有人来说…任何Raid的ZFS都是一个完全的PAIN,只能由MAD人来完成!就像使用非ECC内存的ZFS一样。

有了样品,你会更好地理解:

  • ZFS over Raid1,一个磁盘在没有closures的情况下有点改变…撬开所有你知道的,ZFS将会看到一些损坏或不依赖于什么磁盘被驱动(Raid控制器没有看到这个位改变,并认为两个磁盘都OK )…如果失败在VDEV部分…整个ZPOOL永远丢失所有的数据。
  • ZFS over Raid0,一个磁盘在没有closures的情况下有点变化…撬你知道的所有,(Raid控制器没有看到这一点改变,认为两个磁盘都可以)… ZFS会看到这种损害,但如果失败在VDEV部分…整个ZPOOL永远丢失所有的数据。

ZFS的好处在于检测当没有电源的磁盘(RAID控制器不能这样做)时发生改变的位,以及在没有被请求时改变的东西等等。

当RAM模块中的某一位自发地改变而没有被要求时,这是一样的问题…如果存储器是ECC,则存储器自己纠正它; 如果没有,数据已经改变,这样数据将被发送到修改的磁盘; 撬这个变化是不是在UDEV部分,如果失败是在VDEV部分…整个ZPOOL永远丢失所有的数据。

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

硬件Raid和软件Raid无法检测到自发的比特变化,他们没有校验和,在Raid1级别(mirros)最差,他们读取不是所有的部分和比较他们supose所有部分将总是有相同的数据,总之它大声)Raid suposes数据没有改变任何其他的东西/方式…但磁盘(作为内存)容易发生自发的位变化。

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

如何模拟这种失败…closures电脑,拿出一个Raid1的磁盘,只改变一个位…重新调整,看看Raid控制器如何不知道已经改变… ZFS可以因为所有的读取被testing反对校验和,如果不匹配,阅读forms另一部分… RAID再也没有读过,因为一个失败(硬件不可能读取失败)…如果Raid可以读取它认为数据是好的(但它不是在这种情况下)… RAID只尝试从另一个磁盘读取,如果它读的地方说“嘿,我不能从那里读取,硬件失败”…如果校验和不匹配,如果它读取从另一个磁盘ZFS读取说:“嘿,我不能从那里读取,硬件失败”。

希望我能说得很清楚…在任何级别的Raid上ZFS都是一种全身痛苦和总体风险! 以及非ECC内存上的ZFS。

但是没有人说(除了我)是:

  • 不要使用具有内部caching的磁盘(不仅那些SHDD,也有一些具有8Mib到32MiBcaching的磁盘等等)…其中一些使用非ECC内存用于这样的caching
  • 不要使用SATA NCQ(一种排队写入的方式),因为如果电源松动会损坏ZFS

那么使用什么磁盘?

  • 任何带有内部电池的磁盘,确保所有的queu都会在电源故障的情况下写入磁盘,并在内部使用ECC内存(抱歉,这些内存很less,而且很贵)。

但是,嘿,大多数人都不知道这一切,从来没有遇到过问题……我对他们说:哇,你真幸运,在幸运离开之前买一些彩票。

风险在那里……这样的失败可能会发生……所以更好的答案是:

  • 尽量不要在ZFS和真正存储数据(RAM,Raid,NCQ,内部磁盘高速caching等)之间放置任何层…尽可能多的。

我个人做什么?

  • 多放一些层…我在USB 3.1 Gen2 C型机箱上使用每个2.5“SATA III 7200 rpm磁盘,我将一些机箱连接到我连接到PC的USB 3.1 Gen 2 Type A集线器;其他集线器连接到另一个集线器我连接到PC上的另一个根端口等
  • 对于我使用ZFS(Raid0级别)的内部sata连接器的系统,因为我使用了一个不可变的(如LiveCD)Linux系统,每个引导内部磁盘上相同的内容…我有系统的克隆映像,我可以恢复(less于1GiB系统)…我也使用这个技巧,让系统包含在一个文件中,并使用RAM映射的驱动器在启动时克隆它,所以启动后,所有的系统在RAM中运行…把这样的文件一个DVD我也可以启动相同的方式,所以在内部磁盘的情况下,我只是启动与DVD和系统再次联机…类似的技巧SystemRescueCD,但有点复杂,因为ISO文件可以在内部的ZFS或只是真正的DVD,我不想要两个不同的版本。

希望我能给ZFS一点点反对Raid,当事情出错时真的很痛苦!