天天看點

CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建

  • FastDFS介紹
      • 1.FastDFS是什麼
      • 2.FastDFS架構
      • 3.Tracker叢集
      • 4.Storage叢集
      • 5.Storage狀态收集
      • 6.檔案上傳、下載下傳流程
  • FastDFS伺服器搭建
      • 1.安裝libfastcommon
      • 2.安裝FastDFS
      • 3.配置Tracker
      • 4.配置Storage
      • 5.測試
      • 6.安裝fastdfs-nginx-module
        • a.storage nginx
        • b.tracker nginx
        • c.http測試

FastDFS介紹

1.FastDFS是什麼

FastDFS是用c語言編寫的一款開源的分布式檔案系統。FastDFS為網際網路量身定制,充分考慮了備援備份、負載均衡、線性擴容等機制,并注重高可用、高性能等名額,使用FastDFS很容易搭建一套高性能的檔案伺服器叢集提供檔案上傳、下載下傳等服務。

2.FastDFS架構

FastDFS架構包括 Tracker server和Storage server。用戶端請求Tracker server進行檔案上傳、下載下傳,通過Tracker server排程最終由Storage server完成檔案上傳和下載下傳。

Tracker server作用是負載均衡和排程,通過Tracker server在檔案上傳時可以根據一些政策找到Storage server提供檔案上傳服務。可以将tracker稱為追蹤伺服器或排程伺服器。

Storage server作用是檔案存儲,用戶端上傳的檔案最終存儲在Storage伺服器上,Storage server沒有實作自己的檔案系統而是利用作業系統 的檔案系統來管理檔案。可以将storage稱為存儲伺服器。

CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建

3.Tracker叢集

FastDFS叢集中的Tracker server可以有多台,Tracker server之間是互相平等關系同時提供服務,Tracker server不存在單點故障。用戶端請求Tracker server采用輪詢方式,如果請求的tracker無法提供服務則換另一個tracker。

4.Storage叢集

Storage叢集采用了分組存儲方式。storage叢集由一個或多個組構成,叢集存儲總容量為叢集中所有組的存儲容量之和。一個組由一台或多台存儲伺服器組成,組内的Storage server之間是平等關系,不同組的Storage server之間不會互相通信,同組内的Storage server之間會互相連接配接進行檔案同步,進而保證同組内每個storage上的檔案完全一緻的。一個組的存儲容量為該組記憶體儲伺服器容量最小的那個,由此可見組記憶體儲伺服器的軟硬體配置最好是一緻的。

采用分組存儲方式的好處是靈活、可控性較強。比如上傳檔案時,可以由用戶端直接指定上傳到的組也可以由tracker進行排程選擇。一個分組的存儲伺服器通路壓力較大時,可以在該組增加存儲伺服器來擴充服務能力(縱向擴容)。當系統容量不足時,可以增加組來擴充存儲容量(橫向擴容)。

5.Storage狀态收集

Storage server會連接配接叢集中所有的Tracker server,定時向他們報告自己的狀态,包括磁盤剩餘空間、檔案同步狀況、檔案上傳下載下傳次數等統計資訊。

6.檔案上傳、下載下傳流程

CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建

FastDFS伺服器搭建

1.安裝libfastcommon

  • 因為libfastcommon使用C語言寫的,是以我們先要安裝gcc編譯器:yum -y install gcc-c++
  • FastDFS依賴libevent庫,需要安裝:yum -y install libevent
  • libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS運作所需要的一些基礎庫。

    将libfastcommonV1.0.7.tar.gz拷貝至/usr/local/libfastcommon(需要建立libfastcommon這個目錄)下

cd /usr/local/libfastcommon
tar -zxvf libfastcommonV1.tar.gz
cd libfastcommon-
./make.sh
./make.sh install
           

注意:libfastcommon安裝好後會自動将庫檔案拷貝至/usr/lib64下,由于FastDFS程式引用usr/lib目錄是以需要将/usr/lib64下的ibfastcommon.so檔案拷貝至/usr/lib下,執行 cp /usr/lib64/libfastcommon.so /usr/lib/指令即可。

2.安裝FastDFS

  • 将FastDFS_v5.05.tar.gz拷貝至/usr/local/fastdfs(需建立fastdfs這個目錄)下
tar -zxvf fastdfs-.tar.gz
cd fastdfs-
./make.sh
./make.sh install
           
  • 接下來進入到/etc/fdfs目錄下,可以看到有三個以conf.sample 結尾的檔案,去掉.sample 字尾,我們再分别拷貝出3個後面用的正式的配置檔案。執行如下指令即可。下圖是拷貝以後的目錄。
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
           
CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建

3.配置Tracker

  • 在配置Tracker之前,首先需要建立Tracker伺服器的檔案路徑,即用于存儲Tracker的資料檔案和日志檔案等,我這裡選擇在/opt目錄下建立一個fastdfs_tracker目錄用于存放Tracker伺服器的相關檔案:mkdir /opt/fastdfs_tracker
  • 接下來就要重新編輯上一步準備好的/etc/fdfs目錄下的tracker.conf配置檔案,打開檔案後依次做以下修改:
disabled=false #啟用配置檔案(預設啟用)
port= #設定tracker的端口号,通常采用22122這個預設端口
base_path=/opt/fastdfs_tracker #設定tracker的資料檔案和日志目錄
http.server_port= #設定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。
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
  • 如果啟動指令執行成功,那麼同時在剛才建立的tracker檔案目錄/opt/fastdfs_tracker中就可以看到啟動後新生成的data和logs目錄。
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
    tracker服務的端口也應當被正常監聽,最後再通過netstat指令檢視一下端口監聽情況,輸入netstat -unltp|grep fdfs,下圖可以看到tracker服務運作的22122端口正常被監聽。 :
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
  • 确認tracker正常啟動後可以将tracker設定為開機啟動,打開/etc/rc.d/rc.local并在其中加入以下配置:service fdfs_trackerd start,即可設定開機啟動。

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

4.配置Storage

  • 步驟基本與配置Tracker一緻,首先是建立Storage伺服器的檔案目錄,需要注意的是同Tracker相比我多建了一個目錄,因為Storage還需要一個檔案存儲路徑,用于存放接收的檔案:
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data
           
  • 接下來修改/etc/fdfs目錄下的storage.conf配置檔案,打開檔案後依次做以下修改:
disabled=false #啟用配置檔案(預設啟用)
group_name=group1 #組名,根據實際情況修改
port= #設定storage的端口号,預設是23000,同一個組的storage端口号必須一緻
base_path=/opt/fastdfs_storage #設定storage資料檔案和日志目錄
store_path_count= #存儲路徑個數,需要和store_path個數比對
store_path=/opt/fastdfs_storage_data #實際檔案存儲路徑
tracker_server=.: #tracker 伺服器的 IP位址和端口号,如果是單機搭建,IP不要寫127.0.0.1,否則啟動不成功(此處的ip是我的CentOS虛拟機ip)
http.server_port= #設定 http 端口号
           
  • 配置完成後同樣要為Storage伺服器的啟動腳本設定軟引用:ln -s /usr/bin/fdfs_storaged /usr/local/bin
  • 接下來就可以啟動Storage服務了:service fdfs_storaged start
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
  • 如果啟動成功,/opt/fastdfs_storage中就可以看到啟動後新生成的data和logs目錄 。
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
    如上圖,沒有任何問題,data下有256個1級目錄,每級目錄下又有256個2級子目錄,總共65536個檔案,新寫的檔案會以hash的方式被路由到其中某個子目錄下,然後将檔案資料直接作為一個本地檔案存儲到該目錄中。
  • 最後我們再看一下storage服務的端口監聽情況:netstat -unltp | grep fdfs。可以看到此時已經正常監聽tracker的22122端口和storage的23000端口,至此storage伺服器就已經配置完成。
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
  • 确定了storage伺服器啟動成功後,還有一項工作就是看看storage伺服器是否已經登記到 tracker伺服器(也可以了解為tracker與storage是否整合成功),運作以下指令:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
    如上圖:看到192.168.200.131 ACTIVE 字樣即可說明storage伺服器已經成功登記到了tracker伺服器。
  • 同理别忘了添加開機啟動,打開/etc/rc.d/rc.local并将如下配置追加到檔案中:service fdfs_storage start

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

5.測試

  • 測試時需要設定用戶端的配置檔案,編輯/etc/fdfs目錄下的client.conf 檔案,打開檔案後依次做以下修改:
base_path=/opt/fastdfs_tracker #tracker伺服器檔案路徑
tracker_server=.: #tracker伺服器IP位址和端口号
http.tracker_server_port= # tracker 伺服器的 http 端口号,必須和tracker的設定對應起來
           
  • 配置完成後就可以模拟檔案上傳了,先給/opt目錄下随便放個檔案(adidas.jpg)。然後通過執行用戶端上傳指令嘗試上傳:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/adidas.jpg
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建

    運作後可以發現給我們傳回了一個路徑。

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

    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
    但是此時并不能通過http通路,因為FastDFS目前已不支援http協定,是以此處在nginx上使用FastDFS的子產品fastdfs-nginx-module,這樣做最大的好處就是提供了HTTP服務并且解決了group中storage伺服器的同步延遲問題,接下來就具體記錄一下fastdfs-nginx-module的安裝配置過程。

6.安裝fastdfs-nginx-module

a.storage nginx

  • 在/usr/local下建立目錄fastdfs-nginx,将fastdfs-nginx-module_v1.16.tar.gz 這個軟體包上傳至/usr/local/fastdfs-nginx。執行如下指令。
tar -xvzf fastdfs-nginx-module_v1..tar.gz
cd fastdfs-nginx-module
cd src
#這時會看到一個config檔案
           
  • 安裝nginx的教程可參考我的另一篇部落格,centos7下安裝nginx。安裝nginx過程中輸入

,需要在./configure後面配置如上一些參數。配置完成後會看到如下圖:

CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建

然後輸入make、make install完成安裝,如果在編譯過程中出現root/fastdfs-nginx-module/src//common.c:21:25: fatal error: fdfs_define.h: No such file or directory 這個錯誤,需要編輯/usr/local/fastdfs-nginx/fastdfs-nginx-module/src下的config檔案,将/usr/local/路徑改為/usr/,如下,然後重新安裝即可。

CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
  • 安裝完nginx後,可以看到與nginx同級目錄下多出來一些目錄,如下:
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
    接下來要修改一下nginx的配置檔案,進入conf目錄并修改nginx.conf,添加server:
server {
    listen       ;

        location ~/group1/M00 {
            root /opt/fastdfs_storage_data/data;
            ngx_fastdfs_module;
     }
    }
           
  • 然後進入FastDFS的安裝目錄/usr/local/fastdfs/fastdfs-5.05/目錄下的conf目錄,将http.conf和mime.types拷貝到/etc/fdfs目錄下:
cp -r /usr/local/fastdfs-/conf/http.conf /etc/fdfs/
cp -r /usr/local/fastdfs-/conf/mime.types /etc/fdfs/
           
CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
  • 接下來還需要把fastdfs-nginx-module安裝目錄中src目錄下的mod_fastdfs.conf也拷貝到/etc/fdfs目錄下:
cp -r /usr/local/fastdfs-nginx/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
           
  • 沒什麼問題,接下來就需要編輯剛拷貝的這個mod_fastdfs.conf檔案了,打開mod_fastdfs.conf并按順序依次編譯以下内容:
base_path=/opt/fastdfs_storage #儲存日志目錄
tracker_server=192.168.200.131: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已啟動成功:

CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
  • 接下來通路ip+port可以看到nginx的歡迎界面,如果無法通路,看看是否端口未暴露,如我的9999端口。
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --reload
           

浏覽器輸入192.168.200.131:9999,顯示如下:

CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建

b.tracker nginx

  • 同理,再裝一個nginx,目錄命名為nginx2,安裝路徑依舊放在/usr/local/nginx2下,由于和之前一樣,此處就不再做詳細解釋:
mkdir nginx2
cd nginx-/
./configure --prefix=/usr/local/nginx2 --add-module=/usr/local/fastdfs-nginx/fastdfs-nginx-module/src/
make
make install
           
  • 接下來依然是修改nginx2的配置檔案,進入conf目錄并打開nginx.conf檔案加入以下配置,tracker的nginx修改listen端口,預設是80端口,我将其修改為7777,并将upstream指向storage的nginx位址,在http節點下新增:
upstream fdfs_group1 {
     server :;
}
在server節點下新增:
server{
    listen ;
    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=:  #tracker 伺服器 IP 位址和端口号
http.tracker_server_port=  # tracker 伺服器的 http 端口号,必須和tracker的設定對應起來
           

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

c.http測試

  • 我們通過http通路之前上傳的那張圖檔adidas.jpg,輸入http://192.168.200.131:7777/group1/M00/00/00/wKjIg1qQTkCAZOjJAACoLAWZLKw249.jpg,可以得到如下圖:
    CentOS7下 搭建 FastDFS 分布式檔案伺服器FastDFS介紹FastDFS伺服器搭建
    大功告成。

注:此處我隻在一台虛拟機下面部署了一台tracker伺服器和一台storage伺服器,實際生産環境中肯定是多台伺服器同時工作。

參考文檔:CentOS 7下FastDFS分布式檔案伺服器搭建實戰

繼續閱讀