FastDFS是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。c++
FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。vim
下面來看一張官網提供的集羣圖片,以下圖所示。能夠看到,Client端能夠有多個,也就是同時支持多個客戶端對FastDFS集羣服務進行訪問,Tracker是跟蹤器,負責協調Client與Storage之間的交互,爲了實現高可用性,須要用多個Tracker來作爲跟蹤器。Storage是專門用來存儲東西的,並且是分組進行存儲的,每一組能夠有多臺設備,這幾臺設備存儲的內容徹底一致,這樣作也是爲了高可用性,當現有分組容量不夠時,咱們能夠水平擴容,即增長分組來達到擴容的目的。另外須要注意的一點是,若是一組中的設備容量大小不一致,好比設備A容量是80G,設備B的容量是100G,那麼這兩臺設備所在的組的容量會以小的容量爲準,也就是說,當存儲的東西大小超過80G時,咱們將沒法存儲到該組中了。Client端在與Storage進行交互的時候也與Tracker cluster進行交互,說的通俗點就是Storage向Tracker cluster進行彙報登記,告訴Tracker如今本身哪些位置還空閒,剩餘空間是多大。服務器
下面再來看一張上傳圖片的時序圖,從中能夠看到,Client想上傳圖片,它先向Tracker進行詢問,Tracker查看一下登記信息以後,告訴Client哪一個storage當前空閒,Tracker會把IP和端口號都返回給Client,Client在拿到IP和端口號以後,便再也不須要經過Tracker,直接便向Storage進行上傳圖片,Storage在保存圖片的同時,會向Tracker進行彙報,告訴Tracker它當前是否還留有剩餘空間,以及剩餘空間大小。彙報完以後,Storage將服務器上存儲圖片的地址返回給Client,Client能夠拿着這個地址進行訪問圖片。負載均衡
再看一張下載圖片的時序圖,步驟以下:tcp
1. client詢問tracker下載文件的storage,參數爲文件標識(卷名和文件名);
2. tracker返回一臺可用的storage;
3. client直接和storage通信完成文件下載。分佈式
下面咱們便來搭建一個FastDFS集羣,咱們搭建一個以下圖所示的集羣,總共須要8臺虛擬機。工具
操做步驟以下:性能
1.安裝8臺虛擬機(最小化安裝,你們能夠參考:http://blog.csdn.NET/u012453843/article/details/68947589這篇博客進行安裝)測試
2.給這8臺虛擬機配置靜態IP而且要能上網,你們能夠參考:http://blog.csdn.net/u012453843/article/details/52839105這篇博客進行配置,不過因爲如今是最小化安裝,是沒有安裝vim命令的,所以須要使用"vi"命令來修改文件。網站
3.配置好靜態IP以後,咱們使用XShell工具來操做虛擬機(由於真實環境中咱們是不大可能直接去操做服務器的,都是經過遠程鏈接工具來進行操做的)。以下圖所示,我使用的虛擬機分別是192.168.156.五、192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.十、192.168.156.十一、192.168.156.12。其中,192.168.156.五、192.168.156.6分別做爲tracker1和tracker2。192.168.156.七、192.168.156.8做爲group1,192.168.156.九、192.168.156.10做爲group2。我把192.168.156.十一、192.168.156.12做爲Nginx集羣多層負載均衡。多層負載均衡會生成一個虛擬IP,咱們最終會經過虛擬IP來訪問咱們的集羣。咱們先安裝tracker和group的六臺設備。
4.在192.168.156.5的"/usr/local/"目錄下新建一個"software"目錄,用來存放咱們的安裝文件。這樣作的好處是容易管理。以下圖所示
5.咱們一次性上傳咱們所須要的全部安裝文件,你們能夠到:這個地址進行下載。咱們使用XShell結合Xftp5進行上傳,關於如何結合你們能夠參考:http://blog.csdn.Net/u012453843/article/details/68951776這篇文件進行操做。以下圖所示。
6.咱們將192.168.156.5這臺設備上剛上傳的文件複製到其它設備上。咱們使用的命令是:scp -r /usr/local/software/ root@192.168.156.6:/usr/local/,這句命令的意思是,使用scp的方式將softWare及其下的文件都複製到192.168.156.6的/usr/local目錄下,若是192.168.156.6的/usr/local目錄下沒有softWare目錄,那麼會自動建立這麼一個目錄。"root@"的意思是指定傳到哪一個用戶組下面。因爲當前都是操做的root用戶,所以也能夠不用寫"root@"。輸入命令並按回車後,會讓咱們輸入是否繼續,咱們輸入"yes"並回車,以後會讓咱們輸入192.168.156.6的root用戶的密碼,咱們輸入以後便開始上傳操做了(若是輸入scp命令後好久才能到提示 讓咱們輸入yes/no,那麼咱們能夠在/etc/hosts文件中配置下全部要參與互相通訊的ip和名稱的映射關係),以下圖所示。
上傳完以後,咱們到192.168.156.6的/usr/local目錄下查看一下,發現自動多了softWare目錄。 咱們再進入softWare目錄內,發現確實已經複製過來了。同理,咱們再向192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10這幾臺虛擬機複製這些安裝文件。
7.安裝gcc,使用的命令:yum install make cmake gcc gcc-c++。在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10虛擬機也都安裝下gcc環境。
8.最小化安裝是沒有zip和unzip命令的,因此須要安裝,安裝命令:yum install zip unzip。一樣,爲192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10也安裝zip和unzip命令。
9.解壓libfastcommon-master.zip。使用命令:unzip libfastcommon-master.zip -d /usr/local/fast/。解壓到/usr/local/fast/是爲了便於管理。同理解壓192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10虛擬機中的該文件。
10.安裝vim,之因此安裝vim是由於安裝vim會自動幫咱們安裝perl,不然咱們使用./make.sh來編譯的時候會報錯,以下圖所示。
安裝vim所使用命令:yum install vim-enhanced。同理在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10虛擬機也安裝vim命令。
11.編譯libfastcommon-master,咱們到/usr/local/fast/libfastcommon-master目錄下,使用命令:./make.sh來進行編譯。
接着執行./make.sh install命令。以下圖所示。(咱們把./make.sh和./make.sh install命令在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10虛擬機的相同目錄下也執行一遍)
12.建立軟連接,咱們從上圖中能夠看到執行./make.sh install命令後把fastcommon安裝在了/usr/lib64下面,這個目錄不是咱們經常使用的目錄,若是不實用軟連接的話,未來安裝的東西多了,它們的安裝目錄咱們將比較難找到,不便於管理操做,爲了在咱們熟悉的目錄下看到咱們安裝的目錄,咱們使用軟連接來實現。
建立第一條軟連接的命令:ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so,以下圖所示。
接着再建立三條軟連接,命令依次以下:
[root@itcast05 lib]# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
[root@itcast05 lib]# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
[root@itcast05 lib]# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
建立完軟連接以後,咱們再查看軟連接,以下圖所示,發現有一條軟連接是紅色的,一閃一閃的,這是因爲fastclient還未安裝形成的,隨着後續的安裝,這個報警會自動消失。同理,咱們在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10上也建立一樣的軟連接。
13.安裝FastDFS,咱們先到/usr/local/softWare/目錄下,而後使用命令:tar -zxvf FastDFS_v5.05.tar.gz -C /usr/local/fast/進行解壓,以下圖所示。
解壓完後,咱們進入到/usr/local/fast/fastDFS/目錄下,依次執行./make.sh和./make.sh install命令進行安裝。以下圖所示,同理,咱們在192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10上也進行與第13步一樣的安裝操做。
14.由於FastDFS服務腳本設置的bin目錄爲/usr/local/bin/下,可是實際咱們安裝在了/usr/bin/下面。因此咱們須要修改FastDFS配置文件中的路徑,也就是須要修改倆 個配置文件: 命令:vim /etc/init.d/fdfs_storaged 輸入一個":",而後輸入全局替換命令:%s+/usr/local/bin+/usr/bin並按回車便可完成替換,替換完以後,保存退出該文件,而後再打開看一下是否都已經將/usr/local/bin替換成/usr/bin了。一樣的步驟,輸入第二條命令:vim /etc/init.d/fdfs_trackerd 進行全局替換,替換命令:%s+/usr/local/bin+/usr/bin。一樣爲192.168.156.六、192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10進行替換操做。
15.前面作的都是公共部分的配置,下面咱們來配置tracker1(192.168.156.5)和tracker2(192.168.156.6)。咱們先到/etc/fdfs/目錄下,使用cp tracker.conf.sample tracker.conf複製一份tracker.conf.sample並改名爲tracker.conf。
編輯tracker.conf文件,須要修改的地方有兩處,第一處:base_path,將默認的路徑修改成/fastdfs/tracker。第二處:store_lookup,該值默認是2(即負載均衡策略),如今把它修改成0(即輪詢策略,修改爲這樣方便一下子咱們進行測試,固然,最終仍是要改回到2的。若是值爲1的話代表要始終向某個group進行上傳下載操做,這時下圖中的"store_group=group2"纔會起做用,若是值是0或2,則"store_group=group2"不起做用)。
因爲192.168.156.6和192.168.156.5的tracker配置是同樣的,所以咱們只須要將192.168.156.5上配置好的tracker.conf文件複製一份到192.168.156.6上。使用的命令:scp tracker.conf 192.168.156.6:/etc/fdfs/
複製完以後,咱們到192.168.156.6的/etc/fdfs/目錄下查看一下是否已經有tracker.conf文件了,以下圖所示,咱們發現已經有該文件而且配置徹底同樣。
因爲咱們給base_path配置的路徑/fastdfs/tracker當前並不存在,所以咱們須要在192.168.156.5和192.168.156.6上建立一下該目錄,建立命令:mkdir -p /fastdfs/tracker,其中-p表示遞歸建立目錄。
配置完了tracker1和tracker2,如今咱們來啓動兩個tracker。咱們先到咱們剛建立的/fastdfs/tracker/目錄下,發現當前該目錄下什麼也沒有,以下圖所示。
在啓動前,咱們須要先在192.168.156.5和192.168.156.6這兩臺設備上配置一下防火牆,添加端口22122,從而可讓其它設備能夠訪問22122端口。添加的內容:-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT,以下圖所示(注意全部的例子都是以一個爲例,其它照着操做就能夠了)。
添加完以後,咱們重啓防火牆,以下圖所示。
下面咱們便使用命令:/etc/init.d/fdfs_trackerd start 進行啓動,啓動以後,咱們再查看該目錄,發現多了兩個目錄data和logs,咱們能夠經過命令:ps -ef | grep fdfs來查看tracker是否正常啓動,以下圖所示。同理,咱們啓動一下192.168.156.6上的tracker。
若是想要中止tracker的話,就使用命令/etc/init.d/fdfs_trackerd stop。
16.配置storage,按照咱們的規劃,192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10四臺虛擬機將做爲咱們的存儲節點,四個節點中同一組的配置應該是相同的,也就是192.168.156.七、192.168.156.8一組(組名爲group1),192.168.156.九、192.168.156.10一組(組名爲group2)。
首先,進入4臺機器的配置文件目錄/etc/fdfs,而後進行復制storage.conf.sample並改名爲storage.conf,使用的命令:cp storage.conf.sample storage.conf,以下圖所示
接下來咱們編輯storage.conf文件,對於group1的192.168.156.七、192.168.156.8這兩臺設備須要修改的配置以下。
base_path=/fastdfs/storage
store_path0=/fastdfs/storage
tracker_server=192.168.156.5:22122
tracker_server=192.168.156.6:22122
修改完後,以下圖所示。
配置完了192.168.156.7,接下來咱們把storage.conf文件複製到192.168.156.八、192.168.156.九、192.168.156.10這三臺設備上。其中192.168.156.8這臺設備與192.168.156.7同屬於group1,所以把配置文件放到它的/etc/fdfs/目錄後不用作任何修改。可是192.168.156.9和192.168.156.10這兩臺設備須要修改一下,修改也很是簡單,只須要把group_name由group1改成group2就能夠了,以下圖所示。
因爲四個配置文件的base_path=/fastdfs/storage和store_path0=/fastdfs/storage都配置成了/fastdfs/storage,可是目前咱們這四臺虛擬機還未建立過該目錄,所以咱們須要爲這四臺虛擬機都建立一下該目錄,命令:mkdir -p /fastdfs/storage,以下圖所示。
啓動storage以前,咱們須要先對192.168.156.七、192.168.156.八、192.168.156.九、192.168.156.10這四臺虛擬機的防火牆作下配置,添加端口2300,添加語句:-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT,以下圖所示。
配置完防火牆以後,咱們重啓下這四臺虛擬機的防火牆,以下圖所示。
配置完防火牆以後,咱們到storage所在的四臺虛擬機的/fastdfs/storage目錄下,使用命令:/etc/init.d/fdfs_storaged start進行啓動,而後使用命令:tailf logs/storaged.log來查看啓動信息,以下圖所示(192.168.156.7這臺虛擬機的操做圖)。能夠看到,192.168.156.7這臺設備成功與兩個tracker設備鏈接了,其中選舉了192.168.156.6做爲tracker集羣的leader。192.168.156.7和192.168.156.8這兩臺虛擬機同屬一個分組(group1),所以能夠從下圖的信息中看到成功與192.168.156.8鏈接的信息。
下圖是192.168.156.8的啓動信息。看到信息幾乎同樣,只是最後一行顯示的是成功與192.168.156.7鏈接(由於它們同屬一組)
下圖是192.168.156.9的啓動信息。看到的tracker的信息與group1的兩臺設備同樣,只是這臺設備與192.168.156.10屬於group2,因此它鏈接的設備是192.168.156.10。
下圖是192.168.156.10的啓動信息,從下面能夠看到成功與tracker還有192.168.156.9鏈接了。
看到上面的信息,說明咱們的tracker和storage集羣搭建好了,下面咱們測試一下tracker的高可用性,從上圖咱們能夠看到192.168.156.6這臺設備是做爲tracker的leader的,咱們如今人爲關掉192.168.156.6的tracker。以下圖所示。
關掉192.168.156.6的tracker以後,咱們再看看storage所在的四臺虛擬機的日誌信息。以下圖所示,能夠看到192.168.156.5自動切換成leader角色了,並且顯示連不上192.168.156.6了(由於已經關了tracker了,因此都連不上了)。
下面咱們再啓動192.168.156.6上的tracker,以下圖所示。
啓動後,再看看四臺設備的日誌信息,以下圖所示,能夠看到,都從新鏈接上該tracker了。只不過此時tracker的leader依然是192.168.156.5。
當咱們全部的tracker和storage節點都啓動成功以後,咱們能夠在任意的一個存儲節點上查看存儲集羣的信息,命令:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf,能夠看到以下圖所示的集羣信息。能夠看到tracker Server有兩個,當前提供服務的是192.168.156.5,group的數量是2,第一組的IP有192.168.156.7和192.168.156.8,第二組的IP有192.168.156.9和192.168.156.10,與咱們規劃的集羣徹底一致。
可使用命令cd /usr/bin/ && ls | grep fdfs來查看fdfs全部的命令,以下圖所示。