1. 程式人生 > >搭建一個FastDFS 5.0.5的檔案伺服器

搭建一個FastDFS 5.0.5的檔案伺服器

參照文章https://www.linuxidc.com/Linux/2016-09/135537.htm以及https://www.cnblogs.com/geeek/p/5028328.html

摘自:http://www.oschina.net/p/fastdfs 
FastDFS是一個開源的分散式檔案系統,她對檔案進行管理,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題。特別適合以檔案為載體的線上服務,如相簿網站、視訊網站等等。

FastDFS服務端有兩個角色:跟蹤器(tracker)和儲存節點(storage)。跟蹤器主要做排程工作,在訪問上起負載均衡的作用。

儲存節點儲存檔案,完成檔案管理的所有功能:儲存、同步和提供存取介面,FastDFS同時對檔案的meta data進行管理。所謂檔案的meta data就是檔案的相關屬性,以鍵值對(key value pair)方式表示,如:width=1024,其中的key為width,value為1024。檔案meta data是檔案屬性列表,可以包含多個鍵值對。

第一步就是下載FashDFS.

   1、直接使用命令下載

wget  https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
tar -zxvf V5.05.tar.gz 
cd fastdfs-5.05/
./make.sh
./make.sh install

2、去這裡下載https://linux.linuxidc.com/index.php?folder=MjAxN8Tq18rBzy811MIvMTDI1S9DZW50T1MgN8/CRmFzdERGU7fWsrzKvc7EvP63/s7xxve07r2oyrXVvQ==

然後還是上面的命令,解壓往下。

不過這裡會碰到一個問題。解壓完之後./make.sh,出錯

解決辦法:安裝libfastcommon類庫

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
wget https://github.com/happyfish100/libfastcommon/archive/master.zip
unzip master.zip
cd libfastcommon-master
./make.sh
./make.sh install

安裝這個類庫之後繼續執行上次的命令,不報錯了,完成。

繼續下一步:在log中我們可以發現安裝路徑:

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

cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

至此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

這個命令執行成功了,但是沒有生成相應的檔案,也沒有埠監聽。

最後使用下面的命令成功:

 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

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

netstat -unltp|grep fdfs

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

 

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目錄 。

但是這個執行完之後發現只有log檔案。

同理,如果啟動成功,/opt/fastdfs_storage中就可以看到啟動後新生成的data和logs目錄,埠23000也應被正常監聽,還有一點就是檔案儲存路徑下會生成多級儲存目錄,那麼接下來看看是否啟動成功了: 
這裡寫圖片描述

如上圖,貌似沒成功啊,因為啟動storage後文件都沒生成,為了確認我們看一下storage的埠情況: 
這裡寫圖片描述

果然是沒啟動成功!埠目前還是隻監聽了一個,storage的23000埠並未被監聽,那麼我們只能去日誌檔案中找原因了,進入/opt/fastdfs_storage/logs目錄下並開啟storaged.log檔案: 

如上圖,可以看到確實有一個error,關鍵資訊是:

ip地址寫的是公網的地址,所以報錯

修改ip為內網的地址後再次重啟storage服務,然後再看看data目錄和實際儲存檔案的/opt/fastdfs_storage_data: 

如上圖,可以看到/opt/fastdfs_storage/data目錄下生成好的pid檔案和dat檔案,那麼再看一下實際檔案儲存路徑下是否有建立好的多級目錄呢: 

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

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

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

[[email protected] /]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf 
[2016-09-23 12:59:26] DEBUG - base_path=/opt/fastdfs_storage, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

server_count=1, server_index=0

tracker server is 192.168.111.11:22122

group count: 1

Group 1: 
group name = group1 
disk total space = 6818 MB 
disk free space = 2169 MB 
trunk free space = 0 MB 
storage server count = 1 
active server count = 1 
storage server port = 23000 
storage HTTP port = 8888 
store path count = 1 
subdir count per path = 256 
current write server index = 0 
current trunk file id = 0

Storage 1: 
id = 192.168.111.11 
ip_addr = 192.168.111.11 ACTIVE 
http domain = 
version = 5.05 
join time = 2016-09-23 11:15:54 
up time = 2016-09-23 12:33:26 
total storage = 6818 MB 
free storage = 2169 MB 
upload priority = 10 
store_path_count = 1 
subdir_count_per_path = 256 
storage_port = 23000 
storage_http_port = 8888 
current_write_path = 0 
source storage id = 
if_trunk_server = 0 
connection.alloc_count = 256 
connection.current_count = 0 
connection.max_count = 0 
total_upload_count = 0 
success_upload_count = 0 
total_append_count = 0 
success_append_count = 0 
total_modify_count = 0 
success_modify_count = 0 
total_truncate_count = 0 
success_truncate_count = 0 
total_set_meta_count = 0 
success_set_meta_count = 0 
total_delete_count = 0 
success_delete_count = 0 
total_download_count = 0 
success_download_count = 0 
total_get_meta_count = 0 
success_get_meta_count = 0 
total_create_link_count = 0 
success_create_link_count = 0 
total_delete_link_count = 0 
success_delete_link_count = 0 
total_upload_bytes = 0 
success_upload_bytes = 0 
total_append_bytes = 0 
success_append_bytes = 0 
total_modify_bytes = 0 
success_modify_bytes = 0 
stotal_download_bytes = 0 
success_download_bytes = 0 
total_sync_in_bytes = 0 
success_sync_in_bytes = 0 
total_sync_out_bytes = 0 
success_sync_out_bytes = 0 
total_file_open_count = 0 
success_file_open_count = 0 
total_file_read_count = 0 
success_file_read_count = 0 
total_file_write_count = 0 
success_file_write_count = 0 
last_heart_beat_time = 2016-09-23 12:58:59 
last_source_update = 1970-01-01 08:00:00 
last_sync_update = 1970-01-01 08:00:00 
last_synced_timestamp = 1970-01-01 08:00:00

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

service fdfs_storage start

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

初步測試

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

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

配置完成後就可以模擬檔案上傳了,先給/opt目錄下放一張圖片(暴雪爸爸的LOGO): 
這裡寫圖片描述

然後通過執行客戶端上傳命令嘗試上傳:

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /opt/BLIZZARD.jpg

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

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

同時在之前配置的storage伺服器的實際檔案儲存路徑中也可以根據返回的路徑找到實際檔案: 
這裡寫圖片描述

接下來嘗試用瀏覽器傳送HTTP請求訪問一下檔案: 
這裡寫圖片描述

此時發現並不能訪問,因為FastDFS目前已不支援http協議,我們在FastDFS 4.0.5的版本更新日誌中可以看到這樣一條資訊: 
這裡寫圖片描述

如上圖,4.0.5版本開始移除了自帶的HTTP支援(因為之前自帶的HTTP服務較為簡單,無法提供負載均衡等高效能服務),所以餘大提供了nginx上使用FastDFS的模組fastdfs-nginx-module,下載地址如下:https://github.com/happyfish100/fastdfs-nginx-module,這樣做最大的好處就是提供了HTTP服務並且解決了group中storage伺服器的同步延遲問題,接下來就具體記錄一下fastdfs-nginx-module的安裝配置過程。

fastdfs-nginx-module

在餘大的GitHub上下載好fastdfs-nginx-module上傳到我們的CentOS中就可以開始安裝了,在安裝nginx之前需要先安裝一些模組依賴的lib庫,我在以前寫的文章有做詳細介紹(Linux CentOS 7 & Tengine(Nginx)安裝與配置),直接貼出安裝程式碼:

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

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

storage nginx

首先是為storage伺服器安裝nginx,首先將nginx和fastdfs-nginx-module的安裝包上傳至CentOS: 
這裡寫圖片描述

首先分別進行解壓:

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

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

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

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

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

make
make install

安裝完成後,我們在我們指定的目錄/usr/local/nginx中就可以看到nginx的安裝目錄了: 
這裡寫圖片描述

接下來要修改一下nginx的配置檔案,進入conf目錄並開啟nginx.conf檔案加入以下配置:

listen       9999;

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

然後進入FastDFS的安裝目錄/usr/local/fastdfs-5.05目錄下的conf目錄,將http.confmime.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/

看一下/etc/fdfs目錄下當前所有的配置檔案: 
這裡寫圖片描述

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

  1. base_path=/opt/fastdfs_storage #儲存日誌目錄
  2. tracker_server=192.168.111.11:22122 #tracker伺服器的IP地址以及埠號
  3. storage_server_port=23000 #storage伺服器的埠號
  4. url_have_group_name = true #檔案 url 中是否有 group 名
  5. store_path0=/opt/fastdfs_storage_data # 儲存路徑
  6. 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已啟動成功: 
這裡寫圖片描述

通過瀏覽器也可以看到nginx的主頁: 
這裡是在伺服器上,然後沒有看到nginx的主頁。繼續往下就行

storage伺服器的nginx就已經安裝完畢,接下來看一下tracker伺服器的nginx安裝。

tracker nginx

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

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

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

# 放在http上
upstream fdfs_group1 {
     server 127.0.0.1:9999;
}

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

接下來啟動nginx2:

/usr/local/nginx2/sbin/nginx

此時訪問nginx2的主頁,由於沒有修改埠,直接訪問ip地址即可: 

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

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

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

HTTP測試

再給/opt目錄下上傳一張暴雪爸爸的LOGO圖: 
這裡寫圖片描述

通過客戶端命令測試上傳: 
這裡寫圖片描述

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

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