HDD 数据持久性:块级 RAID 与对象存储纠删码

HDD 数据持久性:块级 RAID 与对象存储纠删码

在数据持久性、容错性和恢复时间方面,我们已经广泛发表了关于使用纠删码的对象存储如何比块存储 RAID 更好的方法的博客。存储技术领域的其他人开始意识到我们是对的,RAID,本质上是 1980 年代的技术,已经过时了,无法提供始终在线的数据驱动的云原生数据中心所需的数据保护。

最近两项大规模研究(一项来自Secure Data Recovery和一项来自Backblaze)发现,普通 HDD 的平均故障时间分别在 2 年 10 个月和 2 年 6 个月之间。Secure Data Recovery 研究了 2,007 个硬盘驱动器的故障率,而 Backblaze 研究了由 72 种不同型号组成的 17,155 个驱动器的故障率。这两个结果是一致的,Backblaze 研究具有统计学意义。    

如下图,Backblaze按制造商、型号和尺寸爆发故障:


data-src-image-eecc3116-4d18-4def-bee2-454c9b1c993e.png


Backblaze 在他们的报告中指出,12TB 的 Seagate ST12000NM0007 比平均水平早得多,即 1 年零 6 个月,并且比他们数据中心中的任何其他驱动器发生故障的次数都要多。唯一出现更多故障的 HDD 是 4TB Seagate ST400DM000,尽管这些驱动器的平均寿命为 3 年 3 个月。查看 Backblaze 所有 HDD 的所有数据,而不仅仅是最近一个季度的数据,整体年化故障率 (AFR) 为 1.4%,而一些型号,例如 4TB 希捷 ST400DM000 显示的 AFR 是两倍。Backblaze 的完整数据集可在其硬盘测试数据页面上找到。

存储管理员从经验中知道,持续使用的 HDD 会发生故障,现在我们可以在上面加上一个数字来声明平均 HDD 在不到 3 年的时间内发生故障——如果您使用的是 Seagate,则少于 2 年。单个 RAID 阵列中丢失多个驱动器的可能性随着数据中心中硬盘驱动器数量的增加而增加(更多 HDD 等于更多故障)。RAID 的另一个问题是驱动器一旦发生故障就必须立即更换。这增加了运营成本。每隔几个月运行一次数据清理以检测和修复静默数据损坏会进一步增加所需的操作工作量,同时降低性能。

更好的解决方案是依赖分布式纠删码和 Bitrot 保护,如 MinIO 中所见。RAID 没有足够的奇偶校验来防止我们现在知道的 HDD 故障统计率。EC 将掩盖这些故障并大大降低运营成本,同时延长基础设施的使用寿命。

即使它被广泛实施,块级 RAID 在大型部署中使用时也会带来很多麻烦。该技术专为单服务器环境设计,不支持分布式数据存储。云原生架构需要对象存储,但块级 RAID 不知道对象是什么。RAID 无法修复保存在分布于多个节点的驱动器上的对象,它甚至无法修复对象,它只能修复块,这意味着它必须重建整个驱动器才能修复单个损坏的对象。

使用块级 RAID 重建驱动器非常耗时。以 RAID 6 为例。当一个驱动器发生故障时,它会被物理地停止服务,用一个新的驱动器替换,RAID 控制器将现有的块级数据从旧驱动器重建到新驱动器。查看上表,有很多正在使用的 10+ TB 驱动器。重建驱动器所需的时间可以被认为是驱动器容量/RAID 吞吐量——对于 10 TB HDD,这大约是 14 小时。

现在我们可以评估 HDD 故障的影响。HDD 在大约 2.5 年内发生故障,重建它们大约需要一个工作日(如果不是更长时间,我们现在看到大量 20 TB 驱动器)。像 Backblaze 运营的大型数据中心拥有大约 225,000 个 HDD。他们需要员工每天更换和重建大约十个硬盘驱动器 (225,000 x 1.4% / 365) 并重建十个 RAID 阵列。那是很多停机时间。

MinIO以分布式方式在对象级别实施擦除编码,并且在硬件出现故障时重建对象而不会导致停机或影响性能。与 RAID 相比,擦除编码更适合对象存储,因为对象一旦写入就不可更改,并且会被频繁读取。MinIO 纠删码和解码的速度与底层硬件支持的速度一样快。

MinIO 在对象级别跨多个驱动器和节点进行修复。与在卷级别修复的 RAID 相比,这是一个显着的优势。损坏的对象可以在几秒钟内在 MinIO 中恢复——与 RAID 重建整个卷所需的数小时相比,这是一个重大改进。

然后是BitRot或静默数据损坏。MinIO 使用 HighwayHash 算法在读取时计算哈希并在从应用程序写入时验证它。MinIO 以高效的方式做到这一点,并且可以在单核 Intel CPU 上实现 10+ GB/秒的散列速度。上面提到的研究都没有区分 BitRot 和其他类型的故障,但我们知道随着 HDD 老化,BitRot 的可能性增加。由于 BitRot 会破坏块,而 RAID 是一种块级技术,因此在单个驱动器发生故障后可能会丢失整个 RAID 组,因为损坏的块将用于重建新驱动器。这不是对象存储纠删码的问题。    

MinIO 纠删码实现更高的数据持久性

这篇博文解释说,RAID 没有足够的奇偶校验来防止我们现在知道的 HDD 故障统计率。依赖 HDD RAID 阵列的数据中心将不可避免地遇到驱动器故障和使用更换驱动器重建 RAID 集所需的停机时间。这不是在现代永远在线的世界中竞争的方式。  

MinIO 纠删码保护和修复对象,停机时间为零,对性能的影响可以忽略不计。

查看我们的纠删码计算器,了解有关 MinIO 纠删码的更多信息。



上一篇 下一篇