【golang分佈式文件系統】go-fastdfs分佈式文件系統搭建

【go-fastdfs】go-fastdfs 分佈式文件系統搭建

一、FastDFS簡介

go-fastdfs是一個基於http協議的開源的分佈式文件系統,它基於大道至簡的設計理念,一切從簡設計,使得它的運維及擴展變得更加簡單,它具有高性能、高可靠、無中心、免維護等優點。 它的主要功能包括:文件存儲,文件同步和文件訪問,以及高容量和負載平衡。 
項目地址:https://github.com/happyfish100/fastdfs

二、go-fastdfs (go語言版本的FastDFS)

項目地址:https://github.com/sjqzhang/go-fastdfs 
編譯版本下載地址:https://github.com/sjqzhang/go-fastdfs/releases

1.文檔介紹

中文Wiki地址:https://github.com/sjqzhang/go-fastdfs/blob/master/README-en.md

go-fastdfs是一個基於http協議的分佈式文件系統,它基於大道至簡的設計理念,一切從簡設計,使得它的運維及擴展變得更加簡單,它具有高性能、高可靠、無中心、免維護等優點。

支持curl命令上傳 
支持瀏覽器上傳 
支持HTTP下載 
支持多機自動同步 
支持斷點下載 
支持小文件自動合併(減少inode佔用 
支持配置自動生成 
支持自監控告警 
支持集羣文件信息查看 
使用通用HTTP協議 
無需專用客戶端(支持wget,curl等工具) 
類fastdfs 
高性能 (使用leveldb作爲kv庫) 
高可靠(設計極其簡單,使用成熟組件) 
無中心設計(所有節點都可以同時讀寫)

優點

無依賴(單一文件) 
自動同步 
失敗自動修復 
按天分目錄方便維護 
支持不同的場景 
文件自動去重 
支持目錄自定義 
支持保留原文件名 
支持自動生成唯一文件名 
支持瀏覽器上傳 
支持查看集羣文件信息 
支持集羣監控郵件告警 
支持token下載 token=md5(file_md5+timestamp) 
運維簡單,只有一個角色(不像fastdfs有三個角色Tracker Server,Storage Server,Client),配置自動生成 
每個節點對等(簡化運維) 
所有節點都可以同時讀寫

部署圖

 

2.安裝

1.首先下載官網的編譯版本

 

2.運行可執行文件fileserver,然後 就會生成各種需要的配置文件.

3.配置

運行後生成的目錄結構

 
conf文件夾:裏面cfg.json是主要的配置文件,裏面配置端口號、集羣、外網訪問url等。


需要注意的是配置文件中peers參數會自動生成一個本地主機ip,但還是需要配置增加一個內網ip.


不然使用api時會報以下信息:

Can only be called by the cluster ip or 127.0.0.1 or admin_ips(cfg.json),current ip:192.168.88.1

 

files文件夾:是圖片上傳以後保存的路徑,默認是按日期劃分,也可以指定路徑。 
log文件夾:是上傳信息和運行的日誌信息。 
static文件夾:是放置一些前端靜態頁面xml文件。 
data文件夾:裏面是一些上傳的後的圖片信息記錄保存在ldb格式文件,如文件的md5值,上傳後的路徑,時間戳,Szie大小等.

三、啓動服務器

配置完cfg.json後直接運行可執行文件fileserver,運行成功後會顯示如下內容:

Listen on:8080

運行成功後可按以下三種上傳方式進行測試:

命令上傳

curl -F file=@http-index-fs http://10.1.xx.60:8080/upload

WEB上傳(瀏覽器打開)

http://yourserver ip:8080/upload.html 注意:不要使用127.0.0.1上傳

代碼上傳(選項參閱瀏覽器上傳)

golang版本


 

package main

 

import (

"fmt"

"github.com/astaxie/beego/httplib"

)

 

func main() {

var obj interface{}

req:=httplib.Post("http://10.1.5.9:8080/upload")

req.PostFile("file","filename")//注意不是全路徑

req.Param("output","json")

req.Param("scene","")

req.Param("path","")

req.ToJSON(&obj)

fmt.Print(obj)

}

上傳成功後會返回以下信息:


 

{

"url":"http://192.168.88.132:8080/group1/test/企業微信截圖_15616176241551.png",

"md5":"baa10e8600a47f2aa0f8c2c926cfe409",

"path":"/group1/test/企業微信截圖_15616176241551.png",

"domain":"http://192.168.88.132:8080",

"scene":"default",

"size":79491,

"mtime":1561619383,

"scenes":"default",

"retmsg":"",

"retcode":0,

"src":"/group1/test/企業微信截圖_15616176241551.png"

}

四、API說明


 

一、統一使用POST請求

二、返回格式統一爲json

  格式如下

{

"status":"ok",

"message":"",

"data":{}

}

二、url中的group只有在support_group_manage設置爲true纔有。

例如:

http://10.1.5.9:8080/group/reload

默認:

http://10.1.5.9:8080/reload

說明:url中的group爲cfg.json中的group參數值。

1.配置管理API

http://192.168.88.132:8080/reload?action=set&cfg=addr

參數:

參數名 類型 描述
action string set修改參數,get獲取參數
cfg string 配置文件參數參數名稱與action=set配合完成參數設置

返回參數如下:


 

{

"data": {

"addr": ":8080",

"admin_ips": [

"127.0.0.1"

],

"alarm_receivers": [],

"alarm_url": "",

"auth_url": "",

"auto_repair": true,

"default_download": true,

"default_scene": "default",

"download_domain": "",

"download_token_expire": 600,

"download_use_token": false,

"enable_cross_origin": true,

"enable_custom_path": true,

"enable_distinct_file": true,

"enable_download_auth": false,

"enable_google_auth": false,

"enable_merge_small_file": false,

"enable_migrate": false,

"enable_tus": true,

"enable_web_upload": true,

"extensions": [],

"file_sum_arithmetic": "md5",

"group": "group1",

"host": "http://192.168.88.132:8080",

"mail": {

"host": "smtp.163.com:25",

"password": "abc",

"user": "[email protected]"

},

"peer_id": "1",

"peers": [

"http://192.168.88.1"

],

"queue_size": 10000,

"read_only": false,

"refresh_interval": 1800,

"rename_file": false,

"scenes": [],

"show_dir": true,

"support_group_manage": false

},

"message": "",

"status": "ok"

}

2.文件統計信息API

http://192.168.88.132:8080/stat 
返回參數如下:


 

{

"data": [

{

"date": "20190625",

"fileCount": 3,

"totalSize": 94210

},

{

"date": "20190627",

"fileCount": 0,

"totalSize": 0

},

{

"date": "all",

"fileCount": 3,

"totalSize": 94210

}

],

"message": "",

"status": "ok"

}

 

3.系統狀態信息API

http://192.168.88.132:8080/status 
返回參數如下:


 

{

"data": {

"Fs.AutoRepair": true,

"Fs.FileStats": [

{

"date": "20190625",

"fileCount": 3,

"totalSize": 94210

},

{

"date": "20190627",

"fileCount": 0,

"totalSize": 0

},

{

"date": "all",

"fileCount": 3,

"totalSize": 94210

}

],

"Fs.Local": "http://192.168.88.132:8080",

"Fs.Peers": [

"http://192.168.88.1"

],

"Fs.QueueFileLog": 0,

"Fs.QueueFromPeers": 0,

"Fs.QueueToPeers": 0,

"Fs.RefreshInterval": 1800,

"Fs.ShowDir": true,

"Sys.Alloc": 47888528,

"Sys.Frees": 7989,

"Sys.GCCPUFraction": 0.000016509381835168312,

"Sys.GCSys": 2977792,

"Sys.HeapAlloc": 47888528,

"Sys.HeapObjects": 7580,

"Sys.NumCpu": 4,

"Sys.NumGC": 15,

"Sys.NumGoroutine": 437,

"Sys.TotalAlloc": 90639280

},

"message": "",

"status": "ok"

}

4.文件上傳API

http://192.168.88.132:8080/upload 
參數:

參數名 類型 描述
file string 上傳的文件
scene string 默認default
path string 自定義存儲路徑
output string 輸出格式默認json
auth_token string 非必須,配置文件設置是否必須

返回參數如下:


 

{

"url":"http://192.168.88.132:8080/group1/test/企業微信截圖_15616176241551.png",

"md5":"baa10e8600a47f2aa0f8c2c926cfe409",

"path":"/group1/test/企業微信截圖_15616176241551.png",

"domain":"http://192.168.88.132:8080",

"scene":"default",

"size":79491,

"mtime":1561619383,

"scenes":"default",

"retmsg":"",

"retcode":0,

"src":"/group1/test/企業微信截圖_15616176241551.png"

}

5.文件刪除

http://192.168.88.132:8080/delete?md5= 
參數:

參數名 類型 描述
md5 string 圖片的MD5值與Path二選一
path string 文件上傳後返回的路徑,與MD5值二選一

說明:md5或path都是上傳文件時返回的信息,要以json方式返回才能看到(參閱瀏覽器上傳) 
返回參數:


 

{

"data": null,

"message": "remove success",

"status": "ok"

}

 

6.獲取文件信息

http://192.168.88.132:8080/get_file_info?md5= 
參數:

參數名 類型 描述
md5 string 圖片的MD5值與Path二選一
path string 文件上傳後返回的路徑,與MD5值二選一

說明:md5或path都是上傳文件時返回的信息,要以json方式返回才能看到(參閱瀏覽器上傳) 
返回參數:


 

{

"data": {

"md5": "8fe6dcd07da307ac3fd128aedccd2e45",

"name": "企業微信截圖_15613392198494.png",

"offset": -1,

"path": "files/test",

"peers": [

"http://192.168.88.132:8080"

],

"rename": "",

"scene": "default",

"size": 18866,

"timeStamp": 1561623822

},

"message": "",

"status": "ok"

}

7.搜索文件信息

http://192.168.88.132:8080/search?md5= 
參數:

參數名 類型 描述
md5 string 圖片的MD5值與Path二選一
path string 文件上傳後返回的路徑,與MD5值二選一

說明:md5或path都是上傳文件時返回的信息,要以json方式返回才能看到(參閱瀏覽器上傳) 
返回參數:


 

{

"data": [

{

"md5": "d41d8cd98f00b204e9800998ecf8427e",

"name": "企業微信截圖_15613394634070.png",

"offset": -1,

"path": "files/test",

"peers": [

"http://192.168.88.132:8080"

],

"rename": "",

"scene": "default",

"size": 0,

"timeStamp": 1561624299

},

{

"md5": "794a1079f1cbfbacc4c4404d59ce1917",

"name": "企業微信截圖_15613392903775.png",

"offset": -1,

"path": "files/test",

"peers": [

"http://192.168.88.132:8080"

],

"rename": "",

"scene": "default",

"size": 35224,

"timeStamp": 1561457713

},

{

"md5": "8fe6dcd07da307ac3fd128aedccd2e45",

"name": "企業微信截圖_15613392198494.png",

"offset": -1,

"path": "files/default/20190627/18/00/1",

"peers": [

"http://192.168.88.132:8080"

],

"rename": "",

"scene": "default",

"size": 18866,

"timeStamp": 1561629630

}

],

"message": "",

"status": "ok"

}

8.獲取文件列表

http://192.168.88.132:8080/list_dir?dir=test 
參數:

參數名 類型 描述
dir string 文件夾名字

返回參數:


 

{

"data": [

{

"is_dir": false,

"md5": "6ce2b43b9ffd3237a30aeac2a88e355f",

"mtime": 1561457713,

"name": "企業微信截圖_15613392903775.png",

"path": "test",

"size": 35224

},

{

"is_dir": false,

"md5": "37ea6cda16362a3c4af86ba8614dde0c",

"mtime": 1561624299,

"name": "企業微信截圖_15613394634070.png",

"path": "test",

"size": 0

}

],

"message": "",

"status": "ok"

}

9.同步文件

http://192.168.88.132:8080/sync?date=20160502&force=1 
參數:

參數名 類型 描述
date string 日期,格式爲20160502
force int 1.表示是否強制同步當天所有(性能差),0.表示只同步失敗的文件

返回參數:


 

{

"data": null,

"message": "require paramete date \u0026force , ?date=20181230",

"status": "fail"

}

五.管理後臺系統:go-fastdfs-web

項目地址:https://github.com/perfree/go-fastdfs-web 
各打包版本下載地址:https://github.com/perfree/go-fastdfs-web/releases

0.介紹

go-fastdfs在官方文檔中有介紹爲了方便對文件的監控是支持Web端後臺管理系統.

1.安裝

到官網地址https://github.com/perfree/go-fastdfs-web/releases下載所需要的版本


首先我們來查看目錄結構:

 
config文件夾:主要的一些配置文件信息,如端口號等。 
log文件夾:日誌信息文件。 
db文件夾:裏面是存儲一些fastDFS的設置信息,如文件系統部署機器的ip,集羣,登錄用戶名等信息。

啓動

使用管理腳本啓動,在使用腳本啓動時遇到因爲編碼問題找不到Shell腳本解析器,使用以下方式解決編碼問題,並使用腳本運行成功.


 

sed -i 's/\r$//' goFastDfsWeb.sh 編碼設置

 

./goFastDfsWeb.sh start 腳本運行

Start go-fastdfs-web.jar success... 運行成功信息

2.登錄

啓動後我們可以直接登錄管理後臺系統 http://youserver_ip:8088,默認端口是8088,也可以在配置文件中設置,登錄後會進入配置信息界面,如下。

 
按自己的go-fastDFS配置文件的信息,填寫並設置用戶名和密碼登入。

 

登入以後可以再管理系統中可以批量上傳、刪除、對集羣的管理等操作。

六、常見問題說明

1.如何上傳文件夾?

DIR=log && ls DIR -F file=@$DIR/{} http://192.168.88.132:8080/upload 
上面命令的log爲要上傳的目錄,如果代碼上傳就是簡單的循環上傳就OK。

2.如何縮放圖片?

在下載url中加入width各height參數 
例如:http://192.168.88.132:8080/group1/test/15613392198494.png?download=0&width=100&height=100 
特明說明是:如果要等比例縮放,請將width或height設爲0

3.如何在瀏覽器中直接顯示圖片?

在下載url中加入download=0參數 
例如:http://192.168.88.132:8080/group1/test/15613392198494.png?download=0

4.Docker如何部署?

步驟: 
方式一、 
一、構建鏡像 
docker build . -t fastdfs 
二、運行容器(使用環境變量 GO_FASTDFS_DIR 指向存儲目錄。) 
docker run –name fastdfs -v /data/fastdfs_data:/data -e GO_FASTDFS_DIR=/data fastdfs 
方式二、 
一、拉取鏡像 
docker pull sjqzhang/go-fastdfs 
二、運行容器 
docker run –name fastdfs -v /data/fastdfs_data:/data -e GO_FASTDFS_DIR=/data fastdfs

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章