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

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

nbsp strong figure 分割 不能訪問 org 事先 zlib 編輯

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 傳送源碼包,有興趣的可移步至:)

  • fastdfs-nginx-module_v1.16.tar.gz (nginx 依賴包https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/)
  • FastDFS_v5.05.tar.gz (本例使用5.05版本,官方歷史版本:https://sourceforge.net/p/fastdfs/activity?source=project_activity)
  • libfastcommonV1.0.7.tar.gz(FastDFS依賴包,官方下載地址:https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/)
  • nginx-1.7.8.tar.gz
  • ngx_cache_purge-2.1.tar.gz (nginx 圖片緩存,http://labs.frickle.com/nginx_ngx_cache_purge/)
  • perl-5.20.2.tar.gz(因為從 linux 系統直接下載網速太慢,所以提前準備,上傳到 linux 再安裝,官方歷史版本下載地址:http://www.cpan.org/src/ 吐嘈一下 cnds 上的選手,源碼又不是你開發的,你掛就掛吧,下載還還要積分,呵呵。)

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

  待續…    

  

  

    

  

  

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