SeaweedFS---01

seaweedfs中的名詞:
master: 存儲文件和fid映射關係
volumn:實際存儲文件
datacenter: 數據中心
rack: 機架。一個機架屬於特定的數據中心,一個數據中心能夠包含多個機架。
collection: 一組volume的集合。若是在存儲文件的時候沒有指定collection,那麼使用默認的""併發

weed-fs提供了若干種replication策略(rack – 機架,一個邏輯上的概念):
000 no replication, just one copy
001 replicate once on the same rack
010 replicate once on a different rack in the same data center
100 replicate once on a different data center
200 replicate twice on two other different data center
110 replicate once on a different rack, and once on a different data centerapp

二,刪除文件
向master發起/delete操做,URL參數是fid。
master:
1)對每一個fid,根據fid找出它所在的volume的信息(主要是url),而後經過向volume_server的URL的/delete發起刪除文件的操做,發起刪除的操做由一組goroutine併發執行
2)將刪除結果返回給客戶端分佈式

volume:
1)從該volume的needleMap中刪除這個file
2)將空的索引信息(key=id, offset=0, size=0)append到索引文件末尾
2)將空文件的信息append到dat文件末尾url

能夠看到,volume在刪除文件的時候,根本沒有動原來的文件,只是在needleMap中將這個文件刪除。設計

三,volume上的碎片回收
兩種途徑:1)master集羣中的leader進程定時(15分鐘)作一次回收;2)經過向master發送/vol/vacuum的HTTP請求來回收
回收步驟:
master:
1)對每一個Collection中的每一個VolumeLayout,每一個volumeLayout中的每一個volume,經過向相應的volume_server的/admin/vacuum/check發起HTTP請求來批量監測它的是否須要回收,若是須要回收,到2),不然退出
2)將要compact的volume_id的狀態變成不可寫
3)經過向相應的volume_server的/admin/vacuum/compact發起HTTP請求來讓volume_server執行回收操做,若是回收操做成功,到4),不然退出
4)向相應的volume_server的/admin/vacuum/commit發起HTTP請求來提交本次回收操做,獲得成功的響應後,將該volume_id的狀態變成可寫server

volume:
1)收到/admin/vacuum/check發過來的監測是否回收的指令後,若是 碎片大小/總大小 < URL參數中的garbageThreshold,則返回false說明不須要回收,不然返回true說明須要回收
2)收到/admin/vacuum/compact發過來的壓縮指令後,在本目錄下面建立新文件vid.cpd和vid.cpx,分別表明壓縮後的數據文件和索引文件,接着掃描原來的vid.dat文件,將仍然使用的數據寫入到vid.cpd中,並將索引信息寫入到vid.cpx中,返回成功。須要注意的是,在掃描原來的vid.dat文件時,遇到一個文件若是它不在舊的needleMap中,說明這個文件已經被刪除了,不會將它寫入到新的vid.cpd文件中。
3)收到/admin/vacuum/commit發過來的提交壓縮指令後,用vip.cpd覆蓋vip.dat,vid.cpx覆蓋vip.idx,接着用vid.cpx中的內容更新內存中該volume的needleMap索引

 

一致性:
在分佈式系統中,「一致性」是永恆的難題。weed-fs支持replication,其多副本的數據一致性須要保證。
weed-fs理論上採用了是一種「強一致性」的策略,即:
weedfs的replication的設計原則是由接受上傳的volume server 來作數據複製。
上傳文件時,會在本地寫完後,經過master獲取副本的其餘volume server,而後本機發起向其餘volume serer寫副本文件的操做。
刪除文件時,會在本地刪除完成後,經過master獲取副本的其餘volume server,而後本機向其餘volume server發起刪除副本的操做。
 進程

數據遷移ip

weed-fs提供數據遷移命令內存

上傳流程 1,向http://master/dir/assign發送HTTP請求,獲取該文件的fid,url,publicUrl等信息 2,批量上傳文件時,第一個文件fid是fid,其他的id是fid_1, fid_2, fid_3... 3,隨後向http://master/fid發起POST請求,將文件上傳至master。

本站公眾號
   歡迎關注本站公眾號,獲取更多信息