固定链接 基于滴滴云搭建 SeaweedFS 存储系统

基于滴滴云搭建 SeaweedFS 存储系统

基于滴滴云搭建 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,框架图如下:

存储系统由一个 master 进程和三个 volume 组成。

搭建流程

启动 master

启动一个 master,并将其端口设置为 9333。

启动 Volume Server

  • 新建三个用于存储数据的目录,分别为 data1、data2、data3
  • 启动 Volume Server:

上传一个文件

  • 首先向 master 请求获得一个 fid:

    本次实验获得信息如下:

  • 上传文件
    根据 master 返回的 fid 和 URL 地址,上传文件到 SeaweedFS 中:

    上传的 URL 根据 fid 和 URL 拼凑得到。

  • 删除文件
    根据 fid 删除文件:

  • 读取文件
    需要根据存储的 fid 来读取文件,fid 中逗号之前的数字为 volume id,本次实验的 fid:7,02e42e5935

    可以得出volume id为7

    向 master 请求,获取特定 volume id 的 IP 地址:

    返回的数据如下:

    可以得到 URL 为 127.0.0.1,用户可以根据 http://127.0.0.1:8011/7,02e42e5935 来获取这个文件。

    本文作者:冯杰

您的留言将激励我们越做越好