ZFS管理手册:第八章Zpool最佳实践和注意事项

这是ZPool管理的的最后一篇文章。在此之后,我们将继续讨论有关ZFS的几个主题,这些主题将为ZFS dataset奠定基础。我们之前的帖子介绍了zpool的属性,所以让我们直奔主题吧。首先,我们将讨论ZFS存储池的最佳实践,然后我们再讨论一些我认为在构建池之前必须了解的注意事项。

最佳实践

与所有建议一样,这些指南中的一些很重要,而另一些则没那么重要。你甚至可能不想严格地遵循它们。无论如何,你应该知道有这么一些优化的选项。我会试着为每一个最佳实践整理出它的原委。这些最佳实践没有按特定的顺序来排列。“最佳实践”的理念是优化空间效率、性能并确保最大限度的数据完整性。

  1. 仅在64位内核上运行ZFS。它有32位内核无法处理的专为64位内核而写的代码。
  2. 应该在大RAM的系统上安装ZFS。1 GB是最低配置,2 GB更好,4 GB最好。请记住,ZFS将使用RAM的1/2用于ARC。
  3. 尽可能使用ECC RAM 来 scrubbing 数据并保持数据一致性。ARC 是对RAM中有价值的只读数据进行缓存。
  4. 尽量使用整个磁盘而不是某个分区来创建池。因此,ZFS可以更好地利用磁盘上的缓存。如果您必须使用分区,请备份分区表,并在写入数据到其他分区时格外小心,避免破坏池中的数据。
  5. 使存储池中的每个VDEV保持相同大小。如果VDEV大小不同,ZFS将偏爱较大的VDEV,这可能会导致性能瓶颈。
  6. 尽可能使用冗余,因为ZFS可以使用冗余的数据修复池中错误的信息。MIRROE和RAID-Z都可以做到冗余。
  7. 考虑使用RAIDZ-2或RAIDZ-3而不是RAIDZ-1。如果RAIDZ-1中的某个磁盘出现故障,并且热备盘正在执行 resilvered 操作,在完整的复制数据之前,您无法承受再次出现磁盘故障,因为您将遭受数据丢失。使用RAIDZ-2,您可能会遇到两个磁盘故障,而不是一个,这增加了您在第二个、甚至第三个磁盘出现故障之前完全恢复必要数据的可能性。
  8. 执行完整存储池的定期(至少每周)备份。但这不是备份,除非你有多份拷贝。仅仅因为您有冗余磁盘,并不能确保在电源故障、硬件故障或电缆断开时可以继续读取数据。
  9. 使用热备盘从损坏的设备中快速恢复。将池的“AutoReplace”属性设置为ON。
  10. 考虑使用带有 固态硬盘或NVRAM设备来组成ZPool。使用读写速度很快的SLOG和L2ARC可以极大地提高性能。
  11. 如果使用具有多个设备的混合存储池,请对slog的设备进行MIRROR操作,并对L2ARC的设备组成RAID-1。
  12. 如果使用混合存储池,并且用的是SSD或NVRAM的分区来创建的,除非您知道您将需要多大,否则1 GB可能足以满足您的日志需求。将SSD或NVRAM驱动器的其余部分用于L2ARC。L2ARC的存储空间越大越好。
  13. 将池容量保持在80%以下以获得最佳性能。由于ZFS的写入时复制特性,文件系统变得非常碎片化。至少每月都检测一下已用空间是否超过80%。
  14. 如果可能,每周对消费级SATA和SCSI磁盘执行scrub操作,每月对企业级SAS和FC磁盘执行scrub操作。取决于很多因素,这可能没法按照上面所说的周期运行,但是,你应该尽可能频繁地scrub。
  15. 当在格式化时选择4 KB作为扇区大小,请在创建池时将“ashift”值设置为12,以获得最佳性能。512字节扇区的默认值为9。
  16. 将“AutoExpand”设置为“On”,这样在池中的所有磁盘都被更大的磁盘替换后,您可以自动扩展ZPool。默认设置为禁用。
  17. 在将磁盘从一个物理系统移动到另一个物理系统时,请务必执行export操作。
  18. 在考虑性能时,、对于顺序写入,MIRROR的性能将始终高于RAID-Z。对于顺序读取,RAID-Z在较小数据块上的执行速度将比MIRROR慢,而在较大数据块上的执行速度会更快。对于随机读写,镜像和RAID-Z的执行方式有些类似。在顺序和随机读取和写入方面,Striped MIRROR的性能都将优于镜像和RAID-Z。
  19. 默认情况下压缩时没启用的。对于今天的硬件来说,禁用压缩没有多大意义。ZFS压缩非常轻量、速度极快,几乎不会增加任何读取和写入延迟。事实上,在某些情况下,启用压缩会比禁用压缩时磁盘的响应速度更快。另一个好处是巨大的太空利益。

注意事项

警告列表的目的绝不是要阻止您使用ZFS。而是作为ZFS的管理员,这些是您应该知道的事情,以免让出问题是让你措手不及,导致数据的丢失。如果你不了解这些警告,你可能最终会损坏你的数据。这里可能与上面的“最佳实践”列表相混淆。我尝试让这个列表全部涉及到数据损坏问题。阅读并注意这些注意事项,那么您就不会有问题了。

  1. 您的VDEV决定存储的IOPS,而所有VDEV中最慢的磁盘将决定整个VDEV的IOPS。
  2. ZFS使用1/64的可用存储空间来存储元数据。因此,如果您购买了1 TB驱动器,则实际原始大小为976 GiB。在ZFS使用它之后,您将拥有961 GiB的可用空间。“zFS list”命令将显示可用存储的准确表示。请牢记这一点来规划您的存储。
  3. ZFS 想要控制整个块堆栈。 它通过校验和、重新同步实时数据来替代对完整的磁盘数据块的自我修复损坏,以及许多其他独特的功能。 如果使用 RAID 卡,请确保将其配置为真正的 JBOD(或“直通模式”),以便 ZFS 可以控制磁盘。 如果您不能用您的 RAID 卡执行此操作,请不要使用它。 最好使用真正的 HBA。
  4. 请勿在ZFS下使用其他卷管理软件。由ZFS控制所有的设备效率更高,且能更好的保证数据的完整性。因此,避免在ZFS下使用dm-crypt、mdadm或lvm。
  5. 请勿在池之间共享SLOG或L2ARC设备。每个池都应该有自己的物理设备,而不是逻辑驱动器,就像某些PCI-Express SSD卡那样。一个池使用完整的卡,另一个池使用不同的物理卡。如果您共享一个物理设备,则会造成争用情况,并可能最终导致数据损坏。
  6. 请勿跨不同服务器共享单个存储池。ZFS不是集群文件系统。如果您希望拥有共享存储后端,请在直接使用GlusterFS、Cephe、Lustre或其他一些分布式文件系统。
  7. 除混合池中的备盘、SLOG和L2ARC外,请勿在单个池中混用VDEV。如果一个VDEV是镜像,则所有VDEV都应该是镜像。如果一个VDEV是RAIDZ-1,则所有VDEV都应该是RAIDZ-1。ZFS会尝试跨VDEV平衡数据,具有不同冗余的VDEV可能会导致性能问题和空间效率问题,并且在发生故障时很难恢复。
  8. 请勿在单个VDEV中混合使用磁盘大小或速度。但是,一定要混合不同制造日期的磁盘,以防止大规模驱动器故障。
  9. 不要在存储池中混合使用磁盘大小不同或读写速度相差比较多的硬盘
  10. 请勿在VDEV之间混用磁盘数。如果其中一个VDEV使用4个驱动器,则所有VDEV都应使用4个驱动器。
  11. 请勿将单个控制器中的所有磁盘放在一个VDEV中。合理规划您的存储,以便如果控制器出现故障,仍能通过访问其他控制器中的磁盘,保证数据在线。
  12. 使用4k对齐时,您必须在创建池时将ashift值设置为12,因为创建后该参数无法修改。如zpool create-o ashift=12 tank sda sdb
  13. 默认情况下,热备盘不会自动替换VDEV中存在故障的设备。您必须手动设置,把自动替换功能设置为打开。如zpool set AutoReplace=On TANK
  14. 当池中的所有较小的设备都被较大的设备取代时,存储池本身不会自动调整大小。您必须启用此功能,并且必须在更换第一个磁盘之前启用它。如zpool set autoexpand=on tank
  15. ZFS不会在VDEV中或跨多个VDEV对数据进行restripe。通常,当向RAID阵列添加新设备时,RAID控制器将通过创建新的stripe width来重建数据。这将释放池中驱动器上的一些空间,因为它会将数据复制到新磁盘。但是ZFS没有这样的机制。它会随着时间的推移,磁盘将因写入而平衡,但即使是擦除也不会重建条带宽度。
  16. 你不能缩小zpool,只能扩大它。这意味着您不能从存储池中删除VDEV。
  17. 您只能使用zpool DETACH命令把MIRROR中的VDEV中的磁盘删除。但是,您可以在RAIDZ或MIRROR中用新的磁盘替换旧的磁盘。
  18. 请勿从现有zpool里的文件或ZVOL来创建新的存储池。会导致互相竞争,最终导致数据的损坏。始终应该将多个池分开。
  19. Linux内核可能不会在每次引导时为驱动器分配相同的驱动器号。因此,您应该通过/dev/disk/by-id/来指定你的slog和L2ARC。如果不这样做,您的zpool设备可能最终会变成一个slog设备,这反过来又会破坏您的ZFS数据。
  20. 不要仅仅因为ZFS支持,就创建巨大的存储池。尽管ZFS可以创建78位存储池大小,但这并不意味着您需要创建一个这么大的zpool。
  21. 不要将生产数据直接放入zpool。请改用ZFS dataset。
  22. 不要将生产数据提基于文件创建的vdev。使用文件创建的VDEV仅可用于测试脚本或了解ZFS的细节。

你可能感兴趣的:(zfs,zfs)