我对 ZFS 有点陌生,但我正在创建一个包含 12 个物理驱动器的新存储池。
我目前的计划是跨 10 个驱动器和两个热备件使用 RAIDZ2。
但是我想知道在所有 12 个驱动器上使用 RAIDZ3 并且没有热备件是否会更好。
原因是热备件基本上是通电的空闲驱动器。他们可能需要几个月或几年的时间才能投入使用,那时我可能会发现它们不可行。如果它们是 RAID 条带的一部分,我至少可以得到关于它们是否好用的反馈。
我在网上没有看到太多关于这个的讨论。有人有建议吗?
我对 ZFS 有点陌生,但我正在创建一个包含 12 个物理驱动器的新存储池。
我目前的计划是跨 10 个驱动器和两个热备件使用 RAIDZ2。
但是我想知道在所有 12 个驱动器上使用 RAIDZ3 并且没有热备件是否会更好。
原因是热备件基本上是通电的空闲驱动器。他们可能需要几个月或几年的时间才能投入使用,那时我可能会发现它们不可行。如果它们是 RAID 条带的一部分,我至少可以得到关于它们是否好用的反馈。
我在网上没有看到太多关于这个的讨论。有人有建议吗?
关于热备件
热备件被设置到一个特定的池,但可以在发生故障时自动附加到池的任何 vdev 。如果您只有一个包含所有磁盘的 vdev,则最好直接合并磁盘(除非您已经有 RAIDZ3 并且仍有磁盘可用)。
此外,重新同步需要时间并且发生在易受攻击的状态(RAIDZ1、2 路镜像)或性能降低状态(RAIDZ2、RAIDZ3、3 路镜像),如果您已经将设备连接到 vdev,则不会发生这种情况。
基本上,热备件适用于大型阵列。如果您在 RAIDZ3 中将 27 个磁盘拆分为 9 个磁盘的 3 个 vdev,则可以添加 3 个热备件以减少“现在是凌晨 2 点,3 个磁盘已崩溃,现在我必须起床修复这个烂摊子”的时刻(假设 32驱动器托架系统)。较小的系统通常没有足够的磁盘来达到“2+ vdevs and Z2/Z3”的情况。一个例外是镜像(例如 6 x 2),其中崩溃对池来说更接近于致命(并且您没有足够的磁盘来使它们成为 6 x 3)。
最佳泳池布局
Nex7 博客中关于泳池布局的一些建议:
这意味着在您的情况下,您将有以下选择:
我会将它们(降序)排列为:
无论大小,我都不会使用 RAIDZ1,因为您可能希望稍后用更大的磁盘替换它们,然后问题就会出现(这意味着您不会以这种方式升级,并且可能无法在不添加额外磁盘的情况下增加存储空间)。
我刚刚对测试 ZFS 设置进行了基准测试,以回答与性能有关的问题(在一对尘土飞扬的旧服务器上从灰烬中恢复过来)。
我的设置是:
2x Intel Xeon L5640 CPU @ 2.27GHz(共:12 核;禁用 HT)
96GiB DDR3 RAM @ 1333MHz
Adaptec 5805Z 控制器,将所有磁盘导出为 JBOD(启用写入缓存,这要归功于控制器的电池支持 NVRAM)
12 个 15kRPM 146GB SAS 磁盘(希捷 ST3146356SS)
每磁盘 DRBD 复制(协议 C)通过 IP-over-Infiniband (20Gb/s Mellanox MT25204)
Debian/Stretch 上的 ZFS 0.7.6
zpool create -o ashift=12 ... /dev/drbd{...} (注意:DRBD 使用 4KiB 的复制“单元”大小)
zfs create -o recordsize=128k -o atime=off -o compression=off -o primarycache=metadata ...(最后两个仅用于基准测试)
在 RAIDz2 和 RAIDz3 的所有可能有趣组合的 bonnie++ 结果下方(12 个同步 bonnie++ 进程的5 次运行的平均值):
就表演而言:
2*RAIDz2(4d+2p+0s) 是平衡读写性能的赢家
1*RAIDz3(8d+3p+1s) 以获得最大读取性能(很奇怪)
至于如何解释/解释这些结果;我的 1 便士:
8 个数据磁盘精确地划分了 128k 记录大小,它可以解释(?)为什么它们总是优于 9 或 10 个数据磁盘(假设测试以 1024k 块大小运行,它在所有磁盘上完全对齐)
我预计 RAIDz3 的性能会比 RAIDz2 差,但是 1*RAIDz3(8d+3p+1s) 的情况非常奇怪地与此相矛盾
2*RAIDz2(4d+2p+0s) 案例的 VDEV 大小明显更小可以解释(?)为什么它的写入性能明显更好
编辑 1
作为对@AndrewHenle 评论的回应,以下是具有不同“块”大小的附加基准。不幸的是,bonnie++不允许块大小不是 2 的幂;所以我恢复到dd的( 5 次平均运行): PS:记住,ZFS 读取缓存(ARC)被禁用
至于我的 1 便士:
ZFS 显然足够智能地优化写入(即使对于低于记录大小的块大小)和/或(?) Adaptec 控制器(非易失性,512MiB)缓存在这方面有很大帮助
显然,禁用 ZFS 读取缓存 (ARC) 对于接近或低于记录大小的块大小非常不利;并且似乎 Adaptec 控制器缓存(令人惊讶?)不用于读取目的。底线:出于基准目的禁用 ARC 可以深入了解“原始、低级”的性能,但不建议用于生产用途(除了特定情况,例如很少使用的大文件库)
调整块大小以匹配 VDEV 大小似乎没有发挥积极作用 [错误假设;见编辑 2]
编辑 2
关于 RAIDz 和块大小(ashift)和记录大小(ZFS 文件系统):
RAIDz 通过数据/奇偶校验块填充底层设备,其大小由移位大小决定
记录(不是块)是校验和和写时复制操作的“基本单元”
理想情况下,ZFS 文件系统记录大小应该可以被 VDEV 中数据磁盘的数量 (D) 整除(但由于它必须是 2 的幂,这可能很难实现)
https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSRAidzHowWritesWork
https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSRAidzHowWritesWorkII
https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSLogicalVsPhysicalBlockSizes
和一个警告:
除非经过非常仔细的配置和功能测试,否则热备件可能无法工作
https://www.reddit.com/r/zfs/comments/4z19zt/automatic_use_of_hot_spares_does_not_seem_to_work/
底线 (确认其他回复中已经说过的话)
(条带化)较小的 VDEV(数据磁盘较少)比大型 VDEV 性能更好;计算/验证奇偶校验显然是一项代价高昂的操作,它比数据磁盘数量的线性增长更糟糕(参见 8d <-> 2*4d 情况)
具有更多奇偶校验磁盘的相同大小的 VDEV 比更少的奇偶校验磁盘和热备盘性能更好,并提供更好的数据保护
如果您在优先使用奇偶校验磁盘后仍有磁盘可用,则使用热备用解决“不要在半夜叫醒我”的问题[警告!见编辑 2]
后脚本
我的最终用例是托管一个(长期)时间序列数据库(稳定的中型写入和可能非常大的零星读取),对此我几乎没有关于 I/O 模式的详细文档(除了“针对SSD”推荐),我个人会选择 1*RAIDz2(8d+3p+1s):最大的安全性,更少的容量,(第二)最好的性能
我的建议是:
2 x 5 磁盘 RAIDZ1 + 两个备用
或者
3 x 3 磁盘 RAIDZ1 + 备件
或者
10 磁盘 RAID 镜像
或 5 个或 6 个磁盘的 2 个 RAIDZ2,带或不带备件
这取决于使用的磁盘类型。如果 7200 RPM 驱动器超过 2TB,请转到 RAIDZ2。如果 2TB 和用户,RAIDZ1 很好。