1. 程式人生 > >centos7下fastDFS分散式檔案伺服器的搭建

centos7下fastDFS分散式檔案伺服器的搭建

基礎概念

首先簡單瞭解一下基礎概念,FastDFS是一個開源的輕量級分散式檔案系統,由跟蹤伺服器(tracker server)、儲存伺服器(storage server)和客戶端(client)三個部分組成,主要解決了海量資料儲存問題,特別適合以中小檔案(建議範圍:4KB < file_size <500MB)為載體的線上服務。

Tracker(跟蹤器)

Tracker主要做排程工作,相當於mvc中的controller的角色,在訪問上起負載均衡的作用。跟蹤器和儲存節點都可以由一臺或多臺伺服器構成,跟蹤器和儲存節點中的伺服器均可以隨時增加或下線而不會影響線上服務,其中跟蹤器中的所有伺服器都是對等的,可以根據伺服器的壓力情況隨時增加或減少。Tracker負責管理所有的Storage和group,每個storage在啟動後會連線Tracker,告知自己所屬的group等資訊,並保持週期性的心跳,tracker根據storage的心跳資訊,建立group==>[storage server list]的對映表,Tracker需要管理的元資訊很少,會全部儲存在記憶體中;另外tracker上的元資訊都是由storage彙報的資訊生成的,本身不需要持久化任何資料,這樣使得tracker非常容易擴充套件,直接增加tracker機器即可擴充套件為tracker cluster來服務,cluster裡每個tracker之間是完全對等的,所有的tracker都接受stroage的心跳資訊,生成元資料資訊來提供讀寫服務。

Storage(儲存節點)

Storage採用了分卷[Volume](或分組[group])的組織方式,儲存系統由一個或多個組組成,組與組之間的檔案是相互獨立的,所有組的檔案容量累加就是整個儲存系統中的檔案容量。一個卷[Volume](組[group])可以由一臺或多臺儲存伺服器組成,一個組中的儲存伺服器中的檔案都是相同的,組中的多臺儲存伺服器起到了冗餘備份和負載均衡的作用,資料互為備份,儲存空間以group內容量最小的storage為準,所以建議group內的多個storage儘量配置相同,以免造成儲存空間的浪費。

相關資源

安裝

libfastcommon

因為libfastcommon使用c語言寫的,所以我們先要安裝gcc編譯器:

yum -y install gcc-c++

看到如圖(1)的資訊說明gcc已經安裝成功:
這裡寫圖片描述

圖(1)

如果沒有裝解壓工具unzip可以通過以下yum命令進行安裝後再解壓:
yum -y install unzip zip

首先第一步是安裝libfastcommon,我這裡將libfastcommon上傳到的/usr/local目錄下,直接解壓:

unzip libfastcommon-master.zip

解壓完成後就可以進行編譯安裝了,進入libfastcommon-master目錄分別執行

./make.sh

沒有error資訊的話就說明編譯成功了,最後再執行

./make.sh install

進行安裝。
ibfastcommon.so 預設安裝到了/usr/lib64/libfastcommon.so,但是FastDFS主程式設定的lib目錄是/usr/local/lib,所以此處需要重新設定軟連結(類似於Windows的快捷方式):

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

設定完畢後就可以開始安裝fastdfs了。

FastDFS

第一步依然是解壓:

tar -zxvf fastdfs-5.05.tar.gz
解壓完成後進入目錄fastdfs-5.05,依次執行./make.sh./make.sh install

./make.sh
./make.sh install

這裡寫圖片描述

圖(2)

沒有報錯就說明安裝成功了,在log中我們可以發現安裝路徑:
這裡寫圖片描述
圖(3)

沒錯,正是安裝到了/etc/fdfs中,安裝成功後就會生成如上的3個.sample檔案(示例配置檔案),我們再分別拷貝出3個後面用的正式的配置檔案:
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

再檢視一下/etc/fdfs的檔案目錄:
這裡寫圖片描述

圖(4)

至此FastDFS已經安裝完畢,接下來的工作就是依次配置Tracker和Storage了。

Tracker

在配置Tracker之前,首先需要建立Tracker伺服器的檔案路徑,即用於儲存Tracker的資料檔案和日誌檔案等,我這裡選擇在/opt目錄下建立一個fastdfs_tracker目錄用於存放Tracker伺服器的相關檔案:

mkdir /opt/fastdfs_tracker

接下來就要重新編輯上一步準備好的/etc/fdfs目錄下的tracker.conf配置檔案,開啟檔案後依次做以下修改:

disabled=false #啟用配置檔案(預設啟用)
port=22122 #設定tracker的埠號,通常採用22122這個預設埠
base_path=/opt/fastdfs_tracker #設定tracker的資料檔案和日誌目錄
http.server_port=6666 #設定http埠號,預設為8080

配置完成後就可以啟動Tracker伺服器了,但首先依然要為啟動指令碼建立軟引用,因為fdfs_trackerd等命令在/usr/local/bin中並沒有,而是在/usr/bin路徑下:

ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin

最後通過命令啟動Tracker伺服器:

service fdfs_trackerd start

如果啟動命令執行成功,那麼同時在剛才建立的tracker檔案目錄/opt/fastdfs_tracker中就可以看到啟動後新生成的data和logs目錄,tracker服務的埠也應當被正常監聽,最後再通過netstat命令檢視一下埠監聽情況:

netstat -unltp|grep fdfs

可以看到tracker服務執行的22122埠正常被監聽。
確認tracker正常啟動後可以將tracker設定為開機啟動,開啟/etc/rc.d/rc.local並在其中加入以下配置:

service fdfs_trackerd start

這裡寫圖片描述

圖(5)

Tracker至此就配置好了,接下來就可以配置FastDFS的另一核心——Storage。

Storage

步驟基本與配置Tracker一致,首先是建立Storage伺服器的檔案目錄,需要注意的是同Tracker相比我多建了一個目錄,因為Storage還需要一個檔案儲存路徑,用於存放接收的檔案:

mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data

接下來修改/etc/fdfs目錄下的storage.conf配置檔案,開啟檔案後依次做以下修改:

disabled=false #啟用配置檔案(預設啟用)
group_name=group1 #組名,根據實際情況修改
port=23000 #設定storage的埠號,預設是23000,同一個組的storage埠號必須一致
base_path=/opt/fastdfs_storage #設定storage資料檔案和日誌目錄
store_path_count=1 #儲存路徑個數,需要和store_path個數匹配
store_path0=/opt/fastdfs_storage_data #實際檔案儲存路徑
tracker_server=10.211.55.5:22122 #tracker 伺服器的 IP地址和埠號,如果是單機搭建,IP不要寫127.0.0.1,否則啟動不成功(此處的ip是我的CentOS虛擬機器ip)
http.server_port=8888 #設定 http 埠號

配置完成後同樣要為Storage伺服器的啟動指令碼設定軟引用:

ln -s /usr/bin/fdfs_storaged /usr/local/bin

接下來就可以啟動Storage服務了:

service fdfs_storaged start

如果啟動成功,/opt/fastdfs_storage中就可以看到啟動後新生成的data和logs目錄
這裡寫圖片描述

圖(6)

如圖(6),沒有任何問題,data下有256個1級目錄,每級目錄下又有256個2級子目錄,總共65536個檔案,新寫的檔案會以hash的方式被路由到其中某個子目錄下,然後將檔案資料直接作為一個本地檔案儲存到該目錄中。那麼最後我們再看一下storage服務的埠監聽情況:
這裡寫圖片描述
圖(7)

如圖(7),可以看到此時已經正常監聽tracker的22122埠和storage的23000埠,至此storage伺服器就已經配置完成,確定了storage伺服器啟動成功後,還有一項工作就是看看storage伺服器是否已經登記到 tracker伺服器(也可以理解為tracker與storage是否整合成功),執行以下命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

這裡寫圖片描述

圖(8)

如圖(8)所示,看到10.211.55.5 ACTIVE 字樣即可說明storage伺服器已經成功登記到了tracker伺服器,同理別忘了新增開機啟動,開啟/etc/rc.d/rc.local並將如下配置追加到檔案中:
service fdfs_storage start

至此我們就已經完成了fastdfs的全部配置,此時也就可以用客戶端工具進行檔案上傳下載的測試了。

初步測試

測試時需要設定客戶端的配置檔案,編輯/etc/fdfs目錄下的client.conf 檔案,開啟檔案後依次做以下修改:

base_path=/opt/fastdfs_tracker #tracker伺服器檔案路徑
tracker_server=192.168.111.11:22122 #tracker伺服器IP地址和埠號
http.tracker_server_port=6666 # tracker 伺服器的 http 埠號,必須和tracker的設定對應起來

配置完成後就可以模擬檔案上傳了,先給/opt目錄下隨便放個檔案(簡歷.pdf)。
然後通過執行客戶端上傳命令嘗試上傳:

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /opt/簡歷.pdf

執行後可以發現給我們返回了一個路徑:
這裡寫圖片描述

圖(9)

這就表示我們的檔案已經上傳成功了,當檔案儲存到某個子目錄後,即認為該檔案儲存成功,接下來會為該檔案生成一個檔名,檔名由group、儲存目錄、兩級子目錄、fileid、檔案字尾名(由客戶端指定,主要用於區分檔案型別)拼接而成,我們到對應目錄下也能找到對應的檔案:
這裡寫圖片描述
圖(10)

但是此時並不能通過http訪問,因為FastDFS目前已不支援http協議,所以此處在nginx上使用FastDFS的模組fastdfs-nginx-module,這樣做最大的好處就是提供了HTTP服務並且解決了group中storage伺服器的同步延遲問題,接下來就具體記錄一下fastdfs-nginx-module的安裝配置過程。

fastdfs-nginx-module

在安裝nginx之前需要先安裝一些模組依賴的lib庫,直接貼出安裝程式碼:

yum -y install pcre pcre-devel  
yum -y install zlib zlib-devel  
yum -y install openssl openssl-devel

依次裝好這些依賴之後就可以開始安裝nginx了。

storage nginx

首先分別進行解壓:

tar -zxvf nginx-1.13.0.tar.gz
unzip fastdfs-nginx-module-master.zip

解壓成功後就可以編譯安裝nginx了,進入nginx目錄並輸入以下命令進行配置:

./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module-master/src

配置成功後會看到如下資訊:
這裡寫圖片描述

圖(11)

緊接著就可以進行編譯安裝了,依次執行以下命令:
make
make install

安裝完成後,可以看到/usr/local/下新增了一個nginx目錄,這就是剛才新安裝的nginx的目錄。
接下來要修改一下nginx的配置檔案,進入conf目錄並修改nginx.conf,把listen埠為80的server改為:

    server {
    listen       9999;

        location ~/group1/M00 {
            root /opt/fastdfs_storage_data/data;
            ngx_fastdfs_module;
     }
    }

然後進入FastDFS的安裝目錄/usr/local/fastdfs-5.05目錄下的conf目錄,將http.conf和mime.types拷貝到/etc/fdfs目錄下:

cp -r /usr/local/fastdfs-5.05/conf/http.conf /etc/fdfs/
cp -r /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs/

接下來還需要把fastdfs-nginx-module安裝目錄中src目錄下的mod_fastdfs.conf也拷貝到/etc/fdfs目錄下:

cp -r /usr/local/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/

沒什麼問題,接下來就需要編輯剛拷貝的這個mod_fastdfs.conf檔案了,開啟mod_fastdfs.conf並按順序依次編譯以下內容:

base_path=/opt/fastdfs_storage #儲存日誌目錄
tracker_server=10.211.55.5:22122 #tracker伺服器的IP地址以及埠號
storage_server_port=23000 #storage伺服器的埠號
url_have_group_name = true #檔案 url 中是否有 group 名
store_path0=/opt/fastdfs_storage_data # 儲存路徑
group_count = 3 #設定組的個數,事實上這次只使用了group1

設定了group_count = 3,接下來就需要在檔案尾部追加這3個group setting:

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

接下來還需要建立 M00 至儲存目錄的符號連線:

ln  -s  /opt/fastdfs_storage_data/data  /opt/fastdfs_storage_data/data/M00

最後啟動nginx:

/usr/local/nginx/sbin/nginx

顯示如下資訊說明nginx已啟動成功:
這裡寫圖片描述

圖(12)

通過瀏覽器也可以看到nginx的主頁:
這裡寫圖片描述
圖(13)

如果訪問不了,先ping一下自己的ip,如果能ping通,說明是防火牆的問題,在防火牆上開啟對應埠就可以了:
/sbin/iptables -I INPUT -p tcp --dport 9999 -j ACCEPT

其他埠以此類推。
如果ping不通ip說明nginx配置不正確,或者ip不對。
storage伺服器的nginx就已經安裝完畢,接下來看一下tracker伺服器的nginx安裝。

tracker nginx

同理,再裝一個nginx,目錄命名為nginx2,安裝路徑依舊放在/usr/local下,由於和之前一樣,此處就不再做詳細解釋:

mkdir nginx2
cd nginx-1.13.0/
./configure --prefix=/usr/local/nginx2 --add-module=/usr/local/fastdfs-nginx-module-master/src
make
make install

接下來依然是修改nginx2的配置檔案,進入conf目錄並開啟nginx.conf檔案加入以下配置,tracker的nginx無需修改listen埠,即預設的80埠,並將upstream指向storage的nginx地址,在http節點下新增:

upstream fdfs_group1 {
     server 127.0.0.1:9999;
}

在server節點下新增:

location /group1/M00 {
     proxy_pass http://fdfs_group1;
}

接下來啟動nginx2:

/usr/local/nginx2/sbin/nginx

最後一步就是需要修改/etc/fdfs目錄下的client.conf檔案,開啟該檔案並加入以下配置:

base_path=/opt/fastdfs_storage  #日誌存放路徑
tracker_server=10.211.55.5:22122  #tracker 伺服器 IP 地址和埠號
http.tracker_server_port=6666  # tracker 伺服器的 http 埠號,必須和tracker的設定對應起來

至此關於fastdfs就已經全部配置完畢了,再一次進行測試看看是否能正常上傳檔案並通過http訪問檔案。

HTTP測試

再給/opt目錄下上傳一張圖片(timg.jpg)
通過客戶端命令測試上傳:
這裡寫圖片描述

圖(14)

如圖(14),依舊上傳成功,接下來的關鍵就是通過HTTP測試檔案訪問,開啟瀏覽器輸入ip地址+檔名看看是否能正常訪問該圖片:
這裡寫圖片描述
圖(15)

一切正常~ 至此關於FastDFS在CentOS 7下的部署測試就已經全部完成了。

參考文章