一篇就够了 JuiceFS-开源分布式文件系统入门( 二 )


03 技术架构
首先贴出官网的技术架构图:
3.1的三个技术层
从上图,我们可以看到分为了三层,从上往下依次为:
分类描述
( 客户端)
协调对象存储和元数据存储引擎,以及 POSIX、、 CSI 、S3等文件系统接口的实现
(元数据引擎)
存储数据对应的元数据()包含文件名、文件大小、权限组、创建修改时间和目录结构,支持 Redis、MySQL、TiKV 等多种引擎;
Data (数据存储)
存储数据本身,支持本地磁盘、公有云或私有云对象存储、HDFS 等介质;
这里主要讲下在 客户端层面 的文件系统接口的技术实现:
3.2如何存储文件
任何存入的文件都会被拆分成固定大小的 “Chunk”(默认的容量上限是 64 MiB)
每个 Chunk 由一个或多个 “Slice” 组成,Slice 的长度不固定,取决于文件写入的方式;每个 Slice 又会被进一步拆分成固定大小的 “Block”(默认为 4 MiB);最后,这些 Block 会被存储到对象存储;同时,会将每个文件以及它的 、、 等元数据信息存储在元数据引擎中 。
文件最终会被拆分成 、 和存储在对象存储,存储桶中只有一个目录和一堆数字编号的目录和文件,如下图:
04 实战 step1: 客户端安装
去下载最新的客户端:
注意版本与操作系统的对应关系如下:
版本系统
-x.x.x--amd64.tar.gz
面向 Intel 芯片的 macOS 系统
-x.x.x--arm64.tar.gz
面向 M1 系列芯片的 macOS 系统
-x.x.x-linux-amd64.tar.gz
面向 x86 架构 Linux 发行版
-x.x.x-linux-arm64.tar.gz
面向 ARM 架构的 Linux 发行版
-x.x.x--amd64.tar.gz
面向 x86 架构的系统
--x.x.x-amd64.jar
面向 x86 架构的Java SDK(同时支持 Linux、macOS 及系统)
如果资源文件里面没有内容,加载不出来,可以通过来查询下载资源的地址:
当然也可以使用命令安装,会根据硬件架构自动下载安装最新版客户端:
curl -sSL https://d.juicefs.com/install | sh -
下载完成后,解压,使用命令:
juicefs version
可以看到已经安装好了 。
step2: 创建文件系统
创建名为的文件系统,使用 Redis 的 1 号数据库存储元数据:
juicefs format \--storage minio \--bucket http://endpoint地址:端口/rtc \--access-key minio的access-key \--secret-key minio的secret-key \"redis://:redis密码@redis地址:redis端口/数据库编号" \miniofs
在Redis数据库,可以看到key为的内容如下:
同时登录MinIO,在buck1桶下,可以看到创建了一些目录:
step3: 挂载文件系统
我们可以挂载文件目录到本地的桌面的data目录(如果提示没有权限,建议命令前加上sudo):
juicefs mount"redis://:redis密码@redis地址:redis端口/数据库编号" /桌面地址/data
可以看到报错了,提示:
[89168] : fuse: fuse: no FUSE mountfound [.go:184]
这是由于系统没有安装FUSE 模块模块,所以需要下载安装,macOS系统下载地址:
安装好后,继续执行命令,也报错了,提示:
[92350] : The mount point is not ready in 10 , exit it [.go:56]
解决方式,打开安全性与隐私,解锁后,点击下图红框的运行 。
继续执行命令,可以看到挂载成功了:
step4: 开始使用
详细使用参考:
当挂载好之后,我们可以正式的使用了,下面举个例子,使用同步命令,把MinIO里面的内容同步到本地的桌面的data目录,命令如下: