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

一、背景html

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)java

二、上傳流程linux

咱們能夠經過 FastDFS 對文件的上傳過程,來初步瞭解 FastDFS 的基本架構。首先客戶端 client 發起對 FastDFS 的文件傳輸動做,是經過鏈接到某一臺 Tracker Server 的指定端口來實現的,Tracker Server 根據目前已掌握的信息,來決定選擇哪一臺 Storage Server ,而後將這個Storage Server 的地址等信息返回給 client,而後 client 再經過這些信息鏈接到這臺 Storage Server,將要上傳的文件傳送到給 Storage Server上。nginx

  上傳流程簡述:c++

  • 一、client詢問tracker上傳到的storage,不須要附加參數; 
  • 二、tracker返回一臺可用的storage; 
  • 三、client直接和storage通信完成文件上傳。

  下載流程簡述:vim

  • 一、client詢問tracker下載文件的storage,參數爲文件標識(組名和文件名); 
  • 二、tracker返回一臺可用的storage; 
  • 三、client直接和storage通信完成文件下載。

 

三、架構簡析centos

FastDFS 是包括一組 Tracker Server 和 Storage Server 的。Tracker Server 與 Storage Server 之間不直接通訊,其基本的信息由配置文件在系統啓動加載時獲知。多臺 Tracker Server 之間保證了 Tracker 的分佈式,Tracker Server 之間是對等的,防止了單點故障。 Storage Server 是分紅多個 Group,每一個 Group 中的Storage 都是互相備份的,也就是說,若是 Group1 有 Storage一、Storage二、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類似。服務器

五、安裝環境準備

提示:本例安裝目標爲:一臺虛擬機(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

六、文件夾初始化

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

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

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

七、 安裝 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 (先建立着,後面會使用到)

八、安裝 FastDFS-5.0.5

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

  進入安裝文件夾:cd FastDFS

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

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

  

九、配置 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

十、配置 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 訪問的反向代理、負載均衡及緩存服務。

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

十一、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

十二、 在 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 代碼測試一番,成功!

  

 

1三、tracker 中安裝 nginx

  待續…

相關文章
相關標籤/搜索