SeaweedFS是一種簡單的、高度可擴展的分布式文件系統。有兩個目標:
- 存儲數十億的文件! storage billions of files
- 查看檔案快! serve the files fast
weed-fs起初是為了搞一個基於Fackbook的Haystack論文的實現,Haystack旨在優化Fackbook內部圖片存儲和獲取。
后來這個基礎上,weed-fs作者又增加了若干feature,形成了目前的weed-fs。
SeaweedFS最初作為一個對象存儲來有效地處理小文件。中央主服務器只管理文件卷,而不是管理中央主服務器中的所有文件元數據,它允許這些卷服務器管理文件及其元數據。這減輕了中央主服務器的並發壓力,並將文件元數據傳播到卷服務器,允許更快的文件訪問(只需一個磁盤讀取操作)。
每個文件的元數據只有40字節的磁盤存儲開銷。使用O(1)磁盤讀取非常簡單。
Githup地址為: https://github.com/chrislusf/seaweedfs
官方文檔:https://github.com/chrislusf/seaweedfs/wiki
相關背景技術論文:
中文版: http://www.importnew.com/3292.html
英文版: http://static.usenix.org/event/osdi10/tech/full_papers/Beaver.pdf
安裝
有兩種安裝方式,第一種下載編譯好的直接使用,第二種是下載源碼進行編譯。由於暫時不更改源碼, 故使用第一種方式運行
下載地址:https://github.com/chrislusf/seaweedfs/releases 下載完成后,解壓出來直接運行。
相關定義意義說明
master 存儲文件和fid映射關系 Node 系統抽象的節點,抽象為DataCenter、Rack、DataNode DataCenter 數據中心,對應現實中的不同機房 Rack 機架,對應現實中的機櫃,一個機架屬於特定的數據中心,一個數據中心可以包含多個機架。 Datanode 存儲節點,用於管理、存儲邏輯卷 Volume 邏輯卷,存儲的邏輯結構,邏輯卷下存儲Needle Needle 邏輯卷中的Object,對應存儲的文件 Collection 文件集,可以分布在多個邏輯卷上,如果在存儲文件的時候沒有指定collection,那么使用默認的""
所有包含模塊
Weed master 開啟一個master服務器
Weed volume 開啟一個volume 服務器
Weed filer 開啟一個指向一個或多個master服務器的file服務器
Weed upload 上傳一個或多個文件
Weed server 啟動一個服務器,包括一個volume服務器和自動選舉一個master服務器
以上為主要使用的模塊,以下為模塊的參數及使用說明
1.Weed master
參數 類型 說明
-cpuprofile String Cpu profile輸出文件 -defaultReplication String 如果沒有指定默認備份類型。默認”000” -garbageThreshold String 清空和回收空間的閾值(默認”0.3”) -ip String Master 服務器ip地址(默認”localhost”) -ip.bind String 需要綁定的ip地址(默認”0.0.0.0”) -maxCpu Int 最大cpu數量。0表示所有可用的cpu -mdir String 存儲元數據的數據目錄(默認”/tmp”) -memprofile String 內存配置文件輸出文件 -peers String 代表服務器集群,逗號分隔所有主節點ip:端口,,示例127.0.0.1:9093,127.0.0.1:9094 -port Int http監聽端口(默認9333) -pulseSeconds Int 心跳檢測的時間間隔單位為秒(默認5) -secure.secret String 加密json web token方法 -volumePreallocate 無 為volumes預先分配磁盤空間 -volumeSizeLimitMB Uint Master停止指向過量的volumes寫的限定(默認30000) -whiteList String 逗號分隔具有寫權限的Ip地址。如果是空的,沒有限制。即白名單
defaultReplication說明 000 不備份, 只有一份數據 001 在相同的rackj里備份一份數據 010 在相同數據中心內不同的rack間備份一份數據 100 在不同的數據中心備份一份數據 200 在兩個不同的數據中心各復制2次 110 在不同的rack備份一份數據, 在不同的數據中心備份一次 如果數據備份類型是 xyz形式 各自的意義 x 在別的數據中心備份的份數 y 不相同數據中心不同的racks備份的份數 z 在別的服務器相同的rack的備份份數
2.Weed volume
參數 類型 說明
-cpuprofile string Cpu profile輸出文件 -dataCenter string 當前volume服務的數據中心名稱 -dir string 存儲數據文件的目錄dir[,dir]…(默認”/tmp”) -idleTimeout Int 連接空閑時間秒數(默認30) -images.fix.orientation (true/false) 上傳時調整jpg方向 -index string 選擇內存~性能平衡模式[memory|leveldb|boltdb|btree]。(默認”memory”) -ip string Ip地址或服務器名稱 -ip.bind string 需要綁定的ip地址(默認”0.0.0.0”) -max string Volumes的最大值,count[,count]…(默認”7”) -maxCpu Int 最大cpu數量。0表示所有可用的cpu -memprofile string 內存配置文件輸出文件 -mserver string 用逗號分隔的master服務器列表(默認”localhost:9333”) -port Int http監聽端口號(默認8080) -port.public Int 端口對外開放 -publicUrl string 公開訪問地址 -pulseSeconds Int 心跳之間的秒數,必須小於或等於master 服務器設置(默認5) -rack string 當前volume服務器的rack 名稱 -read.redirect (true/false) 重新定向轉移或非本地 volumes -whiteList string 逗號分隔具有寫權限的Ip地址。如果是空的,沒有限制。
3.Weed filer
參數 類型 說明 collection String 所有數據將存儲在這個集合中 dataCenter String 首選在此數據中心寫入volumes defaultReplicaPlacement String 如果沒有指定默認復制類型(默認“000”) dirListLimit Int 限制子目錄列表大小 disableDirListing 無 關閉目錄清單 ip String Filter服務器http監聽ip地址 master String 用逗號分隔的master服務器(默認“localhost:9333”) maxMB Int 分割文件大於限制(默認32) port Int Filer服務器htp監聽端口(默認8888) port.grpc Int Filer grpc服務器監聽端口,默認為 http的端口+10000 port.public Int 對外開放的端口 redirectOnRead 無 在文件GET請求期間是代理還是重定向到volumes服務器 secure.secret String 加密Json Web令牌(JWT)的密鑰
4.Weed upload
參數 類型 說明
collection string 可選的集合名稱 dataCenter String 可選的數據中心名稱 debug 無 顯示debug信息 dir String 如果指定,則遞歸地上傳整個文件夾。 include String 需要上傳的文件,跟-dir配合使用,例如*.pdf,*.html,ab?d.txt等 master String Seaweedfs master服務器地址(默認”localhost:9333”) maxMB Int 如果文件超過指定大小則進行分割 replication string 備份類型 secure.secret string 加密Json Web令牌(JWT)的密鑰 ttl string 存活時間 1m,1h,1d,1M,1y
以上是maset volume upload filer 的所有參數說明。是主要的功能。
使用接口
申請一個fid curl http://localhost:9333/dir/assign
上傳文件 curl -F file=@/home/chris/myphoto.jpg http://127.0.0.1:8080/3,01637037d6 刪除文件 curl -X DELETE http://127.0.0.1:8080/3,01637037d6 申請帶存活時間及設置集合的fid curl http://localhost:9333/dir/assign?ttl=3m&collenction=xxx