简介
SeaweedFS是一种简单的、高度可扩展的分布式文件系统。它可以:
- 存储数十亿的文件 storage billions of files
- 快速获取文件 serve the files fast
weed-fs起初是为了搞一个基于Fackbook的Haystack论文的实现,Haystack旨在优化Fackbook内部图片存储和获取。后来这个基础上,weed-fs作者又增加了若干feature,形成了目前的weed-fs。
SeaweedFS最初作为一个对象存储来有效地处理小文件。中央主服务器(master)只管理文件卷(volume),而不是管理中央主服务器中的所有文件元数据(参考hdfs NN实现),它允许这些卷服务器管理文件及其元数据。这减轻了中央主服务器的并发压力,并将文件元数据传播到卷服务器,允许更快的文件访问(只需一个磁盘读取操作)。每个文件的元数据只有40字节的磁盘存储开销。使用O(1)磁盘读取。
名词
master: 主节点,即集群管理,同时存储文件和fid映射关系volume: 1、文件卷节点,实际存储文件;2、卷,一个存储级别client: 客户端,该FS使用RESTful交互,所以客户端都归纳为一类dataCenter: 数据中心,简称DCrack: 机架。一个机架属于特定的数据中心,一个数据中心可以包含多个机架。
如果是集群的话,那么建议如下:
- Master 节点至为 3 个,部署不同物理主机,启动过程中设置参数 defaultReplication=001(相同 rack 备份 1 份数据)。
- Volume 文件节点至少为 3 个,分别部署不同物理主机。
- Filer 管理文件元数据信息,方便文件操作,filer 节点至少 2 个。
- 采用 Cassandra 分布式数据库存储文件数据信息,集群节点数至少为 3 个
安装:
- 下载对应的文件
- tar -zxvf ./linux_amd64.tar.gz -C /opt/module
- 得到/opt/module目录下weed文件
启动前准备:
- 创建master文件夹和volume文件夹
mkdir -p ./seaweedfs/data ./seaweedfs/volume
总结
其实呢,作者研究seaweedfs的主要目的在于学习golang在实战项目中的应用,包括golang语言特性、成熟轮子的使用、go的面向对象思想、服务端架构设计、网络、文件、异常处理、raft、grpc等等。所以选择了这样一个业务功能简单的分布式文件系统项目,另一方面也是可以和用java开发的HDFS进行对比,这样可以收获更多更深的思考。当然本文中没有详细体现出两者的区别,可能会在深度使用过seaweedfs之后再做介绍。
参考
JuiceFS vs SeaweedFS juicefs.com/en/blog/eng…
SeaweedFS:wangchujiang.com/docker-tuto…
Master Server API:github.com/seaweedfs/s…
SeaweedFS介绍安装集群部署总结:zhuanlan.zhihu.com/p/444269374