简介
SeaweedFS 是一个简单的、高扩展性的分布式文件系统,是 Fb 的 Haystack 开源版本,相对于传统的分布式文件系统,它在应对小对象存储场景中具有巨大的优势。
SeaweedFS 中每个文件的元信息只有 40 个字节,大大缩减了元信息的存储空间。在磁盘读取内容时也能够在 O(1) 的复杂度内完成。
系统搭建
环境
名称 | 描述 |
---|---|
操作系统 | CentOS Linux release 7.4.1708 |
SeaweedFS | 1.25 |
SeaweedFS 架构描述
在 SeaweedFS 在运行中分为两种角色:Master Server 和普通 Volume Server。
- Master Server:用于管理普通 Volume Server, master会存储集群中 Volume Server 的状态,并且会负责接收 Client 的请求,并将具体的 URL 地址返回给客户端,master 之间通过 Raft 协议来保证一致性,在主节点崩溃的情况下会自动在从节点中选举中新的 master。
- Volume Server:管理具体的存储目录,其工作包括写入、查询、删除数据,并会进行数据的压缩工作。
架构图如下:
搭建框架图
在 滴滴云 的单机中搭建 SeaweedFS,框架图如下:
存储系统由一个 master 进程和三个 volume 组成。
搭建流程
启动 master
./weed -port=9333 master
启动一个 master,并将其端口设置为 9333。
启动 Volume Server
- 新建三个用于存储数据的目录,分别为 data1、data2、data3
-
启动 Volume Server:
./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 &
上传一个文件
-
首先向 master 请求获得一个 fid:
curl http://localhost:9333/dir/assign
-
本次实验获得信息如下:
{"fid":"1,0148ac185f","url":"127.0.0.1:8012","publicUrl":"127.0.0.1:8012","count":1
-
上传文件
根据 master 返回的 fid 和 URL 地址,上传文件到 SeaweedFS 中:
curl -F file=@/home/dc2-user/rpms/test.rpm http://127.0.0.1:8012/1,0148ac185f
-
上传的 URL 根据 fid 和 URL 拼凑得到。
-
删除文件
根据 fid 删除文件:
curl -X DELETE http://127.0.0.1:8012/1,0148ac185f
-
读取文件
需要根据存储的 fid 来读取文件,fid 中逗号之前的数字为 volume id,本次实验的 fid:7,02e42e5935可以得出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 来获取这个文件。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31559758/viewspace-2637586/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31559758/viewspace-2637586/