FastDFS+nginx搭建文件服務器並使用java客戶端進行操作


fastdfs原理

fastdfs分為client、storage、tracker三部分

client為fastdfs客戶端,負責對fastdfs服務發起請求,簡單地說就是上傳和下載文件

storage和tracker聯合作為fastdfs服務器,提供上傳和下載的接口,並負責保存文件。

其中storage為保存文件的部分,tracker為client和storage的中介,負責負載均衡。

storage理解起來非常簡單,就相當於是一個硬盤,你可以往里面存東西,也可以從里面拿東西。

而tracker則更加抽象一些,他是fastdfs能成為分布式文件存儲系統的核心。當一個硬盤大小不夠放文件了,自然會想到用多個硬盤,也就是多個服務器進行文件的存儲。由此也帶來了一個問題,當存文件的時候,文件存到哪里?取文件的時候,從哪里取?因此就出現了tracker追蹤者。多個硬盤也就是多個storage同時工作的時候,tracker會保存他們的位置,同時規律地向他們詢問狀態,判斷他們是否可用。當客戶端client向文件服務器發出請求,想要存取文件時,實際上是向tracker發出請求,tracker收到請求后,根據自己保存的storage信息判斷應該使用哪個storage,然后進行操作,並將操作結果反饋給客戶端。這一點在后面對fastdfs的配置中有很明顯的體現。

 

fastdfs配置

fastdfs的安裝在很多博客中都有提到,這里不再贅述。其實對於配置的講解也不少,但大多都是直接給出參數進行配置,並未講解這樣配置的原理,可能會帶來使用者的困惑,甚至出現配置錯誤。不過總體來說fastdfs的配置非常簡單,只要牢牢抓住他的工作流程就行了,更加具體的參數配置譬如占用空間大小等,當你用到的時候,你也肯定已經不需要看這種入門教程了。

(配置文件在哪里請自行百度搜索)

在最前面說一句:http相關的全部不需要配置,fastdfs已經停用http服務了。

storage配置

作為硬盤,storage當然要配置的是存儲位置。當然這種系統都會有日志文件,你還需要配置一下日志存放位置。base_path這個參數就是配置他的基礎路徑,# the base path to store data and log files,這是他官方給的注釋,也就是說這個基礎路徑就是存放數據的路徑,也是存放日志的路徑。當然要注意還有一個參數store_path0# store_path#, based 0, if store_path0 not exists, it's value is base_path,這個參數是數據的存放路徑,當他沒有被填寫的時候,他的值就是base_path。很顯然,這個也是數據的存放路徑,並且會優先將這個作為存放路徑,如果這個沒有填寫,才會把base_path作為存放路徑。當這個參數填寫后,base_path就僅僅是日志文件的存放路徑了。

為什么這個store_path會在后面價格0?因為可以有多個storage,那就需要多個存放地址,從0開始一個一個往后寫地址就行了,當然有一個專門指定storage的數量參數要填寫。

同時,前面提到tracker是client和storage的中介,所以當然要配置tracker服務器地址tracker_server=你的tracker服務器地址(tracker_ip):端口號(tracker_port)。至於這個服務器地址是什么,接着看就知道了。

tracker配置

作為中介,tracker需要配置的東西很少,因為都是別人來找他,客戶端會來找他,storage會主動向他提供自己的信息。所以它只需要在原地等着就行。那么他就需要配置一下自己的端口號port=22122(默認端口號(tracker_port),而他所在的服務器地址就是tracker服務器地址了,所以前面那個storage配置的tracker服務器地址就是這里tracker所在的服務器的地址(tracker_ip),端口號就是這里配置的端口號。當然,tracker需要存儲所有storage的信息,並且他也有日志,所以要配置一下這些東西的存儲路徑base_path=隨便你定。

client配置

作為客戶端,干什么都只需要找中介tracker就行了,所以只需要配置tracker的地址tracker_server=tracker的服務器地址(tracker_ip):端口號(tracker_port)。當然程序運行都會出現數據和日志,所以配置一下存放路徑base_path=你自己定。

最后提一句,這里配置的所有存放路徑必須手動創建!!!

fastfds使用

配置完了自然要用一下。這個使用方式多了去了,百度一下就行了,主要需要關注兩點。一個是fastdfs的三部分並不一定是部署在一起的,client,tracker,storage可以分開部署,其實也應當是分開的,client負責給人用,tracker和storage負責存取服務的提供。因此你要用fastdfs,你得保證服務器那邊tracker和storage能用,然后你客戶端這邊client配置好了,然后才能用。第二點就是fastdfs存了文件后會給你返回一個路徑,一般就是服務器地址和組名,存放地址之類的,你后面要用這些東西來自己組織訪問地址。其中里面有個/00/00/,到這里其實就是是一個文件夾路徑了。

 

nginx與FastFDS聯動

前面說了,fastdfs棄用了http,所以他就只提供一個文件的上傳和下載了,那么表示層的任務就交給了nginx。為什么不交給tomcat或者jetty?因為nginx的靜態文件傳輸效率是最高的,常用來座負載均衡和文件服務。nginx的配置,反向代理什么的我就不說了,網上一堆。我在這里主要說一下nginx在這個文件系統中擔任什么職責。

FastDFS在存儲文件的時候,其實也就是在硬盤中存,你會在storage的data文件夾(前面有配置這個文件夾的位置,也就是storage的文件存儲位置)中看到很多用兩位二進制命名的文件夾,然后每個文件夾進去后又是一堆這樣的文件夾,然后再進去才是存儲的文件。之前說的那個/00/00/就是這里的文件夾路徑。你手動點進去就能找到文件。此時,只要你確確實實會nginx的反向代理,那不需要我教你也會nginx和FastDFS聯動了。至於有個fastdfs-module啥的,那個是處理分布式數據同步之類的,你現在可以不搭建,等把fastdfs用熟了再搭建。當然,那個時候你可能已經投入阿里雲oss的懷抱了。

 

java編寫FastDFS客戶端

github上有開源項目,但是有兩個,一個是余慶先生寫的,需要下載源碼,然后maven自己打包使用,而且使用過程比較復雜(相對來說),這里我推薦的是另一個開源項目https://github.com/tobato/FastDFS_Client。不過這個項目雖然用起來很簡單,但是幾乎只支持springboot,其他的框架想要使用比較麻煩,還是去考慮余慶先生的吧。當然,我估計現在也沒幾個不用springboot的。他這個開源項目學習起來非常簡單,你只需要去看他的源碼,里面有測試類,跟着他的測試類寫就完事了。這個項目的readme寫的也很詳細,相信不會有人看了還不會用的,我就不在這里講了。這個項目可以直接用maven進行導包,不需要自己再本地打包了,也是比較方便。

 

ok,這就是本人的fastdfs學習筆記了,純手打,累死了,改天還是要棄暗投明,投向oss的懷抱。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM