什么是擦除码?
擦除码是一种重建丢失数据或损坏数据的数学算法。MinIO使用Reed-Solomon码将对象分成可变数据和奇偶校验块。例如,在12个驱动器的设置中,一个对象会分片成一定数量的数据块和奇偶校验块,并分布存储到所有驱动器上,范围从6个数据块和6个奇偶校验块到10个数据块和2个奇偶校验块。
默认情况下,MinIO按照N/2个数据块和N/2个奇偶校验块来对对象进行分片,其中N为驱动器数量。不过,可以使用存储类来自定义配置。我们建议使用N/2个数据块和奇偶校验块,因为它可以确保对驱动器故障提供最佳保护。
在上面12驱动器的示例中,MinIO服务器以默认配置运行时,您可以丢失任意六个驱动器,并且仍然可以从其余驱动器可靠地重建数据。
擦除码为什么是有用的?
与RAID或副本方式不同,擦除码可保护数据免受多个驱动器故障的影响。例如,RAID6可以防止两个驱动器发生故障,而在MinIO擦除码中,您可以丢失多达一半的驱动器,而且数据仍然是安全的。此外,MinIO的擦除码位于对象级别,可以一次修复一个对象。对于RAID,只能在卷级别进行修复,这会导致较高的停机时间。由于MinIO对每个对象进行单独编码,因此可以逐步修复对象。存储服务器一旦部署后,在服务器的生命周期内不应该更换驱动器或进行修复。MinIO的擦除码后端是为提高操作效率而设计的,并充分利用了硬件加速的优势。
什么是位衰减?
位衰减 ,也称为数据衰减或静默数据损坏,是当今磁盘驱动器面临的一个数据丢失问题。驱动器上的数据可能会悄无声息地损坏,而不会发出错误信号,这使得位损坏比永久性硬盘驱动器故障更危险。MinIO的擦除码后端使用高效的HighwayHash校验和来防止位衰减。
磁盘驱动器如何使用擦除码?
MinIO中的擦除编码集可以包含4到16个驱动器。因此,您提供的驱动器数量必须是其中一个数字的倍数。每个对象都被写入一个擦除编码集。
在给定数量的磁盘驱动器下Minio使用尽可能大的EC集规模。例如,18个驱动器(超过4~16,需分为两组)配置为2组9个驱动器,24个驱动器配置为2组12个驱动器。MinIO以standalone erasure coded方式运行时,这种情况是真实的。然而,在分布式设置中,选择了基于节点(亲和性)的擦除条带大小。
所有驱动器的大小应大致相同。
翻译自:https://github.com/minio/minio/blob/master/docs/erasure/README.md
重点:
- 官方建议:建议使用N/2个数据块和奇偶校验块,因为它可以确保对驱动器故障提供最佳保护。
- MinIO中的擦除编码集可以包含4到16个驱动器。在给定数量的磁盘驱动器下Minio使用尽可能大的EC集规模。