对于大小不等的磁盘,zfs IO 操作的性能如何?

对于大小不等的磁盘,zfs IO 操作的性能如何?

我有 (ZOL) zfs 池(无镜像和 raidz),名为primaryPool

# zfs list
NAME                     USED  AVAIL  REFER  MOUNTPOINT
primaryPool                 54.5G  41.9G    96K  /
primaryPool/ROOT            20.0G  41.9G    96K  none
primaryPool/ROOT/main_root    1.98G  59.9G  1.98G  /
primaryPool/application     1.26G  60.6G  1.26G  /opt
primaryPool/boot              96K  41.9G    96K  /boot
primaryPool/storage          275M  41.9G   275M  /opt/movies
primaryPool/swap            4.25G  43.4G  2.71G  -

我有备用的 1TB 磁盘 /dev/sdb,是否可以将其直接添加到池中,或者添加另一个池并将整个磁盘分配给它?在阅读 raidz 或镜像设置上的 zfs 最佳实践时,不建议使用不同大小的磁盘,但在具有单个 vdev(单个磁盘)的池中使用大小不等的磁盘是否会产生任何负面或正面影响?

答案1

根据您的问题及其下方的评论,您是在问在两个大小不等的磁盘之间建立条带化池是否是个好主意。简短的回答是,如果符合以下条件,这样做本身没有什么问题:

  • 您的工作量对性能的要求并不高。如果是,请在整个池中使用统一的磁盘类型。否则,磁盘可能具有不同的性能特征,从而产生难以追踪的非常细微的性能问题。(例如,假设您有两块由同一家供应商在同一年生产的 10K RPM 磁盘,一块是 1TB,另一块是 2TB。没问题吧?不幸的是,没有——其中一个将获得大约两倍的吞吐量,即使驱动器之间的最大 IOPS 相同。)
  • 没有额外的冗余就没问题。请注意,在任何情况下,你都会增加输球的可能性全部数据,因为你从一个磁盘发生故障的概率,变成了任何一个磁盘A或者磁盘 B(或两者)发生故障。即使 ZFS 保留了多个元数据副本,如果随机有一半的数据丢失,您将很难从池中恢复许多完整/可用的文件。

尽管如此,仍然有一些不明智的设置方法。如果其中一个磁盘是 SSD,另一个是 HDD,则条带化会破坏使用 SSD 获得的性能提升,并且可能会让您非常沮丧。在这种情况下,我建议:

  1. 使用较大的 HDD 作为“主数据磁盘”,然后将 SSD 分成两个分区:一个大分区用作 L2ARC ( cache) 设备,以加快频繁读取数据的读取速度,一个小分区用作 ZIL ( log) 设备,以加快同步写入延迟。这个解决方案很好,因为它会自动将最有用的内容缓存在 SSD 上,因此您不必费心平衡它。此外,您只会损失全部在这种情况下,如果丢失了 HDD,您的数据(如果 SSD 坏了,您可能会丢失几秒钟的写入数据,但这比丢失所有数据要好得多,就像上面的条带化情况一样)。
  2. 为每个磁盘创建一个单独的池,并手动将您希望快速运行的内容(操作系统、可执行文件、库、交换等)保存在 SSD 上,将可以接受的慢速内容(电影、相册等)保存在 HDD 上。如果机器经常重新启动,这是最好的选择,因为缓存在 L2ARC 中的数据在重新启动后不会保留。(在我看来,这是当前个人电脑 L2ARC 故事的一个重大弱点,但正在积极努力解决。)从冗余的角度来看,您显然只会丢失发生故障的磁盘上的内容。

—- 由于这些磁盘是虚拟化的,因此进行编辑 —-

由于这是虚拟机,除非您为磁盘性能指定了特殊参数,否则上述性能/冗余标准都不应阻止您使用两个不匹配的磁盘大小创建池。但是,如果您只使用虚拟化平台将原始磁盘的大小调整为建议的磁盘大小的总和,管理起来会容易得多。要在客户机内使用该额外空间,您必须运行zpool online -e <pool> <disk>,由于这是 ZoL,您可能必须先修复分区表,如说明中所述这里

由于易于管理,您应该强烈推荐这种方法,但有一个非常小的缺点是,当您调整大小时,ZFS 无法更改其元板大小。元板是用于磁盘空间分配的内部数据结构,直到最近,ZFS 始终为每个磁盘创建 200 个元板,而不管磁盘大小如何(目前正在努力改进这一点)。因此,当您将磁盘大小从非常小增加到非常大时,您最终可能会得到非常多的元板,这会占用更多的 RAM 和磁盘空间。除非磁盘大小发生非常大的变化(如 10G -> 1T),否则这种情况并不明显,即使如此,也只有当您将机器的性能推到极限时才会出现这种情况。通常可以通过为您的虚拟机提供更多的 RAM 来解决性能影响。

相关内容