马春杰杰博客
致力于深度学习经验分享!

在ZFS中,使用镜像mirror还是使用raidz?

文章目录
[隐藏]

首先下结论:我们推荐使用镜像而非raidz

池拓扑的基础

池是vdev的集合。Vdevs可以是以下任意一种(以及更多,但我们保持相对简单):

  • 单磁盘(以RAID0为例)
  • 冗余vdev(又名镜像–考虑RAID1)
  • 奇偶校验vdev(又称为条带–考虑RAID5 / RAID6 / RAID7,又称为单,双和三奇偶校验条带)

池本身将在相对均匀的基础上在其中的vdev之间分配写入。但是,这并不是RAID10中所看到的“条带”,它只是写入的分布。如果您从2个2TB驱动器和2个1TB驱动器中制作一个RAID10,则浪费了更大的驱动器上的第二个TB,并且您的冗余后存储仍然只有2 TB。如果将与两个镜像vdev相同的驱动器放在zpool中,则它们将是2x2TB镜像和2x1TB镜像,而冗余后的存储将是3TB。如果在写入池之前一直写入池,则可能在两个2TB磁盘已满之前很早就完全填充了两个1TB磁盘。究竟怎样写操作的分布不规范有保证的,只是他们被分配。

如果您有十二个磁盘,并且将它们配置为每个六个磁盘的两个RAIDZ2(双奇偶校验条带)vdev,该怎么办?好吧,您的池将由两个RAIDZ2阵列组成,并且将像在镜像池中一样在它们之间分配写操作。如果您制作了十个磁盘RAIDZ2和两个磁盘镜像怎么办?同样,它们进入池,池在它们之间分配写操作。通常,您可能应该期望池的性能表现出池中每个vdev的最差特性。在实践中,无法保证读取将在池中进行–它们将来自“写入的任何vdev”,并且池可以写入任何给定块所需的任何vdev。

储存效率

如果名称不清楚,则存储效率是可用存储容量(在冗余或奇偶校验之后)与原始存储容量(在冗余或奇偶校验之前)之比。

这是很多人陷入困境的地方。“ 显然,我希望从我拥有的磁盘中获得最可用的TB,对吗?” 可能不是。这么大的数字可能看起来很性感,但是有可能在以后给您带来很多麻烦。我们将在下一节中进一步讨论该问题。现在,让我们看一下每种vdev类型的存储效率。

  • 单磁盘vdev – 100%的存储效率。直到丢失单个磁盘,它的存储效率才变为0%…
    单磁盘vdev
    八个单磁盘vdev

     

  • RAIDZ1 vdev-(n-1)/ n,其中n是每个vdev中的磁盘数。例如,八个磁盘的RAIDZ1的SE为7/8 = 87.5%。
    突袭1
    八个磁盘raidz1 vdev

     

  • RAIDZ2 vdev-(n-2)/ n。例如,八个磁盘的RAIDZ2的SE为6/8 = 75%。
    raidz2
    八个磁盘raidz2 vdev

     

  • RAIDZ3 vdev –(n-3)/ n。例如,八个磁盘的RAIDZ3的SE为5/8 = 62.5%。
    突袭3
    八个磁盘raidz3 vdev

     

  • 镜像vdev – 1 / n,其中n是每个vdev中的磁盘数。设置为4个2磁盘镜像vdev的8个磁盘的SE为1/2 = 50%。
    镜像vdev
    四个2磁盘镜像vdev的池

     

最后一点:带区(RAIDZ)的vdev不应“尽可能地大”。专家对于实际提出有关条带宽度(条带化vdev中设备的数量)的具体建议持谨慎态度,但他们总是建议使它们“不要太宽”。如果您认为自己是专家,请对此做出自己的专家决定。如果您不认为自己是专家,并且想要更具体的常规经验建议:每个vdev最多八个磁盘。

容错/性能下降

小心点 请记住,如果任何单个vdev失败,则整个池都会随之失败。池级别没有容错能力,只有单个vdev级别有容错能力!因此,如果使用单个磁盘vdev创建一个池,则任何故障都会使整个池崩溃。

可能会很想使用那么大的存储容量并使用RAIDZ1…,但这还不够。如果磁盘发生故障,则更换磁盘池时,池的性能将大大降低。而且,在磁盘被更换并完全重新镀银之前,您根本没有容错能力……这可能需要几天甚至几周的时间,具体取决于磁盘的性能,实际使用的磁盘负载等。您的磁盘发生故障,并且使用时间是一个因素……您会流汗,想知道在重新备份完成之前另一个磁盘是否会发生故障。然后,每次更换磁盘时,您都必须重新检查整个过程。糟透了 不要这样 出于完全相同的原因,强烈建议不要使用常规RAID5。根据戴尔的说法,“针对任何驱动器类型上所有关键业务数据的RAID 5不再是最佳实践。”

RAIDZ2和RAIDZ3尝试通过分别扩展为双重和三重奇偶校验来解决这一噩梦。这意味着RAIDZ2 vdev可以承受两个驱动器故障,而RAIDZ3 vdev可以承受三个驱动器故障。问题解决了吧?好了,问题得到了缓解 -但是性能下降和重新启动时间甚至比RAIDZ1还要糟糕,因为奇偶校验的计算要粗糙得多。而且,您的条带(vdev中的磁盘数)越宽,情况就越糟。

最后保存最好的:镜像vdevs。当镜像vdev中的磁盘发生故障时,您的池受到的影响最小–无需通过奇偶校验重建任何内容,只需要少一个设备即可分发读取的数据。在更换镜像vdev中的磁盘并将其重新分配后,您的池再次受到的影响最小–您正在从vdev的其余成员进行简单读取,并向vdev的新成员进行简单写入。在任何情况下,您都不会重新写入整个条带,池中的所有其他vdev都完全不受影响,依此类推。镜像vdev重新同步非常迅速,对池的性能影响很小。尽管需要进行一些计算,但对多个故障的抵御能力非常强-磁盘故障幸存的几率是1-(f /(nf)),其中f是已发生故障的磁盘数,n是磁盘中的磁盘数全池。在八个磁盘池中,这意味着第一个磁盘故障的生存率为100%,第二个磁盘故障的生存率为85.7%,第三个磁盘故障的生存率为66.7%。当然,这里假设有两个磁盘vdev –三个磁盘镜像更具弹性。

但是,等等,为什么我要在RAIDZ2中交易保证的两个磁盘故障,而镜像池中两个磁盘故障的存活率只有85.7%?由于重新镀银的时间大大缩短,并且这样做的时间大大降低了。在镜像vdev重新同步期间,唯一比平常负载更大的磁盘是vdev中的其他磁盘-听起来可能很糟糕,但是请记住,它的负载并不比作为RAIDZ成员时要重。重新组合在RAIDZ vdev上的每个块都需要从每个幸存的RAIDZ成员中读取一个块。写入重新同步镜像的每个块仅需要  从尚存的vdev成员中读取一个块。对于六个磁盘的RAIDZ1与六个磁盘的镜像池,这是原来的  五倍 剩余磁盘所需的额外I / O需求。

重新镜像镜像比重新镜像RAIDZ压力小得多。

关于容错的最后一点

无论您的ZFS池拓扑是什么样,您仍然需要定期备份

再跟我说一遍:我必须备份我的游泳池!

ZFS很棒。将校验和与奇偶校验/冗余结合在一起真是太棒了。但是,仍有许多潜在的数据丢失方式,并且您仍然需要备份池。期。期!

正常表现

人们很容易想到,巨大的RAIDZ vdev会比镜像vdev池的性能好,原因是它具有更高的存储效率。“好吧,当我读取或写入数据时,它会突然从/进入更多驱动器,因此必须更快!” 抱歉,这种方式不起作用。如果您一次执行一次读取或写入大量数据,而绝对没有其他活动在进行,如果 RAIDZ完全没有碎片,那么可能会看到类似的结果……但是当您开始抛出其他数据时同时读取或写入,在vdev上碎片化等等,然后您开始寻找随机访问IOPS。但是不要听我的,请听ZFS的核心开发人员之一Matthew Ahrens:为了在随机IOPS上获得最佳性能,请在每个RAID-Z组中使用少量磁盘。例如,3宽RAIDZ1、6宽RAIDZ2或9宽RAIDZ3(在使用大块的理想情况下,所有这些都使用总存储的1/3作为奇偶校验)。这是因为RAID-Z将每个逻辑块分布在所有设备上(类似于RAID-3,与RAID-4 / 5/6相反)。为了获得更好的性能,请考虑使用镜像。

请更努力地阅读最后一点:为了获得更好的性能,请考虑使用镜像。他不是在开玩笑。就像长期以来公认RAID10性能最佳的常规RAID拓扑一样,镜像vdev池是迄今为止性能最佳的ZFS拓扑。

未来扩展

如果您是SOHO管理员或业余爱好者,那么这应该是您的最爱。每个人都知道抱怨的ZFS问题之一是您无法扩展RAIDZ。创建它之后,就创建了它,并且您对此一无所知。

好吧,有点。

假设您有一台具有12个插槽的服务器来放入驱动器,并且在其中放置了六个驱动器作为RAIDZ2。当您购买它时,1TB驱动器物超所值,这就是您所使用的。您有6TB原始数据/ 4TB可用数据。两年后,2TB驱动器很便宜,您会感到局促。因此,您填充了服务器中六个可用托架的其余部分,现在,您添加了12TB原始/ 8TB可用vdev,总池大小为18TB / 12TB。在之后的两年,4TB驱动器出现了,您再次感到局促……但是您没有地方放驱动器了。怎么办?

好了,您实际上可以升级原始的1TB驱动器的RAIDZ2 –您要做的是从vdev中使一个磁盘发生故障,然后将其删除,然后用您的4TB驱动器之一替换它。等待重新同步完成,然后再进行一次失败,然后将其更换。起泡沫,冲洗,重复进行,直到您更换了所有六个驱动器,并分别重新虚拟化了vdev六次–第六次也是最后一次重新同步完成后,您将拥有24TB原始/ 16TB可用vdev来代替原始的6TB / 4TB。问题是,进行所有这些重新同步了多长时间?好吧,如果6TB的原始vdev几乎已满,则可以期望每次重新同步都花费12到16个小时……即使您对系统完全不做任何事情,这也不是不合理的。您实际尝试的越多同时,重新同步的速度越慢。您可能设法在整整六天内完成六次重新备份,每天更换一块磁盘。但是可能要花两倍更长的时间,甚至更糟,这取决于将鼠标悬停在您的系统上的意愿以及此期间的负载量。

如果您使用了镜像vdev,该怎么办?好吧,首先,您原来的六个驱动器将为您提供6TB原始磁盘/ 3TB可用磁盘。所以您确实放弃了TB的存储空间。但是,也许您第一次扩展时并没有进行如此大的升级。也许因为您只需要再放入两个磁盘来获得更多存储空间,您就只购买了两个2TB驱动器,而当您再次感到局促时,4TB磁盘就可用了-您仍然有四个可用的托架。最终,尽管您塞满了盒子,但现在又想升级那些旧的1TB小磁盘。您以相同的方式进行操作–替换,重新同步,替换,重新同步–但是这一次,您只需两次重新同步就可以看到新空间。每次重击都发生得非常多更快-期望几乎满载的1TB镜像vdev在三到四个小时内恢复正常运行并非没有道理。因此,即使不必将鼠标悬停在计算机上,您也可以在一天内升级整个vdev。重新镀银期间,机器的性能几乎不会受到影响。你看到的每更换两个磁盘之后的新产能,而不是每六个月。

本文最后更新于2020年5月31日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!

如果你对这篇文章有什么疑问或建议,欢迎下面留言提出,我看到会立刻回复!

打赏
未经允许不得转载:马春杰杰 » 在ZFS中,使用镜像mirror还是使用raidz?
超级便宜的原生ChatGPT4.0

留个评论吧~ 抢沙发 评论前登陆可免验证码!

私密评论
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址(选填,便于回访^_^)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

登录

忘记密码 ?

切换登录

注册