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