基於滴滴雲搭 SeaweedFS 儲存系統

java06051515發表於2019-03-19

簡介

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 
  • 本次實驗獲得資訊如下:

{"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 
  • 上傳的 URL 根據 fid 和 URL 拼湊得到。

  • 刪除檔案
    根據 fid 刪除檔案:

curl -X DELETE 
  • 讀取檔案
    需要根據儲存的 fid 來讀取檔案,fid 中逗號之前的數字為 volume id,本次實驗的 fid:7,02e42e5935

    可以得出volume id為7

    向 master 請求,獲取特定 volume id 的 IP 地址:

curl 
  • 返回的資料如下:

{"volumeId":"7","locations":[{"url":"127.0.0.1:8011","publicUrl":"127.0.0.1:8011"}]}
  • 可以得到 URL 為 127.0.0.1,使用者可以根據 來獲取這個檔案。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2637586/,如需轉載,請註明出處,否則將追究法律責任。

相關文章