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

RAIDZ和镜像mirror之间的一些区别,以及为什么使用镜像进行块存储

ZFS是一个复杂而强大的系统。

RAIDZ(包括Z2,Z3)非常适合存储大型顺序文件。ZFS将为大量数据块分配连续的磁盘长时间段,将其压缩并以有效方式存储奇偶校验。当您以这种方式使用RAIDZ时,它会很好地利用可用的原始磁盘空间。但是,RAIDZ并不擅长存储小块数据。为了说明我的意思,请考虑在RAIDZ3上存储8K数据块的情况。为了存储它,先存储8K数据块,然后再存储三个额外的奇偶校验块…效率不高。此外,从IOPS的角度来看,RAIDZ vdev倾向于表现出单个组件磁盘(也是最慢的磁盘)的IOPS行为。

因此,我们看到很多人进入论坛,试图将VM数据存储在其12磁盘宽的RAIDZ2上,并且想知道为什么他们的12磁盘30 TB阵列会降低性能。它展现了单个磁盘的速度。

解决方案是mirror。镜像不能很好地利用原始磁盘空间(因为最终只能占用1/2或1/3的空间),但是作为对更大资源投入的回报,您可以获得更好的性能。首先,镜像不消耗可变数量的空间用于奇偶校验。其次,您可能会有更多的vdev。我们刚才讨论的12个驱动器系统将具有4个三向镜像或6个二向镜像,这是vdev数量的4倍或6倍。这直接转化为大大增强的性能!

ZFS的另一项显着性能增强是保持较低的池占用率。

对于RAIDZ样式的文件存储,通常认为一旦超过80%,性能就会受到影响,但这并不完全正确。这是碎片和占用的组合,导致性能下降。

对于镜像来说,也是如此,但是由于要存储的数据通常是VM磁盘文件或数据库文件,因此变得更加复杂。因为它是写时复制文件系统,所以在VM磁盘文件中重写块会导致在其他位置分配一个新块,并在释放该块时(释放任何快照后)在旧块所在的位置创建一个孔等)。在写入新数据时,ZFS喜欢分配磁盘的连续区域来写入其事务组。这样做的一个有趣的副作用是,如果您要重写VM磁盘块1、5000、22222和876543,则当ZFS将事务组转储到磁盘时,它们实际上可能被写入顺序分配的块中。普通的磁盘阵列必须执行四次尝试才能进行这些写入,但是ZFS *可能*能够顺序写入它们。得出合理的结论,当ZFS具有可用的大量可用空间时,执行写入操作的速度可能会比传统磁盘阵列快五到十倍。不足之处?如果ZFS缺少可用空间,它将遭受损失。

如果您想要真正快速的VM写入,请保持较低的占用率。如果可能,低至10-25%。超过50%最终可能会导致性能非常差,因为碎片会随着年龄的增长和重写而增长。

当然,所有这些都无助于读取,随着时间的流逝,读取变得高度分散。ZFS通常使用ARC和L2ARC块来缓解这种情况,这使它可以提供来自缓存的最常访问的数据。

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

打赏
未经允许不得转载:马春杰杰 » RAIDZ和镜像mirror之间的一些区别,以及为什么使用镜像进行块存储

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

私密评论

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址(选填,便于回访^_^)
切换注册

登录

忘记密码 ?

切换登录

注册