SeaweedFS的配置使用

    SeaweedFS是一個簡單而且高度可擴展的分佈式文件系統,能夠存儲數十億的文件而且快速得到文件,特別適合於有效處理小文件,這裏咱們簡稱爲weed,weed的主節點無論理文件元數據而是僅管理文件卷,這些文件卷服務器各自管理各自的元數據,因此這樣在高併發的狀況下減小了主節點的壓力和網絡通訊,同時定位文件也更迅速. linux

    weed的每一個文件元數據最多隻有40字節的磁盤開銷,而且讀取磁盤的速度爲O(1)級別的,所以性能很是高,weed的主要應用場景是存儲海量的圖片信息而且能夠快讀定位. git

    weed是使用Go語言開發的,github主頁爲:https://github.com/chrislusf/seaweedfs,使用weed能夠經過源碼編譯,須要提早安裝Go環境;也可使用編譯好的二進制包,不依賴Go環境直接執行,這裏爲了方便配置直接使用編譯好的二進制文件,下載地址是:https://github.com/chrislusf/seaweedfs/releases/tag/0.90,目前最新版是0.90,下面有不一樣平臺的包以及源碼能夠根據須要下載:github

    

    我這裏是64位linux,因此下載的是linux_amd64.tar.gz這個包,下載以後執行解壓: tar -xvzf linux_amd64.tar.gz 解壓以後直接在當前目錄有一個weed可執行文件,沒錯就是這麼簡單,能夠把這個二進制文件複製到任何地方.數組

    下面看一下幫助: ./weed help ,而後再看一下master的幫助: ./weed help master 注意不要寫反了,這裏會列出master啓動的相關參數,查看卷啓動參數可使用 /weed help volume ,其餘的根據須要來.服務器

    如今啓動一個master: ./weed master  默認綁定端口爲9333能夠經過-port指定,默認綁定ip爲localhost和0.0.0.0,這個也能夠指定,如今是在前臺執行,實際環境可使用nohup放到後臺.  特別注意一點是,當單機啓動不一樣的master來管理多個存儲時,必定要使用-mdir參數指定master服務元數據目錄,若是不指定默認是/tmp,當多個實例分開時就會出現交叉的狀況,當請求其中一個master時,會返回另外master管理的volume,引發不少問題,因此單節點部署多master必定要注意.cookie

    而後咱們啓動第一個volume服務:網絡

nohup ./weed volume -dir="/data/weed" -max=5 -mserver="127.0.0.1:9333" -port=8080 > /var/log/weed.log 2>&1 &

    volume端口默認不指定爲8080,-max指定是最大的卷個數,即這一個服務管理5個卷.併發

    而後咱們再啓動第二個volume服務:curl

nohup ./weed volume -dir="/data/weed" -max=10 -mserver="127.0.0.1:9333" -port=8081 > /var/log/weed2.log 2>&1 &

    這裏咱們是在同一個服務器節點作的僞分佈式,實際的分佈式配置和上面徹底同樣,很簡單.分佈式

    而後能夠作一個簡單上傳圖片測試:

    首先向master發送請求獲取fid和卷服務器url:

curl -X POST http://127.0.0.1:9333/dir/assign

    這裏本機寫127.0.0.1其餘服務器要寫實際的master地址,而後返回以下:

    

    這裏fid爲8,06ca4883a0:8爲卷id,是無符號的32位整數;後面的06爲文件密鑰,是64位無符號整數,以16進制編碼;而後後面的ca4883a0是文件cookie,32位無符號整數,這裏用的4組16進制字符串表示長度爲8,主要是防止url猜想. 

    這個fid須要咱們本身存儲,第一種方式能夠按照結構拆分爲整數類型存儲,最多佔用4 + 8 + 4 = 16個字節;另外一種方式咱們直接能夠存儲這個串,字符串長度最多也就是是8 + 1 + 16 + 8 = 33,因此一個char 33的數組就夠了,而且一般也沒有卷編號可以達到2的32次方;這裏是兩種經常使用的存儲方式,能夠根據須要選擇.

     而後能夠根據卷返回的url上傳文件的,這裏8對應的是8081端口這個服務,下面能夠上傳文件:

curl -X PUT -F file=@/root/test.jpg http://127.0.0.1:8081/8,06ca4883a0

    

    上傳成功以後會返回文件名和大小,如今就上傳成功了,原來的文件名不須要記錄.

    而後讀取方法以下:

    首先根據fid的卷編號得到卷對應的服務器地址: curl http://127.0.0.1:9333/dir/lookup?volumeId=8 

    

    返回的是一個列表,可能以前volume和如今啓動方式不一樣會出現這種狀況,固然儘可能不要這樣,這裏拿到ip後能夠訪問圖片了,這裏weed作的很人性化,下面的url都是能夠的:

http://192.168.4.205:8081/8,06ca4883a0
http://192.168.4.205:8081/8,06ca4883a0.jpg
http://192.168.4.205:8081/8/06ca4883a0
http://192.168.4.205:8081/8/06ca4883a0.jpg
http://192.168.4.205:8081/8/06ca4883a0/xxxxx
http://192.168.4.205:8081/8/06ca4883a0/xxxxx.jpg

    具體ip改爲實際的ip,能夠看到上面作這些地址都是能夠的,能夠根據須要設計,最後的xxxxx能夠是任意的字符串

    另外還能夠對圖片作簡單的處理如調整尺寸: http://192.168.4.205:8081/8/06ca4883a0.jpg?height=200&width=200 ,只指定一個參數按比例縮放,另外更多參數能夠參考文檔.

    最後刪除圖片可使用: curl -X DELETE http://127.0.0.1:8081/8/06ca4883a0.jpg 

    

    能夠看出,當刪除成功是返回實際的大小,文件不存在時返回0

    知道了上面的這些基本操做,咱們就能夠在程序中實現圖片的存儲,訪問和刪除了,這些基本操做在github首頁介紹的已經很詳細了,我這裏只是敘述一遍而已.

    以上就是weed的基本配置和使用,實際使用中weed還支持分佈式多主和跨數據中心管理等,操做都比較簡單,而且任何的卷掛掉以後,寫入仍然能夠寫入剩餘正常的而不受影響,讀取正常的捲上面的文件也不受影響,甚至主節點掛了若是知道對應的卷地址,訪問圖片仍然不受影響,這樣生產環境的使用彈性就很是好. 

相關文章
相關標籤/搜索