FastDFS分布式文件系統&Nginx負載均衡最小環境安裝配置[超級詳解]


1、背景

FastDFS 是一款開源的、分布式文件系統(Distributed File System),由淘寶開發平台部資深架構師余慶開發。該開源項目的主頁是 http://code.google.com/p/fastdfs 。可以通過 fastdfs.sourceforge.net 下載。FastDFS論壇是 http://www.csource.org ,目前是指向 ChinaUnix 開源項目孵化平台的一個板塊 FastDFS,網址為 bbs.chinaunix.net/forum-240-1.html 。(摘自 http://blog.csdn.net/poechant/article/details/6977407)

2、上傳流程

我們可以通過 FastDFS 對文件的上傳過程,來初步了解 FastDFS 的基本架構。首先客戶端 client 發起對 FastDFS 的文件傳輸動作,是通過連接到某一台 Tracker Server 的指定端口來實現的,Tracker Server 根據目前已掌握的信息,來決定選擇哪一台 Storage Server ,然后將這個Storage Server 的地址等信息返回給 client,然后 client 再通過這些信息連接到這台 Storage Server,將要上傳的文件傳送到給 Storage Server上。

  上傳流程簡述:

  • 1、client詢問tracker上傳到的storage,不需要附加參數; 
  • 2、tracker返回一台可用的storage; 
  • 3、client直接和storage通訊完成文件上傳。

  下載流程簡述:

  • 1、client詢問tracker下載文件的storage,參數為文件標識(組名和文件名); 
  • 2、tracker返回一台可用的storage; 
  • 3、client直接和storage通訊完成文件下載。

 

3、架構簡析

FastDFS 是包括一組 Tracker Server 和 Storage Server 的。Tracker Server 與 Storage Server 之間不直接通信,其基本的信息由配置文件在系統啟動加載時獲知。多台 Tracker Server 之間保證了 Tracker 的分布式,Tracker Server 之間是對等的,防止了單點故障。 Storage Server 是分成多個 Group,每個 Group 中的Storage 都是互相備份的,也就是說,如果 Group1 有 Storage1、Storage2、Storage3,其容量分別是100GB、100GB、100GB,那么 Group1 的存儲能力是 100GB,而不是 300GB,這就是互相備份的意思。進一步說,整個 Group 的存儲能力由該組中該儲能力最小的 Storage 決定。多個 Group 之間的存儲方式,可以采用 round robin(輪訓)、load balanced(負載均衡)或指定 Group 的方式。

術語

FastDFS兩個主要的角色:Tracker Server 和 Storage Server 
Tracker Server:跟蹤服務器,主要負責調度storage節點與client通信,在訪問上起負載均衡的作用,和記錄storage節點的運行狀態,是連接client和storage節點的樞紐。 
Storage Server:存儲服務器,保存文件和文件的meta data(元數據) 
Group:文件組,也可以稱為卷。同組內服務器上的文件是完全相同的,做集群時往往一個組會有多台服務器,上傳一個文件到同組內的一台機器上后,FastDFS會將該文件即時同步到同組內的其它所有機器上,起到備份的作用。 
meta data:文件相關屬性,鍵值對(Key Value Pair)方式,如:width=1024, height=768。和阿里雲OSS的meta data相似。

5、安裝環境准備

提示:本例安裝目標為:一台虛擬機(centos 7)安裝部署一個 tracker 和一個組 group1(其中包含兩個 storage)

linux 基礎環境:centos 7 minimal(官方歷史版本:http://vault.centos.org/

相關源碼包(此處省略通過 ftp 傳送源碼包,有興趣的可移步至:)

linux 中需要事先准備相關程序(linux 聯網直接安裝)

  yum -y install gcc (必須在最開始的環境里就已經安裝了,否則上面的源碼包安裝過程會出錯)

  yum -y install gcc-c++(必須在最開始的環境里就已經安裝了,否則上面的源碼包安裝過程會出錯)

  yum -y install vim (可選擇,文本編輯器)

  perl-5.20.2

nginx 負載均衡環境部署先的依賴程序准備

  • yum install gcc-c++
  • yum install -y pcre pcre-devel
  • yum install -y zlib zlib-devel
  • yum install -y openssl openssl-devel

6、文件夾初始化

創建 tracker 所需的文件夾 base_path:mkdir /opt/fastdfs_tracker

創建 storage所需的日志目錄:mkdir /opt/fastdfs_storage_info (這個目錄是用來記錄 storage 同步文件的日志)

創建 storage 存儲所需的文件目錄:mkdir /opt/fastdfs_storage_data (此目錄存儲文件)

7、 安裝 libfastcommon-1.0.7

  解壓:tar -zxvf libfastcommonV1.0.7.tar.gz

  進入安裝文件夾:cd libfastcommon-1.0.7

  依次執行 make 命令:./make.sh./make.sh install

  

  從安裝記錄可以看出:安裝路徑為 /usr/lib64,但是FastDFS主程序設置的默認安裝目錄是lib目錄:/usr/local/lib,所以要創建連接:

  • 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 (先創建着,后面會使用到)

8、安裝 FastDFS-5.0.5

  解壓 tar 包:tar -zxvf FastDFS_v5.05.tar.gz

  進入安裝文件夾:cd FastDFS

  依次執行 make 命令:./make.sh./make.sh install

  安裝過程沒有錯誤提示,再檢查  /etc/fdfs 目錄中是否含有以下文件,如果有則安裝成功:

  

9、配置 tracker

  9.1  進入 /etc/fdfs 文件夾,執行如下命令: cp tracker.conf.sample tracker.conf

  9.2  編輯  tracker.conf 文件:vim tracker.conf

  9.3 具體配置信息:

    a. disabled=false # 啟用配置文件

    b. port=22122 # 設置 tracker 端口好,一般采用默認端口 22122

    c. base_path=/opt/fastdfs_tracker # 設置 tracker 的數據文件和日志目錄

    d. http.server_port=80 # fastdfs5.0.5版本沒有,保險起見,這里設置成 80 端口

    其他配置信息保持默認,不用動。

  9.4 啟動 tracker: /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

    檢測是否啟動成功:

    方法1: netstat -unltp|grep fdfs ,看 22122 端口監聽情況

    方法2: 通過命令查看 tracker 啟動日志:tail -100f /opt/fastdfs_tracker/logs/trackerd.log

  9.5 如果成功啟動 tracker,將啟動命令添加到服務器的開機啟動配置中:

     vim /etc/rc.d/rc.local

    在文本中添加這行,並保存:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

10、配置 stroage(和 trcker 配置類似)

  10.1 進入 /etc/fdfs 文件夾,執行命令: cp storage.conf.sample storage.conf

  10.2 編輯 storage.conf 文件,執行命令: vim storage.conf

  10.3 具體配置信息:

    a. disabled=false #啟用配置文件
    b. group_name=group1 #組名,這里本例只配置一組,所以命名為 group1
    c. port=23000 #這里設置 storage 端口號,23000是默認端口,同一個組的 storage 端口號必須一致
    d. base_path=/opt/fastdfs_storage_info #記錄 storage 日志(預先已經創建的文件夾)
    e. store_path_count=1 #存儲的路徑個數,個數需要和 store_path 的個數一致

    f. store_path0=/opt/fastdfs_storage_data #存儲路徑,這里是一個 group1 組配置了兩個 storage

       store_path1=/opt/fastdfs_storage_data

    g. tracker_server=192.168.25.131:22122 # tracker 服務器的 ip 和端口號,本 ip 是本 linux的 ip
    h. http.server_port=80  # 設置 http 端口號,fastdfs-5.0.5 這個版本已經不用配置,保險起見,就配置一下吧

  10.4 啟動 tracker:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

    檢測是否啟動成功:

      方法1: netstat -unltp|grep fdfs ,看 23000 端口監聽情況(配置的是 什么端口就監聽哪個端口)

      方法2: 通過命令查看 tracker 啟動日志:tail -100f /opt/fastdfs_storage_info/logs/storage.log

    啟動成功之后,可以通過 fdfs_monitor 查看集群情況:stroage 是否已經注冊到服務器中:

      /usr/bin/fdfs_monitor /etc/fdfs/storage.conf # 查看192.168.25.131:23000 是 “ ACTIVE ”狀態即可

  10.5 啟動沒有問題,則將 stroage 啟動命令配置到服務器啟動項里: vim /etc/rc.d/rc.local

    添加這行命令,並保存: /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

===================================分割線====================================

以上安裝配置步驟就是 fastdfs 的配置。

storage 中安裝 nginx 目的是為了提供 http 的訪問服務,同時解決 group 和 storage 同步延遲問題,

tracker 中安裝 nginx 目的是為了提供 http 訪問的反向代理、負載均衡及緩存服務。

===================================分割線====================================

11、nginx 安裝前的環境准備

   yum install -y gcc # 前面步驟已安裝,略過

   yum install -y gcc-c++ # 前面步驟已安裝,略過

   yum install -y pcre pcre-devel

   yum install -y zlib zlib-devel 

   yum install -y openssl openssl-devel

12、 在 storage 中安裝 nginx

  12.1 創建 nginx 默認安裝文件夾: mkdir /usr/local/nginx

  12.2 解壓 tar 包:

    tar -zxvf nginx1.7.8.tar.gz  # 得到 nginx-1.7.8 文件目錄

    tar -zxvf fastdfs-nginx-module_v1.16.tar.gz # 得到 fastdfs-nginx-module 文件目錄

  12.3 修改 fastdfs-nginx-module 文件目錄中的 config 文件:

     cd /fastdfs-nginx-module/src

     vim config  

     將 CORE_INCS中 的參數路徑修改一下,local 全部不要: CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

  12.4 建立軟連接,在第七步驟中已經創建,可略過: 

      ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so (第七步驟中已經創建,可略過)

      ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so (第七步驟中已經創建,可略過)

    

  12.5 進入nginx 安裝文件夾:cd nginx-1.7.8

     執行命令:./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src

     備注:執行命令中的 add-module 參數為 fastdfs-nginx-module 文件目錄路徑,這里是 /usr/local/src 目錄下的。

     命令執行完畢之后,依次執行 makemake install,沒有錯誤提示表示安裝成功。

  12.6 執行命令 cd /usr/local/nginx/conf, 編輯 vim  nginx.conf 文件:

    在 http 語句塊中將 listen 修改成:listen 80;

    在 server 語句塊中添加:

      location /group1/M00 {

        root/fdfs/storage/data;

        ngx_fastdfs_module;

      }

    注意:這里 group 組名是上面配置的 group1,要和第 10 步驟的 10.3 步驟中的配置組信息一致

    如果 nginx 成功啟動,瀏覽器不能訪問,就在 nginx.conf 這個配置文件中,把第一行的注解打開,配置成:user  root; 即可。

       

  12.7 執行命令:cd /usr/local/rsrc/FastDFS/conf ,將 conf 文件夾目錄下的 http.conf 和 mime.types 復制到 /etc/fdfs/ 下,

    cp http.conf /etc/fdfs/

    cp mime.types /etc/fdfs/

    如果不執行這個操作,啟動 nginx 會報異常

  12.8 執行命令:cd/usr/local/rsrc/fastdfs-nginx-module/src 

    將 conf 文件夾下的 mod_fastdfs.conf 文件復制到 /etc/fdfs/下:cp mod_fastdfs.conf /etc/fdfs/

  12.9 在 /etc/fdfs/ 文件目錄下,打開編輯:vim mod_fastdfs.conf

    a. base_path=/opt/fastdfs_storage_info # 保存日志目錄

    b. tracker_server=192.168.25.131:22122  # tracker的ip和端口

    c. storage_server_port=23000 # storage服務器的端口號

    d. group_name=group1 #當前服務器的 group名稱

    e. url_have_group_name= true # 文件 url中是否有 group名稱

    f. store_path_count=2 #存儲路徑個數,必須和 下面的store_path個數一致

    g. store_path0=/opt/fastdfs_storage_data #文件存儲路徑

     store_path1=/opt/fastdfs_storage_data #本例設置了兩個stroage,和第 10 步驟的 10.3 步驟配置一致

    h. http.need_find_content_type=true #從文件擴展名查找文件類型,這個配置 fastdfs-5.0.5沒有,保險起見,還是配置吧

    i. group_count= 1 # 設置組的個數 這里設置了一個組 group1 所以配置為 1

    j. 在配置信息的最后,將注解的 group 信息展開,這里設置的是一個組,所以只配置一個:

      注意組的名稱 端口 存儲路徑個數 和存儲路徑

    

  12.10 創建軟連接: ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/M00

  12.11 啟動 nginx:/usr/local/nginx/sbin/nginx

    提示:/usr/local/nginx/sbin/nginx -s stop  # 停止nginx

    檢查是否啟動成功:netstat -anp | grep 80,如果有寬口沖突,也可以檢測到,kill -9 對應的pid 即可。

    啟動成功只會提示一個 pid,需要自己通過瀏覽器驗證。

    

  常見問題:

    如果上面配置都完整無誤,瀏覽器還是無法訪問,則可以 ping 一下網絡,再 telnet 一下端口,很有可能是防火牆的問題:

    添加開放端口 firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,沒有此參數重啟后失效)

    刪除開放端口 firewall-cmd --zone=public --remove-port=80/tcp --permanent 

    添加或者刪除開放端口之后需要更新防火牆規則: firewall-cmd --reload 

    查看所有打開的端口:  firewall-cmd --zone=public --list-ports 或者  firewall-cmd --list-services

    顯示防火牆狀態是否運行:firewall-cmd --state  或者   systemctl status firewalld.service

 

用了一天時間,折騰好幾次,又是重裝系統又是查資料的,感覺能這么細致的講解的真不多,於是就想把這個心得寫下來,讓讀者們少走坑。

通過 java 代碼測試一番,成功!

  

 

13、tracker 中安裝 nginx

  待續…    

  

  

    

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM