Juicefs/MiniO
3 min read
Page Views
MiniO技术栈,之前搞过一段时间,归纳总结一下。
首先是JuiceFS和MinIO的区别:
简单来说MinIO是提供底层的,将JBOD转化为底层可读,封装成S3协议的高可用资源池。
一般来说可以部署在k8s, REHL或者ubuntu上,也可以用docker部署,消耗资源比较少而且功能比较简单。
举个例子,假如4台服务器,每个服务器上有4张裸盘。
# 设置管理员账号密码
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=password123
# 启动分布式 MinIO
# 语法:minio server http://node{1...n}/mnt/disk{1...m}
minio server \
http://minio{1...4}.example.com/mnt/disk{1...4} \
--console-address ":9001"当你向 MinIO 上传一个文件时,纠删码会执行以下步骤:
分片(Sharding):将文件切分成 $n$ 个等大的数据块(Data Blocks)。
编码(Encoding):通过矩阵运算,生成 $m$ 个校验块(Parity Blocks)。
打散(Distribution):将这 $n+m$ 个块分别存储在不同的硬盘(JBOD)上。
假设你有一个 16 块盘的集群,MinIO 默认会将它们划分为一个 Erasure Set,采用 $n=8, m=8$ 的构造:
数据块 ($n=8$):文件被切成 8 份。
校验块 ($m=8$):根据这 8 份数据计算出 8 份校验信息。
总数 ($16$):一共 16 个分片。
容错表现:读取可用性(Read Quorum):只要有 8 块 盘在线,文件就能读取。
写入可用性(Write Quorum):至少需要 9 块 盘($n+1$)在线才能成功写入新文件,以保证数据强一致性。
极端情况:即使同时坏掉 8 块 硬盘,数据依然零丢失。
Last updated on 2026-03-24