golang開源Distributed File Systemweed-fs的安裝與運用

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

1.安裝配置golang開發環境

       Go是Google開發的一種編譯型,可平行化,並具有記憶體回收功能的程式設計語言,可到http://www.golangtc.com/download去下載go1.7rc6.linux-amd64.tar.gz,下載後將壓縮包上傳並解壓到指定的目錄下(例:/usr/local/)。

tar -zxvf /usr/local/src/go1.7rc6.linux-amd64.tar.gz -C /usr/local/

配置環境變數,編輯/etc/profile檔案,添加如下內容:

GOHOME=/usr/local
export GOROOT=$GOHOME/go
export GOPATH=/usr/webserver/go/
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin

儲存退出,執行source /etc/profile重新載入環境變數後,執行go version,若能正常顯示go的版本資訊,則配置成功。

2.下載並安裝weed-fs

 1 方式一:下載源碼編譯安裝(要vpn有些包會下不到,本人是直接下載編譯好了的)        weed-fs又稱為seaweed-fs,是一個簡單且高效能的分布式儲存系統,他有如下功能:
        a. 儲存海量檔案
        b. 能快速存取儲存的檔案
        參考weed-fs的官網https://github.com/chrislusf/seaweedfs的installation guide安裝weed-fs,見:


執行go get github.com/chrislusf/seaweedfs/go/weed命令後,將下載並編譯weed-fs,產生的可執行檔weed放在$GOPATH/bin目錄,源碼存放在$GOPATH/src目錄,由於在國內一些網站被牆,可能會出現一些包下載不了錯誤,直接網上下載放到相相應的目錄就好;

以下錯誤:
        root@ubuntu:/tmp/chengxf# go get github.com/chrislusf/seaweedfs/go/weed
        package github.com/chrislusf/seaweedfs/go/weed
        imports bazil.org/fuse
        imports bazil.org/fuse/fs
        imports golang.org/x/net/context: unrecognized import path "golang.org/x/net/context"
        # cd .;Git clone https://code.google.com/p/go-decimal-inf.exp /tmp/chengxf/gopath/src/speter.NET/go/exp/math/dec/inf
        Cloning into '/tmp/chengxf/gopath/src/speter.Net/go/exp/math/dec/inf'...
        error: Failed to connect to 2404:6800:400a:805::200e: Network is unreachable while accessing https://code.google.com/p/go-decimal-inf.exp/info/refs
        fatal: HTTP request failed
        package github.com/chrislusf/seaweedfs/go/weed
        imports bazil.org/fuse
        imports bazil.org/fuse/fs
        imports github.com/boltdb/bolt
        imports github.com/chrislusf/raft
        imports github.com/gogo/protobuf/proto
        imports github.com/dgrijalva/jwt-go
        imports github.com/gocql/gocql
        imports github.com/golang/groupcache/lru
        imports github.com/golang/snappy/snappy
        imports speter.net/go/exp/math/dec/inf: exit status 128
        package github.com/chrislusf/seaweedfs/go/weed
        imports bazil.org/fuse
        imports bazil.org/fuse/fs
        imports github.com/boltdb/bolt
        imports github.com/chrislusf/raft
        imports github.com/gogo/protobuf/proto
        imports github.com/dgrijalva/jwt-go
        imports github.com/gocql/gocql
        imports github.com/golang/groupcache/lru
        imports github.com/golang/snappy/snappy
        imports github.com/golang/protobuf/proto
        imports github.com/syndtr/goleveldb/leveldb
        imports github.com/syndtr/goleveldb/leveldb/util
        imports github.com/syndtr/gosnappy/snappy
        imports gopkg.in/Redis.v2
        imports gopkg.in/bufio.v1
        imports github.com/disintegration/imaging
        imports golang.org/x/image/bmp: unrecognized import path "golang.org/x/image/bmp"
        package github.com/chrislusf/seaweedfs/go/weed
        imports bazil.org/fuse
        imports bazil.org/fuse/fs
        imports github.com/boltdb/bolt
        imports github.com/chrislusf/raft
        imports github.com/gogo/protobuf/proto
        imports github.com/dgrijalva/jwt-go
        imports github.com/gocql/gocql
        imports github.com/golang/groupcache/lru
        imports github.com/golang/snappy/snappy
        imports github.com/golang/protobuf/proto
        imports github.com/syndtr/goleveldb/leveldb
        imports github.com/syndtr/goleveldb/leveldb/util
        imports github.com/syndtr/gosnappy/snappy
        imports gopkg.in/redis.v2
        imports gopkg.in/bufio.v1
        imports github.com/disintegration/imaging
        imports golang.org/x/image/tiff: unrecognized import path "golang.org/x/image/tiff"
        root@ubuntu:/tmp/chengxf# 


        首先上面的unrecognized import path “imports golang.org/x/xxx/xxx”,可以手動去https://github.com/golang上下載相應的包,放置與/tmp/chengxf/gopath/src的相應子目錄下,再次執行後,發現只剩如下錯誤:
        root@ubuntu:/tmp/chengxf# go get github.com/chrislusf/seaweedfs/go/weed
        # cd .; git clone https://code.google.com/p/go-decimal-inf.exp /tmp/chengxf/gopath/src/speter.net/go/exp/math/dec/inf
        Cloning into '/tmp/chengxf/gopath/src/speter.net/go/exp/math/dec/inf'...
        error: Failed to connect to 2404:6800:4005:80b::200e: Network is unreachable while accessing https://code.google.com/p/go-decimal-inf.exp/info/refs
        fatal: HTTP request failed
        package speter.net/go/exp/math/dec/inf: exit status 128
        root@ubuntu:/tmp/chengxf#


        上面是擷取code.google.com上的資源出現錯誤,可以手動去https://github.com/go-inf/inf/tree/master下載源碼包,並解壓至/tmp/chengxf/gopath/src/speter.net/go/exp/math/dec/inf目錄下,再次執行go get github.com/chrislusf/seaweedfs/go/weed又報錯:
        root@ubuntu:/tmp/chengxf/gopath/src/speter.net/go/exp/math/dec/inf# go get github.com/chrislusf/seaweedfs/go/weed
../../../../../../github.com/gocql/gocql/helpers.go:13:2: code in directory /tmp/chengxf/gopath/src/speter.net/go/exp/math/dec/inf expects import "gopkg.in/inf.v0"


        好吧,我也不知道什麼原因,總之我將/tmp/chengxf/gopath/src/speter.net/go/exp/math/dec/inf/dec.go檔案中的”// import "gopkg.in/inf.v0"“刪除掉,然後再用go get github.com/chrislusf/seaweedfs/go/weed重新編譯就好了。/tmp/chengxf/gopath/bin目錄下產生了可執行檔weed。

 2.  方式二:下載編譯好的進行運行安裝

 下載地址:https://github.com/chrislusf/seaweedfs/releases/tag/0.74

可以直接下載它的運行包,直接解壓,就可以運行了(我就是這樣做的,如果這樣,etc/profile裡面的gopath這一項就不需要了)

export GOPATH=/usr/webserver/go/
export PATH=$PATH:$GOPATH/bin

linux 下命令下載:

wgethttps://bintray.com/artifact/download/chrislusf/seaweedfs/weed_0.70beta_linux_amd64.tar.gz

tar zxvf weed_0.70beta_linux_amd64.tar.gz

服務啟動:


服務啟動:


1 進入weed的解壓目錄,我的是這樣的。


root@ubuntu:~/webserver/weed_0.70beta_linux_amd64# ./weed master



注意看,它是啟動了一個服務,連接埠是9333,這是它的預設連接埠。


2 開機檔案儲存服務

root@ubuntu:~/webserver/weed_0.70beta_linux_amd64# ./weed volume -dir="/root/webserver/weed_0.70beta_linux_amd64/data" -max=5 -mserver="localhost:9333" -port=9080 &



3 提交一個儲存請求,這個時候weed先要分配一個全域的檔案ID



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





4 儲存一張圖片


curl -X PUT -F file=@/root/webserver/weed_0.70beta_linux_amd64/error.jpg http://127.0.0.1:9080/5,019d90e98a





5 訪問測試

因為我的伺服器位址是192.168.1.47,http://192.168.1.47:9080/5,019d90e98a.jpg









甚至,你還可以加上尺寸,動態擷取相應圖片的大小






確實不錯。看了以上的,你會發現它的檔案ID,至始至終都存在。這就是檔案的唯一標識。其實這個ID是每3部分存在的。


其中"fid":"5,019d90e98a"就是 Fid,Fid 由三個部分組成 【VolumeId, NeedleId, Cookie】 組成。


VolumeId: 1          32bit      儲存的物理卷的Id


NeedleId: 01        64bit      全域唯一NeedleId,每個儲存的檔案都不一樣(除了互為備份的)。


Cookie: 9d90e98a    32bit      Cookie值,為了安全起見,防止惡意攻擊。


以上這些,只能說是用過curl的方式,作為JAVA開發人員。還是需要封裝一個這些API,方便訪問。

以上是常規啟動:在啟動時我們還可以進行參數配置

例:
        準備:在/tmp/chengxf目錄下建立如下檔案夾:mdata、vol1、vol2、input和output,並在input檔案夾中建立測試檔案a.txt和b.xml。
        啟動master:weed master -mdir="/tmp/chengxf/mdata" -defaultReplication="001" -ip="10.124.69.235" -port=9334 &
        啟動volume:weed volume -dir=/tmp/chengxf/vol1/ -mserver="10.124.69.235:9334" -ip="117.78.1.100" -ip.bind="10.124.69.235" -port=8081 -max=5 &
                               weed volume -dir=/tmp/chengxf/vol2/ -mserver="10.124.69.235:9334" -ip="117.78.1.100" -ip.bind="10.124.69.235" -port=8082 -max=5 &
        隱藏檔:weed upload -server="117.78.1.100:9334" -dir="/tmp/chengxf/input" -include=*.txt
        執行後返迴文件fid:[{"fileName":"/tmp/chengxf/input/a.txt","fileUrl":"117.78.1.100:8081/1,01eb8f1e42","fid":"1,01eb8f1e42","size":44}]
        根據fid訪問檔案:weed download -server="117.78.1.100:9334" -dir="/tmp/chengxf/output" 1,01eb8f1e42
        執行後在/tmp/chengxf/output目錄下發現a.txt檔案
         117.78.1.100是公網IP,通過防火牆映射到內網機器10.124.69.235上的,不能直接綁定公網地址,所以採用ip.bind綁定內網地址來實現。


參考文章:http://blog.csdn.net/qq286210662/article/details/46328153?ref=myread

參考文章:http://sanwen.net/a/tabgsbo.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.