Seaweedfs | 青训营笔记

306 阅读2分钟

简介

SeaweedFS是一种简单的、高度可扩展的分布式文件系统。它可以:

  1. 存储数十亿的文件 storage billions of files
  2. 快速获取文件 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: 数据中心,简称DC
  • rack: 机架。一个机架属于特定的数据中心,一个数据中心可以包含多个机架。

image.png

如果是集群的话,那么建议如下:

  1. Master 节点至为 3 个,部署不同物理主机,启动过程中设置参数 defaultReplication=001(相同 rack 备份 1 份数据)。
  2. Volume 文件节点至少为 3 个,分别部署不同物理主机。
  3. Filer 管理文件元数据信息,方便文件操作,filer 节点至少 2 个。
  4. 采用 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之后再做介绍。

参考

xie.infoq.cn/article/b37…

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

对象存储篇-SeaweedFS在同程旅行的使用实践 - 知乎 (zhihu.com)