![关于构建生产 140 磁盘 (420 TB) ZFS zpool 的建议](https://linux22.com/image/663127/%E5%85%B3%E4%BA%8E%E6%9E%84%E5%BB%BA%E7%94%9F%E4%BA%A7%20140%20%E7%A3%81%E7%9B%98%20(420%20TB)%20ZFS%20zpool%20%E7%9A%84%E5%BB%BA%E8%AE%AE%20.png)
我的任务是为数据记录系统构建一个大型 zpool。在 CentOS 6.5 上的 Linux (0.6.4.2) 上使用 ZFS。
硬件规格:
- DL380 Gen8
- 80 GB 内存
- 2 个 HP HBA H221
- 2 台 HP D6000,每台配备 70 个 3TB SAS 磁盘
有一些特殊情况:
- 镜像是不可能的,我们会缺少存储空间。所需的总 TB 数量基本已确定。添加 D6000 单元不是一种选择。
- 数据中心将有 2 个这样的 zpool,使用应用程序级冗余。因此,整个池的丢失会带来问题,但并不严重。所有数据也将备份到磁带上。
- 目前无法使用 HP 加速卡(太贵了)
- 由于内核限制为 2.6.32,因此无法使用 PCIe NVMe 卡。
性能要求:
- 写入性能并不重要,基本上有一个稳定的写入流,大约为 4 MB/秒。
- 读取性能很有用,但实际上没有任何热数据集,根据需要可以读取或将读取哪些数据是非常随机的。
- 索引非常重要。zpool 完全加载后将有大约 150 万个文件,获取这些文件的列表应该尽可能快。ARC 在这方面有帮助吗?很多 RAM?
我的计划是按如下方式构建 zpool:
- 10 个磁盘的 14 VDEV,RaidZ2。
- 压缩
- 自动替换
- 休息时间
对于 SLOG 和 L2ARC,我实在没有好的选择。使用 HP SSD 并不是一个真正的选择,因为它们需要在硬件 Raid0 上作为单个设备运行。从我在这个网站上读到的内容来看,这是自找麻烦。
我的问题:
- 当然,如果有更多的 RAM 就更好了,但我真的需要它吗?
- 一旦 zpool 加载了 95% 以上的数据,我是否应该预料到会出现重大问题。较低的性能是可以接受的,正如所述,性能要求相当低。
- 建议使用任何其他 vdev 布局,而不会降低可用存储空间。
- 我应该考虑进行任何特殊的 ZFS 调整吗?我至少在考虑增加存储在 ARC 中的元数据份额。为了提高索引速度,有意义吗?
- 在使用 L2ARC 和 SLOG 设备时我是否应该考虑任何问题?
- 若有任何其他可使上述工作顺利进行的提示,我们将不胜感激!
答案1
更多 RAM 可能是一个不错的选择。如果读取性能并不重要,但元数据操作很重要:我建议将文件系统的“primarycache”设置为“metadata”。如果您有用于 L2ARC 的 SSD,您还可以选择使用内存 (ARC) 来缓存“全部”,并使用 secondarycache (L2ARC) 作为“metadata”。请注意,反过来不行(L2ARC 由 ARC 填充)。
一旦 zpool 加载了 95% 以上的数据,我是否应该预料到会出现重大问题
是也不是。这取决于平台/版本。旧版本在容量达到 80% 时速度会大幅下降。要解决此问题:100% 确保您的 slabtables 存储在内存中!(Solaris:metaslab_debug=1)。默认情况下,旧版本仅在内存中为每个磁盘存储 2 个 slab。这会降低性能。我认为 FreeBSD 和较新版本默认这样做。但是您需要一些内存(尤其是在有那么多磁盘的情况下)。
无论如何,我建议使用 SLOG (ZIL) 设备。这将确保您的写入立即得到确认,但每隔 x 秒写入慢速磁盘。这很有用,因为您只需在盘片上运行 1 次即可进行多次写入。这样可以为读取等留出更多的磁盘时间。
对于如此大的环境,我不建议在 Linux 上使用 ZFS。内存分配系统仍不是 100% 完善,导致 ZFS 和 Linux 争夺内存。