分布式文件系统--SeaweedFS的快速入门

引言

之前一段时间调研选型了分布式文件系统,当时选定了MinIO,但是后来MinIO的开源协议由Apache2.0变更成了AGPLv3,看了一眼授权模式不适合我们这种做小项目的小公司,那就另寻良配,最终找到了SeaweedFS.

SeaweedFS是一个用于Blob、对象、文件和数据湖的快速分布式存储系统,可存储数十亿个文件!Blob存储具有O(1)个磁盘寻道、云分层。Filer支持云驱动、跨DC主动复制、Kubernetes、POSIX FUSE挂载、S3 API、S3网关、Hadoop、WebDAV、加密、擦除编码。

SeaweedFS的架构由Master、volume、Filer组成,Master负责分配把文件具体放入哪个volume,Volume是具体负责存放文件的,不同的Filer插件用于提供不同的功能,例如HTTP访问、S3接口、挂载到文件目录等。看起来有点复杂但理清各个组件的关系后还是比较清晰的。

SeaweedFS的全部功能都是在一个可执行文件里面,通过不同的启动脚本来实现启动不同的服务,例如以最简单的模式启动即Master volume都在同一个机器上启动,部署起来相当简单远没有它看起来的那么复杂,只需一行命令即可。

shell 复制代码
# 指定文件存储路径,-mserver 同时启动一个Master和一个Volume,Master服务默认端口:9333 volume默认端口:8080
./weed volume -dir="/tmp/data1" 

SeaweedFS 架构设计

附上官方架构图

这里再借用知乎的一篇文章的结构图SeaweedFS介绍安装集群部署总结 - 知乎 (zhihu.com)

master 存储文件和fid映射关系(fid类似FastDFS的存储path)
Node 系统抽象的节点,抽象为DataCenter、Rack、DataNode
DataCenter 数据中心,对应现实中的不同机房
Rack 机柜,对应现实中的机柜,一个机柜属于特定的数据中心,一个数据中心可以包含多个机柜。
Datanode 存储节点,相当于服务器,用于管理、存储逻辑卷
Volume 逻辑卷,存储的逻辑结构,逻辑卷下存储Needle
Needle 逻辑卷中的Object,对应存储的文件, Needle 属于 Volume 里面的一个单元
Collection 文件集,可以分布在多个逻辑卷上,如果在存储文件的时候没有指定collection,那么使用默认的""

怎么使用

一、上传文件前需要先访问Master服务获取分配的fid和卷服务器

shell 复制代码
> curl http://127.0.0.1:9333/dir/assign
{"count":1,"fid":"3,01637037d6","url":"127.0.0.1:8080","publicUrl":"localhost:8080"}

fid由三部分组成 VolumeId, NeedleId, Cookie

  • VolumeId: 3 unsigned 32-bit integer存储的物理卷的Id
  • NeedleId: 01 unsigned 64bit 文件key,每个存储的文件都不一样(除了互为备份的)。
  • Cookie: 637037d6 unsigned 32bit Cookie值,为了安全起见,防止恶意攻击。

二、向指定的卷服务器上传附件,用上面的到的url地址+fid,上传文件后一定要记住fid

shell 复制代码
> curl -F file=@/home/chris/myphoto.jpg http://127.0.0.1:8080/3,01637037d6
{"name":"myphoto.jpg","size":43234,"eTag":"1cc0118e"}

三、访问已上传的文件,可通过下列任意一种方式来访问

arduino 复制代码
 http://127.0.0.1:8080/3/01637037d6.jpg
 http://127.0.0.1:8080/3,01637037d6.jpg
 http://127.0.0.1:8080/3/01637037d6
 http://127.0.0.1:8080/3,01637037d6

不知道文件放在了哪个卷服务器时,可以通过Master服务器查询

shell 复制代码
> curl http://127.0.0.1:9333/dir/lookup?volumeId=3
{"volumeId":"3","locations":[{"publicUrl":"127.0.0.1:8080","url":"127.0.0.1:8080"}]}
# 据此可知 卷服务器id:3,地址:127.0.0.1:8080

四、删除文件

shell 复制代码
> curl -X DELETE http://127.0.0.1:8080/3,01637037d6

部署

之前讲了快速启动可在一台机上直接启动一个master和一个volume,适用于测试或者单机部署的情况。seaweedFS作为一个分布式文件系统,可以部署多个master,最好是奇数个,官方推荐是3个。

js 复制代码
#启动主服务
./weed master
./weed master -ip=xxx.xxx.xxx.xxx # usually set the ip instead the default "localhost"

一个volume服务器默认会有8个卷,每个卷可以容纳32G文件,所以一个卷服务器默认能容纳8x32=256G,一台服务器可以启动多个卷服务器或指定不同的卷数量以充分利用磁盘空间。

js 复制代码
> weed volume -dir="/tmp/data1" -max=5  -mserver="localhost:9333" -port=8080
> weed volume -dir="/tmp/data2" -max=10 -mserver="localhost:9333" -port=8081
相关推荐
柳叶寒3 天前
医院信息化与智能化系统(17)
java·nacos·gateway·全栈·项目
柳叶寒6 天前
医院信息化与智能化系统(15)
java·数据库·全栈·项目
kevinyan9 天前
Go项目Error的统一规划管理和处理策略
前端·go·全栈
柳叶寒13 天前
医院信息化与智能化系统(8)
java·数据库·全栈·项目
柳叶寒15 天前
医院信息化与智能化系统(6)
java·全栈·项目
余生H15 天前
前端全栈混合之路Deno篇:Deno2.0如何快速创建http一个 restfulapi/静态文件托管应用及oak框架介绍
javascript·http·restful·全栈·deno
kevinyan17 天前
Go日志门面的设计与实现-自动注入追踪ID标记代码位置、简化日志操作
vue.js·go·全栈
柳叶寒17 天前
医院信息化与智能化系统(5)
java·数据库·全栈
余生H21 天前
大模型进阶微调篇(一):以定制化3B模型为例,各种微调方法对比-选LoRA还是PPO,所需显存内存资源为多少?
人工智能·深度学习·机器学习·全栈·模型微调
前端斌少22 天前
Meteor:全栈JavaScript开发框架的先驱
前端·全栈