搭建FastDFS集羣(上)

       FastDFS是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。

       FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。

       下面來看一張官網提供的集羣圖片,如下圖所示。可以看到,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可以拿着這個地址進行訪問圖片。


         再看一張下載圖片的時序圖,步驟如下:

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.5、192.168.156.6、192.168.156.7、192.168.156.8、192.168.156.9、192.168.156.10、192.168.156.11、192.168.156.12。其中,192.168.156.5、192.168.156.6分別作爲tracker1和tracker2。192.168.156.7、192.168.156.8作爲group1,192.168.156.9、192.168.156.10作爲group2。我把192.168.156.11、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/ [email protected]:/usr/local/,這句命令的意思是,使用scp的方式將softWare及其下的文件都複製到192.168.156.6的/usr/local目錄下,如果192.168.156.6的/usr/local目錄下沒有softWare目錄,那麼會自動創建這麼一個目錄。」[email protected]」的意思是指定傳到哪個用戶組下面。由於當前都是操作的root用戶,因此也可以不用寫」[email protected]」。輸入命令並按回車後,會讓我們輸入是否繼續,我們輸入」yes」並回車,之後會讓我們輸入192.168.156.6的root用戶的密碼,我們輸入之後便開始上傳操作了(如果輸入scp命令後很久才能到提示 讓我們輸入yes/no,那麼我們可以在/etc/hosts文件中配置下所有要參與互相通信的ip和名稱的映射關係),如下圖所示。


      上傳完之後,我們到192.168.156.6的/usr/local目錄下查看一下,發現自動多了softWare目錄。 我們再進入softWare目錄內,發現確實已經複製過來了。同理,我們再向192.168.156.6、192.168.156.7、192.168.156.8、192.168.156.9、192.168.156.10這幾臺虛擬機複製這些安裝文件


7.安裝gcc,使用的命令:yum install make cmake gcc gcc-c++。192.168.156.6、192.168.156.7、192.168.156.8、192.168.156.9、192.168.156.10虛擬機也都安裝下gcc環境


8.最小化安裝是沒有zip和unzip命令的,所以需要安裝,安裝命令:yum install zip unzip。同樣,爲192.168.156.6、192.168.156.7、192.168.156.8、192.168.156.9、192.168.156.10也安裝zip和unzip命令


9.解壓libfastcommon-master.zip。使用命令:unzip libfastcommon-master.zip -d /usr/local/fast/。解壓到/usr/local/fast/是爲了便於管理。同理解壓192.168.156.6、192.168.156.7、192.168.156.8、192.168.156.9、192.168.156.10虛擬機中的該文件


10.安裝vim,之所以安裝vim是因爲安裝vim會自動幫我們安裝perl,否則我們使用./make.sh來編譯的時候會報錯,如下圖所示。


      安裝vim所使用命令:yum install vim-enhanced。同理在192.168.156.6、192.168.156.7、192.168.156.8、192.168.156.9、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.6、192.168.156.7、192.168.156.8、192.168.156.9、192.168.156.10虛擬機的相同目錄下也執行一遍


12.創建軟鏈接,我們從上圖中可以看到執行./make.sh install命令後把fastcommon安裝在了/usr/lib64下面,這個目錄不是我們常用的目錄,如果不實用軟鏈接的話,將來安裝的東西多了,它們的安裝目錄我們將比較難找到,不便於管理操作,爲了在我們熟悉的目錄下看到我們安裝的目錄,我們使用軟鏈接來實現。

       創建第一條軟鏈接的命令:ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so,如下圖所示。  

       接着再創建三條軟鏈接,命令依次如下:

[[email protected] lib]# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
[[email protected] lib]# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
[[email protected] lib]# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

      創建完軟鏈接之後,我們再查看軟鏈接,如下圖所示,發現有一條軟鏈接是紅色的,一閃一閃的,這是由於fastclient還未安裝造成的,隨着後續的安裝,這個報警會自動消失。同理,我們在192.168.156.6、192.168.156.7、192.168.156.8、192.168.156.9、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.6、192.168.156.7、192.168.156.8、192.168.156.9、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.6、192.168.156.7、192.168.156.8、192.168.156.9、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.7、192.168.156.8、192.168.156.9、192.168.156.10四臺虛擬機將作爲我們的存儲節點,四個節點中同一組的配置應該是相同的,也就是192.168.156.7、192.168.156.8一組(組名爲group1),192.168.156.9、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.7、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.8、192.168.156.9、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.7、192.168.156.8、192.168.156.9、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所有的命令,如下圖所示。