欢迎大家来到IT世界,在知识的湖畔探索吧!
文件系统提供的访问和管理方法支撑了绝大部分的计算机应用。如今,一切数据似乎都在向“云”转移,如果只是上传数据量小的文件,上云似乎没有太多阻碍。然而面对大量且突发的计算数据任务时,上传文件却往往面临着新挑战、新难题。这时,分布式文件系统发挥了其价值功能。
迄今为止,受到 Google File System (GFS)论文的影响,市面上诞生了许多优秀的开源分布式文件存储系统,如 CephFS、HDFS、Lustre、MogileFS 等。
不同的分布式文件系统都有其特点与优势,大家也可以根据需要自行选择。有趣的是,最近在 Gitee 上发现了一款开源分布式文件系统——JuiceFS,它创新将对象存储作为底层存储介质,实现了存储空间的无限扩展。这究竟是如何实现的?它会是云时代分布式文件系统的新答案吗?咱们一起瞧瞧。
JuiceFS 是什么?
JuiceFS 是一款面向云原生设计的分布式文件系统,基于 Redis 和对象存储构建。它主要通过 Redis 来存储文件的元数据,无需修改代码就可以像本地存储一样将海量云存储直接投入生产环境的大数据、机器学习、人工智能等各种应用平台中。
项目作者:Juicedata
开源许可证:Apache-2.0
项目地址:https://gitee.com/juicedata/JuiceFS
例如,使用 JuiceFS 存储数据时,数据本身会被持久化在对象存储(例如 Amazon S3)当中,而数据所对应的元数据可以根据场景需求被持久化在 Redis、MySQL、TiKV 等多种数据库引擎中。
技术是如何实现的?
JuiceFS 采用“数据”与“元数据”分离存储的架构,JuiceFS 依靠 Redis 来存储文件的元数据。Redis是基于内存的高性能的键值数据存储,较为适合存储元数据。因此,当数据将通过 JuiceFS 客户端存储到对象存储中,能更好地实现文件系统的分布式设计。
1.任何存入 JuiceFS 的文件都会被拆分成固定大小的 “Chunk”,默认的容量上限是 64 MiB。
2.每个 Chunk 由一个或多个 “Slice” 组成,Slice 的长度不固定,取决于文件写入的方式。
3.每个 Slice 又会被进一步拆分成固定大小的 “Block”,默认为 4 MiB,最后这些 Block 会被存储到对象存储。
4.同时,JuiceFS 会将每个文件以及它的 Chunks、Slices、Blocks 等元数据信息存储在元数据引擎中。
注意:
如果你发现在对象存储平台的文件浏览器中找不到存入 JuiceFS 的源文件,存储桶中只有一个 chunks 目录和一堆数字编号的目录和文件时,请不用担心。因为使用 JuiceFS,文件最终会被拆分成 Chunks、Slices 和 Blocks 存储在对象存储。
核心架构
JuiceFS由 三部分 组成:
- JuiceFS 客户端
用于协调对象存储和元数据存储引擎,以及 POSIX、Hadoop、Kubernetes、S3 Gateway 等文件系统接口的实现。
- 数据存储
存储数据本身,支持本地磁盘、对象存储。
- 元数据引擎
存储数据对应的元数据,支持 Redis、MySQL、SQLite 等多种引擎。
架构图
如何操作?
操作前准备
1.准备 Redis 数据库
2.准备对象存储
安装客户端
创建文件系统
以 Linux 系统为例
1.创建名为 myjfs 文件系统
juicefs format sqlite3://myjfs.db myjfs
欢迎大家来到IT世界,在知识的湖畔探索吧!
2.查看返回信息,分析myjfs 的存储路径是 file:///Users/herald/.juicefs/local/myjfs/
欢迎大家来到IT世界,在知识的湖畔探索吧!2021/12/14 18:26:37. juicefs[40362] <INFO>: Meta address: sqlite3://myjfs.db [xorm] [info] 2021/12/14 18:26:37. PING DATABASE sqlite3 2021/12/14 18:26:37. juicefs[40362] <WARNING>: The latency to database is too high: 7.ms 2021/12/14 18:26:37. juicefs[40362] <INFO>: Data use file:///Users/herald/.juicefs/local/myjfs/ 2021/12/14 18:26:37. juicefs[40362] <INFO>: Volume is formatted as {Name:myjfs UUID:d5bdf7ea-472c-4640-98a6-6f56aea13982 Storage:file Bucket:/Users/herald/.juicefs/local/ AccessKey: SecretKey: BlockSize:4096 Compression:none Shards:0 Partitions:0 Capacity:0 Inodes:0 EncryptKey:}
挂载文件系统
1.将 myjfs 文件系统挂载到 ~/jfs 文件夹里
juicefs mount sqlite3://myjfs.db ~/jfs
2.为了在后台保持挂载,你可以在挂载时指定 -d 或 –background 选项,即让客户端在守护进程中挂载文件系统
欢迎大家来到IT世界,在知识的湖畔探索吧!juicefs mount sqlite3://myjfs.db ~/jfs -d
3.执行下列命令后,可将 挂载点 ~/jfs 卸载
juicefs umount ~/jfs
注意:
由于 SQLite 是单文件数据库,挂载时要注意数据库文件的的路径,JuiceFS 同时支持相对路径和绝对路径。
因篇幅有限,针对如何设置对象存储、如何进行缓存管理、如何针对故障诊断与分析等相关问题就不再详述,你也可以前往 Gitee 仓库查看文档详情,了解 JuiceFS 的进一步实践。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/78603.html