分布式文件系統(tǒng) | 袁庭新老師帶你快速入門FastDFS工作原理及安裝與配置
天貓、淘寶等購物網(wǎng)站,海量的商品圖片和視頻,是如何存儲的?當(dāng)用戶訪問量大時,又如何保證下載速度?分布式文件系統(tǒng)就是用來解決這些問題的。
01 前言
那么分布式文件系統(tǒng)該如何使用呢?別急,今天袁老師就會帶領(lǐng)大家來學(xué)習(xí)這些非常實用的技能:
分布式文件系統(tǒng)概述
主流的分布式文件系統(tǒng)的介紹
重點介紹FastDFS架構(gòu)
掌握FastDFS的安裝和配置
02 FastDFS概述
1.分布式文件系統(tǒng)
分布式文件系統(tǒng)(Distributed File System)是一個軟件/軟件服務(wù)器,此軟件可以用來管理在多個服務(wù)器節(jié)點中的文件(這些服務(wù)器節(jié)點通過網(wǎng)絡(luò)相連并構(gòu)成一個龐大的文件存儲服務(wù)器集群,即這些服務(wù)器節(jié)點都是用來存儲文件資源的,且用DFS來管理這些文件)。而傳統(tǒng)文件系統(tǒng)與分布式文件系統(tǒng)的對比,有如下區(qū)別:

經(jīng)過對比,我們會發(fā)現(xiàn)傳統(tǒng)文件系統(tǒng)存在如下缺點:
若用戶數(shù)量多,則IO操作會很頻繁 則對磁盤的訪問壓力會較大;
若磁盤故障,則可能會造成數(shù)據(jù)的丟失;
一個磁盤的存儲容量有限。
2.主流的分布式文件系統(tǒng)
2.1 HDFS
Hadoop Distributed File System,Hadoop分布式文件系統(tǒng)。這是一個高容錯的系統(tǒng),適合部署到廉價的機器上,能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)應(yīng)用。HDFS采用主從結(jié)構(gòu),一個HDFS是由一個name節(jié)點和N個data節(jié)點組成。name節(jié)點儲存元數(shù)據(jù),一個文件分割成N份存儲在不同的data節(jié)點上。
2.2 GFS
Google File System,可擴展的分布式文件系統(tǒng),用于大型的,分布式的,對大量數(shù)據(jù)進行訪問的應(yīng)用。GFS可以運行于廉價的普通硬件上,可以提供容錯功能,它可以給大量的用戶提供總體性能較高的服務(wù)。GFS采用主從結(jié)構(gòu),一個GFS集群由一個master和大量的chunkserver(分塊服務(wù)器)組成,一個文件被分割若干塊,分散儲存到多個分塊server中。
2.3 FastDFS
FastDFS由淘寶資深架構(gòu)師余慶編寫并開源,使用C語言編寫而成。FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負(fù)載均衡、線性擴容等機制,并注重高可用、高性能等指標(biāo)。使用FastDFS能夠很容易搭建出一套高性能的文件服務(wù)器集群,實現(xiàn)文件上傳、下載等服務(wù)。

HDFS和GFS都是通用的文件系統(tǒng),他們的優(yōu)點是開發(fā)體驗好,但是系統(tǒng)的復(fù)雜度較高,性能也一般。相比之下,專用的分布式文件系統(tǒng)體驗差,但是復(fù)雜度低,性能也高。尤其是FastDFS,特別適合圖片、小視頻等小文件。因為FastDFS對文件是不分割的,所以沒有文件合并的開銷。并且FastDFS網(wǎng)絡(luò)通信使用Socket,速度也較快。
基于FastDFS的諸多優(yōu)點,所以接下來我們就重點給大家介紹FastDFS的使用。
03 FastDFS架構(gòu)
FastDFS架構(gòu)包括Tracker Server和Storage Server??蛻舳苏埱骉racker Server進行文件上傳、下載,通過Tracker Server調(diào)度最終由Storage Server完成文件上傳和下載。

Tracker Server作用是負(fù)載均衡和調(diào)度,通過Tracker Server在文件上傳時可以根據(jù)一些策略找到Storage Server提供文件上傳服務(wù)。可以將Tracker稱為追蹤服務(wù)器或調(diào)度服務(wù)器。
Storage Server作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務(wù)器上,Storage Server沒有實現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng)的文件系統(tǒng)來管理文件??梢詫torage稱為存儲服務(wù)器。
1.Tracker集群
FastDFS集群中的Tracker Server可以有多臺,Tracker Server之間是相互平等關(guān)系同時提供服務(wù),Tracker Server不存在單點故障??蛻舳苏埱骉racker Server采用輪詢方式,如果請求的Tracker無法提供服務(wù)則換另一個Tracker。
2.Storage集群
Storage集群采用了分組存儲方式。Storage集群由一個或多個組構(gòu)成,集群存儲總?cè)萘繛榧褐兴薪M的存儲容量之和。一個組由一臺或多臺存儲服務(wù)器組成,組內(nèi)的Storage Server之間是平等關(guān)系,不同組的Storage Server之間不會相互通信,同組內(nèi)的Storage Server之間會相互連接進行文件同步,從而保證同組內(nèi)每個Storage上的文件完全一致的。一個組的存儲容量為該組內(nèi)存儲服務(wù)器容量最小的那個,由此可見組內(nèi)存儲服務(wù)器的軟硬件配置最好是一致的。
采用分組存儲方式的好處是靈活、可控性較強。比如上傳文件時,可以由客戶端直接指定上傳到的組也可以由Tracker進行調(diào)度選擇。一個分組的存儲服務(wù)器訪問壓力較大時,可以在該組增加存儲服務(wù)器來擴充服務(wù)能力(縱向擴容)。當(dāng)系統(tǒng)容量不足時,可以增加組來擴充存儲容量(橫向擴容)。
3.Storage狀態(tài)收集
Storage Server會連接集群中所有的Tracker Server,定時向他們報告自己的狀態(tài),包括磁盤剩余空間、文件同步狀況、文件上傳下載次數(shù)等統(tǒng)計信息。
4.FastDFS文件上傳流程

客戶端上傳文件后存儲服務(wù)器將文件ID返回給客戶端,此文件ID用于以后訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數(shù)據(jù)兩級目錄,文件名。

組名:文件上傳后所在的Storage組名稱,在文件上傳成功后由Storage服務(wù)器返回,需要客戶端自行保存。
虛擬磁盤路徑:Storage配置的虛擬路徑,與磁盤選項store_path*對應(yīng)。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
數(shù)據(jù)兩級目錄:Storage服務(wù)器在每個虛擬磁盤路徑下創(chuàng)建的兩級目錄,用于存儲數(shù)據(jù)文件。
文件名:與文件上傳時不同。是由存儲服務(wù)器根據(jù)特定信息生成,文件名包含:源存儲服務(wù)器IP地址、文件創(chuàng)建時間戳、文件大小、隨機數(shù)和文件拓展名等信息。
5.FasDFS文件下載流程

Tracker根據(jù)請求的文件路徑即文件ID來快速定義文件,比如請求下邊的文件:

以上請求處理過程如下:
通過組名Tracker能夠很快的定位到客戶端需要訪問的存儲服務(wù)器組是group1,并選擇合適的存儲服務(wù)器提供客戶端訪問。
存儲服務(wù)器根據(jù)文件存儲“虛擬磁盤路徑”和“數(shù)據(jù)兩級目錄”可以很快定位到文件所在目錄,并根據(jù)文件名找到客戶端需要訪問的文件。
了解了FastDFS的運行原理之后,接下來我們就來開始進行FastDFS的安裝及配置過程吧。
04 FastDFS安裝及配置
1.FastDFS安裝
1.1 安裝gcc
使用yum命令安裝gcc和gcc-c++,編譯時需要使用。
說明:Linux系統(tǒng)下使用gcc編譯C語言的代碼,使用g++編譯C++的代碼。
1.2 安裝libevent
使用yum安裝libevent,運行時需求。
1.3 安裝libfastcommon
libfastcommon是由FastDFS官方提供的,在GitHub開源的一個C基礎(chǔ)庫,包含了FastDFS運行所需要的一些基礎(chǔ)庫。它提供了ini文件解析、logger、64位唯一整數(shù)生成器、字符串處理、socket封裝、對象池、skiplist、定時任務(wù)調(diào)度器、時間輪等等。在這一步的安裝過程中,要經(jīng)歷如下幾個小的安裝步驟。
1.訪問libfastcommon包下載地址:
2.將libfastcommon-1.0.39.zip安裝包上傳到CentOS的/opt目錄下。
3.在CentOS系統(tǒng)中安裝解壓zip包的命令。
4.通過unzip命令解壓libfastcommon-1.0.39.zip壓縮包,獲取libfastcommon-1.0.39目錄。
5.進入libfastcommon-1.0.39目錄,執(zhí)行make.sh腳本文件。
6.如果執(zhí)行make.sh腳本時,提示“權(quán)限不夠”,則需要對make.sh文件進行授權(quán)。然后再重新執(zhí)行make.sh腳本文件。
7.然后執(zhí)行安裝命令。
說明:libfastcommon安裝好后會在/usr/lib64目錄下生成libfastcommon.so庫文件。
8.將/usr/lib64目錄下的libfastcommon.so庫文件拷貝到/usr/lib目錄下。
1.4 安裝Tracker
在這一步的安裝過程中,也要經(jīng)歷如下幾個安裝步驟。
1.將fastdfs-5.11.tar.gz安裝包上傳到CentOS的/opt目錄下。
2.解壓fastdfs-5.11.tar.gz安裝包。
3.進入fastdfs-5.11目錄,執(zhí)行make.sh腳本文件。
4.安裝成功將fastdfs-5.11安裝目錄下的conf目錄下的所有文件拷貝到/etc/fdfs/下。
2.FastDFS配置
2.1 Tracker配置
在這一步的安裝過程中,要經(jīng)歷如下幾個安裝步驟。
1.打開/etc/fdfs/目錄下的tracker.conf配置文件。
2.修改base_path屬性的值,將base_path屬性的取值設(shè)置成/home/fastdfs。
3.基礎(chǔ)目錄/home/fastdfs是不存在的,需要自行進行創(chuàng)建。
2.2 Storage配置
在這一步的安裝過程中,要經(jīng)歷如下幾個安裝步驟。
1.打開/etc/fdfs/目錄下的storage.conf配置文件。
2.修改base_path屬性、store_path0屬性和tracker_server屬性的取值。
3.創(chuàng)建store存放文件的目錄,需要自行創(chuàng)建。
3.啟動服務(wù)
啟動服務(wù)時要經(jīng)歷如下幾個小的步驟。
1.啟動tracker。
2.啟動storage。
3.查看所有運行的端口。
05 回顧總結(jié)
關(guān)于FastDFS安裝和配置的教程,袁老師就給同學(xué)們介紹到這里了,請大家趕緊去試一試能不能徒手搭建起一個FastDFS的開發(fā)環(huán)境吧。如果你還想繼續(xù)進行FastDFS后續(xù)內(nèi)容的學(xué)習(xí),接下來我們還會給大家繼續(xù)更新FastDFS的文件存儲、文件同步、文件訪問(文件上傳、文件下載)等相關(guān)知識的內(nèi)容,以及如何使用FastDFS解決大容量存儲和負(fù)載均衡的問題。
敬請各位期待哦,關(guān)注「袁庭新」公眾號,干貨天天都不斷!
