本文已参与「新人创作礼」活动,一起开启掘金创作之路。
纠删码
使用 Reed-Solomon 算法根据部署中的纠删集大小(Stripe Size)将对象拆分为数据(K)和奇偶校验块(M)。 (纠删集管理一系列磁盘(N)) 对于小文件(小于2M),数据和元数据都同时保存在对应的xl.meta的文件中。对应大文件的写入,会创建相应的目录,该目录下是对应的part的数据文件和元数据文件。
1.原理
简单理解就是n元一次方程式,有n个校验块,就可以容忍丢失n个磁盘数据。
2.纠删集
纠删集是 MinIO 部署中支持纠删码的一组驱动器。MinIO 在擦除集中的驱动器之间均匀分布对象数据和奇偶校验块。MinIO 在擦除集中的驱动器之间随机均匀地分布数据和奇偶校验块,没有重叠。每个唯一对象在集合中的每个驱动器上最多有一个数据或奇偶校验块。
MinIO 通过将服务器池中的驱动器总数划分为每个 4 到 16 个驱动器的集来计算擦除集的数量和大小。
对于具有 16 个以上驱动器的群集、池或部署,MinIO 会将驱动器划分为具有相同驱动器数的多个擦除集。因此,部署中的驱动器总数必须可被 4 到 16 之间的数字均匀整除。
使用 MinIO 纠删码计算器确定首选 MinIO 拓扑的最佳纠删集大小。 MinIO 可以容忍每个擦除集丢失多达驱动器,并继续执行读取和写入操作(“仲裁”)。如果 正好等于擦除集中驱动器的 1/2,则 MinIO 写入仲裁需要驱动器以避免数据不一致(“裂脑”)。
3.触发条件
服务器池中的驱动器总数为 4 到 16 整数倍。
4.纠删码计算
校验块数量最小值是2,最大值是纠删集中驱动器数量的一半(N/2)
MinIO在选择纠删集大小时会考虑驱动器总数的最大公约数(GCD, 范围4-16);
如,考虑一个由 4 个节点组成的服务器池,每个节点有 8 个驱动器,总共 32 个驱动器。GCD 为 16 生成 2 个纠删集,每个纠删集包含 16 个驱动器,并在所有 4 个节点上均匀分布纠删集驱动器。结合第5点Standard的奇偶校验策略可知一个16磁盘的纠删集有4个校验块,即有4块盘的故障容忍度。
即:32驱动器 = 2纠删集 * 16块盘(EC:4)
一个纠删集可以丢失M个磁盘数据 那么一个服务器池中总共可以丢失( Stripe Num * M )个磁盘数据 有个特殊情况:如果M==N/2,那MinIO写入仲裁需要驱动器以避免数据不一致(“裂脑”),即N/2可读,N/2+1才可写
这里给大家出个计算题:
- 设有24个磁盘,那么它的驱动器故障容忍度是多少?
- 设有8块盘,那么它的驱动器故障容忍度是多少才能保证MinIO正常读写?
得出结果后请移步纠删码计算器校验下答案吧!
5.MinIO纠删码与存储级别
-
STANDARD
MinIO 根据纠删码集中的卷数设置奇偶校验: | 纠删集大小 | 默认奇偶校验 (EC:N) | | --- | --- | | 5 或更少 | EC:2 | | 6 - 7 | EC:3 | | 8 个或更多 | EC:4 |
-
REDUCED_REDUNDANCY
低冗余校验,奇偶校验必须小于等于Standard
存储类型修改方式:
MINIO_STORAGE_CLASS_STANDARD
环境变量- 用于修改配置设置的
mc管理员配置
命令。storage_class.standard