引子

今天聊一下SeaweedFS。

SeaweedFS简介

SeaweedFS是一个简单且高度可扩展的分布式文件系统。有两个目标:

存储数十亿个文件!快速提供文件!

SeaweedFS根据这个Facebook的Haystack(https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Beaver.pdf)设计的。

SeaweedFS最初是作为对象存储来有效处理小文件的。代替管理中央主机中的所有文件元数据,中央主机仅管理文件卷,并允许这些卷服务器管理文件及其元数据。这样可以减轻来自中央主机的并发压力,并将文件元数据分散到卷服务器中,从而可以更快地访问文件(O(1),通常只是一个磁盘读取操作)

安装

1.下载地址:

https://github.com/chrislusf/seaweedfs/releases/tag/2.07 大家选择自己需要的版本。

我这下载的是:windows_amd64.zip。文件不大,压缩包26M左右。

2.解压

将刚才下载的压缩包解压,只有一个weed.exe文件。非常简单。

启动

1.启动主服务器

./weed master注释提出有个问题。默认启动后的IP是这个:导致后面启动卷服务器启动后,连接不到主服务器.

2.启动卷服务器

./weed volume -dir="./tmp" -max=5-mserver="localhost:9333" -port=8080提示连接不到169.254.195.109:9333。我的ip也不是这个。怎么会连接这个那。体验翻车

卷服务器启动后一直在报错,连接不到主服务器。提示连接不到169.254.195.109:9333。我的ip也不是这个。怎么会连接这个那。网上搜了一下没有说明。后来查看了一下help才知道问题啥

./weed -help

还是没有发现。突然 master启动的问题。 试了一下

./weed master -help

这个时候才发现有-ip的参数:

-ip string

master <ip>|<server> address (default "169.254.195.109")

才知道。如果不指定ip的默认为是169.254.195.109。唉,感觉这是一个坑,不知道为啥,不是获取本机的IP,而是默认固定一个IP

重新启动

1.启动主服务器

./weed master -ip=localhost

# 指定IP地址参数

2.启动卷服务器

./weed volume -dir="./tmp" -max=5-mserver="localhost:9333" -port=8080-ip=localhost

这次没有问题了

测试

1.访问

http://localhost:9333/ 出现以下,表示成功了。

2上传文件

要上传文件:首先,发送HTTP POST,PUT或GET请求/dir/assign以获取fid和卷服务器URL

curl http://localhost:9333/dir/assign{"fid":"2,01cf7b3467","url":"localhost:8080","publicUrl":"localhost:8080","count":1}

其次,要存储文件内容,请url '/' fid从响应中发送一个HTTP多部分POST请求:

curl -F file=@G:softwindows_amd64.zip http://127.0.0.1:8080/2,01cf7b3467{"name":"windows_amd64.zip","size":27717089,"eTag":"ec79ea2e5def58bec7ad3a5b679fcc54"}

在页面查看,发现有一个文件。

2.保存文件的id

我们可以将fid:2,01cf7b3467保存到数据库字段中。

开头的数字2表示卷ID。逗号后是一个文件密钥01和一个文件cookie cf7b3467。

卷ID是32位无符号整数。文件密钥是一个无符号的64位整数。文件cookie是32位无符号整数,用于防止URL猜测。

3.下载文件

浏览器中打开: http://localhost:8080/2,01cf7b3467.zip或者: curl -o 2,01cf7b3467.zip http://localhost:8080/2,01cf7b3467.zip

4.删除

要删除,请将HTTP DELETE请求发送到相同的url '/' fidURL:

curl -X DELETE http://127.0.0.1:8080/2,01cf7b3467后记

今天先写到这,后面有时间在分享更多的用法。