本篇文章主要介绍分布式存储MinIO Erasure Code的部署方式
MinIO 使用Erasure Code和checksum保护数据免受硬件故障及数据损坏。使用最高级别的冗余,您可能会丢失多达一半 (N/2) 的驱动盘,但仍然能够恢复数据。
1、Erasure Code的概念
Erasure Code是一种用于重建丢失或损坏数据的数学算法。MinIO 使用 Reed-Solomon 将对象分片为可变数据和奇偶校验块。例如,在 12 个drivers设置中,可以将一个对象分片到所有drivers上的可变数量的数据和奇偶校验块 - 从六个数据和六个奇偶校验块到十个数据和两个奇偶校验块。
MinIO默认会将对象分片N/2到数据drivers、N/2到奇偶校验drivers。
官方推荐 N/2 个数据块和N/2个奇偶校验块,因为它可以确保对drivers故障提供最佳保护。
在上面的 12 个驱动器示例中,在默认配置下运行 MinIO 服务器时,您可能会丢失六个驱动器中的任何一个,但仍然可以从剩余驱动器中可靠地重建数据。
2、Bit Rot保护策略介绍
bit rot,也称为data rot或无声数据损坏,是当今磁盘驱动器面临的数据丢失问题。驱动器上的数据可能会悄无声息地损坏,而不会发出错误信号,这使得bit rot比永久性硬盘驱动器故障更危险。
MinIO 的erasure code使用高速 HighwayHash 校验和来防止 Bit Rot。
HighwayHash介绍链接:https://github.com/minio/highwayhash
3、drivers是如何用于Erasure Code的?
MinIO将你提供的drives划分为4~16个erasure-coding set。因此,你提供的驱动器数量必须是这些数字之一的倍数。每个对象都被写入一个单独的erasure code set。
Minio 使用最大可能的 EC set大小,它分为给定数量的dirve。比如:18个drives被配置为2个set、每个set均为9个drives;如果是24个drives被配置为2个set,每个set均为12个drives。适用于部署单机版的MinIO Erasure Code方式。
所有的drives的大小应该尽量保持相同的规模。
执行以下命令:
podman run \
-p 9000:9000 \
-p 9001:9001 \
--name minio \
-v /mnt/data1:/data1 \
-v /mnt/data2:/data2 \
-v /mnt/data3:/data3 \
-v /mnt/data4:/data4 \
-v /mnt/data5:/data5 \
-v /mnt/data6:/data6 \
-v /mnt/data7:/data7 \
-v /mnt/data8:/data8 \
quay.io/minio/minio server /data{1...8} --console-address ":9001"
如果文中有不恰当之处,恳请指正。