基于滴滴云搭 SeaweedFS 存储系统

简介

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 存储系统_第1张图片

搭建框架图

在滴滴云的单机中搭建 SeaweedFS,框架图如下:

基于滴滴云搭 SeaweedFS 存储系统_第2张图片

存储系统由一个 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 来获取这个文件。

你可能感兴趣的:(云计算,开源)