minio 纠删码

Minio 使用纠删码 erasure code 和校验和 checksum 来保护数据免受硬件故障和无声数据损坏。Minio 采用 Reed-Solomon code 将对象拆分成 N/2 数据和 N/2 奇偶校验块(N为磁盘总数)。

与 RAID 磁盘阵列的块级冗余不同,minio 的纠删码技术是文件级的,可以以文件为单位进行数据恢复,而RAID磁盘阵列只能以磁盘为单位进行数据恢复。

参照上一篇笔记minio 存储级别,在启用纠删码功能时,minio标准级别存储,至少需要2个磁盘保存校验信息,因此,在正常情况下,应该至少准备四个硬盘来使用这种数据保护技术。

但minio的纠删码技术是文件级别的,通过实践发现,可以将多个数据目录同时设置在一块物理硬盘上,比如有两块硬盘,在一块硬盘上设置 data1 和 data2 数据目录,在另一块硬盘上设置 data3 和 data4 数据目录。

$ sudo docker run -d --name minio
-p 9000:9000 \
-v /mnt/disk1/data1:/data1 \
-v /mnt/disk1/data2:/data2 \
-v /mnt/disk2/data3:/data3 \
-v /mnt/disk2/data4:/data4 \
--restart unless-stopped \
minio/minio server /data{1,2,3,4}

在测试过程中,停止minio容器,手动删除任何2个数据目录,再次启动容器,minio都会自动重建数据目录和数据块,文件会被自动修复。

如果同时删除3个数据目录,重启minio容器后,minio日志输出中可以查看到,minio暂时无法恢复数据,不断重试,等待其他节点上线。一旦有匹配的节点上线,minio就会自动进行数据恢复。

这里的结论就是,minio的数据冗余功能并不一定要使用4个硬盘,2个硬盘也可以实现类似 RAID1 级别的数据冗余保护能力。

相关资料