手把手教你搭建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/ 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.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命令。
接着執行./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,如下圖所示。
接着再創建三條軟鏈接,命令依次如下:
[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.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所有的命令,如下圖所示。