SeaweedFS簡單部署
????seaweedfs是一個開源的’文件服務(wù)器‘(我只能這樣形容了,有點類似數(shù)據(jù)庫),項目在GitHub上有倉庫。根據(jù)項目介紹它的性能非常不錯,今天我們就來嘗試部署一下。
????系統(tǒng)我這里使用Debian11 bullseye,安裝為VirtualBox虛擬機,宿主為Windows10。你問為什么不HyperV?HyperV爆炸的時候連帶橄欖了Docker的HyperV后端,你說我敢不敢用了?windows也是可以部署的,部署的步驟也非常簡單,但是要想真正玩透還是需要一點時間的。
????首先就是把二進(jìn)制文件下載到再解壓到你想要的位置,由于我是想讓seaweedfs獨占整個虛擬機,所以我使用 chmod 777 weed 授權(quán)seaweedfs的二進(jìn)制文件。注意不要隨便給任何程序777的權(quán)限,可以 +x 或者755。
????在運行之前我們先來看一下seaweedfs的三個部分,master server、volume server和filer。
????master server的用途是追蹤每一個volume server中每個volume(“卷”)的位置,有點類似網(wǎng)絡(luò)中的DNS服務(wù)器。volume的信息是動態(tài)更新的,不會長期儲存。master server可以部署到不同機器上并集群,主要master server通過選舉產(chǎn)生(有mongodb那味了),如需集群需要master server的個數(shù)為奇數(shù)以獲得最佳保障。
????volume server則用于管理自己所有的volume,volume server可以部署到不同機器上并連接到同一個(集群的也可)master server來統(tǒng)一訪問。
????filer則比較類似API。volume中的文件需要通過文件id來直接訪問而不是文件名,這有時會帶來一些麻煩,因為文件id遠(yuǎn)沒有文件名好記。這時filer讓這一切變得更簡單,允許用戶以類似訪問真正的文件系統(tǒng)一樣使用目錄和文件名訪問文件。filer也可以集群,或者說水平擴(kuò)展以減輕單個filer負(fù)載。
????接下來就是分別啟動這些服務(wù)了,首先啟動master server
./weed master
????對,就這么簡單,如果你想要稍微設(shè)置一點那可以添加下面的參數(shù)。

????然后是volume server

????有了這兩個服務(wù),就可以開始往里面倒點文件了,使用 ./weed upload -dir=<目標(biāo)文件路徑> 來往里面添加文件,可以使用 -mserver <string> 來指定master server。
????如何訪問文件呢?在upload之后會返回導(dǎo)入文件的一些信息,比如這個返回

????然后我們就可以通過訪問提供的url來訪問文件。注意這里是訪問volume server而不是master server。
????同樣你也可以通過http訪問volume server發(fā)送GET等請求來操作文件,最簡單的方式是使用Postman,或者它的開源替代Postwoman(現(xiàn)已更名Hoppscotch)


????filer的設(shè)置略復(fù)雜,需要用到一個數(shù)據(jù)庫來存儲id和文件路徑的映射。Cassandra, MySQL, Postgres, Redis, SQLite等都可以使用。在 ./weed scaffold -config=filer 中還可以看到 leveldb、rocksdb、hbase、etcd、mongodb的示例。這里由于文檔給的不是很詳細(xì),我就不使用filer來轉(zhuǎn)換id到路徑了,因為對于我的應(yīng)用來說本來就會有一個API(還有點像兼容層)來處理這些訪問,再加一層導(dǎo)致的訪問延遲*可能*會更大。在這里我就不搞這玩意了。