SeaweedFS 是一个简单的、高扩展性的分布式文件系统,是 Fb 的 Haystack 开源版本,相对于传统的分布式文件系统,它在应对小对象存储场景中具有巨大的优势。
SeaweedFS 中每个文件的元信息只有 40 个字节,大大缩减了元信息的存储空间。在磁盘读取内容时也能够在 O(1) 的复杂度内完成。
名称 | 描述 |
---|---|
操作系统 | CentOS Linux release 7.4.1708 |
SeaweedFS | 1.25 |
在 SeaweedFS 在运行中分为两种角色:Master Server 和普通 Volume Server。
架构图如下:
在滴滴云的单机中搭建 SeaweedFS,框架图如下:
存储系统由一个 master 进程和三个 volume 组成。
./weed -port=9333 master
启动一个 master,并将其端口设置为 9333。
./weed volume -dir="/home/dc2-user/seaweedfs/data1" -max=5 -mserver="localhost:9333" -port=8011 &
./weed volume -dir="/home/dc2-user/seaweedfs/data2" -max=5 -mserver="localhost:9333" -port=8012 &
./weed volume -dir="/home/dc2-user/seaweedfs/data2" -max=5 -mserver="localhost:9333" -port=8013 &
curl http://localhost:9333/dir/assign
本次实验获得信息如下:
{"fid":"1,0148ac185f","url":"127.0.0.1:8012","publicUrl":"127.0.0.1:8012","count":1}
curl -F file=@/home/dc2-user/rpms/test.rpm http://127.0.0.1:8012/1,0148ac185f
上传的 URL 根据 fid 和 URL 拼凑得到。
curl -X DELETE http://127.0.0.1:8012/1,0148ac185f
可以得出volume id为7
向 master 请求,获取特定 volume id 的 IP 地址:
curl http://localhost:9333/dir/lookup?volumeId=7
返回的数据如下:
{"volumeId":"7","locations":[{"url":"127.0.0.1:8011","publicUrl":"127.0.0.1:8011"}]}
可以得到 URL 为 127.0.0.1,用户可以根据 http://127.0.0.1:8011/7,02e42e5935 来获取这个文件。