天天看點

搭建FastDFS分布式檔案系統

FastDFS簡介

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

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

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

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

服務端兩個角色:

Tracker:管理叢集,tracker 也可以實作叢集。每個 tracker 節點地位平等。收集 Storage 叢集的狀态。

Storage:實際儲存檔案 Storage 分為多個組,每個組之間儲存的檔案是不同的。每個組内部可以有多個成員, 組成員内部儲存的内容是一樣的,組成員的地位是一緻的,沒有主從的概念。

Ubuntu1604安裝配置FastDFS:

  1. 安裝libfastcommon

    下載下傳位址:https://github.com/happyfish100/libfastcommon.git

    在/usr/fastdfs目錄下解壓、編譯:

root@linuxidc: /usr/fastdfs# unzip  libfastcommon-master.zip
  cd libfastcommon-master
  ./make.sh
  ./make.sh  install
           
  1. 安裝FastDFS

    下載下傳可百度搜尋FastDFS_v5.04.tar.gz下載下傳,使用xhell存放到伺服器

    也可以直接下載下傳:

wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
tar xf V5.11.tar.gz
cd fastdfs-5.11
./make.sh 
./make.sh  install
           

安裝完成後所有的配置檔案在 /etc/fdfs/ 目錄下

  1. 配置tracker

    進入到 /etc/fdfs 目錄下,複制模版檔案tracker.conf.sample到 tracker.conf

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

建立資料檔案和日志檔案目錄:

mkdir -pv /data/fastdfs/tracker
           

mkdir: 已建立目錄 "/data"mkdir:

已建立目錄 "/data/fastdfs"mkdir:

已建立目錄 “/data/fastdfs/tracker”

編輯 tracker.conf 檔案,測試的時候隻需要修改以下參數即可

disabled=false   #啟用配置檔案
port=22122                             #設定 tracker 的端口号
base_path=/data/fastdfs/tracker           #設定 tracker 的資料檔案和                      日志目錄(需預先建立)
http.server_port=8888                  #設定 http 端口号
           

http.server_port=8888 指的是在tracker伺服器上啟動http服務程序,如:apache或者nginx 啟動時所監聽的端口

4.運作tracker:

啟動tracker程序,然後使用netstat 檢視端口是 否起來。

指令如下:

fdfs_trackerd /etc/fdfs/tracker.conf restart

注:如不能正常啟動則 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

netstat -antp | grep trackerd

搭建FastDFS分布式檔案系統

綁定端口則啟動正常

5.配置storage

建立資料檔案和日志檔案目錄:

mkdir -pv /data/fastdfs/storage
           

指令如下:

vim storage.conf

修改内容如下:

disabled=false#啟用配置檔案
 group_name=group1                       #組名,根據實際情況修改
 port=23000                                           #設定 storage 的端口号
 base_path=/data/fastdfs/storage          #設定 storage 的日志目錄(需預先建立)
 store_path_count=1                              #存儲路徑個數,需要和 store_path 個數比對
 store_path0=/data/fastdfs/storage        #存儲路徑
 tracker_server=127.0.0.1:22122           #tracker 伺服器的 IP 位址和端口号,注意不能使用127.0.0.1,使用内網ip或者公網ip
 http.server_port=8888                         #設定storage上啟動的http服務的 
           

端口号,如安裝的nginx的端口号

運作storage:

fdfs_storaged /etc/fdfs/storage.conf restart
           

注:如不能正常啟動則

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

檢視端口是否啟動

netstat -antp | grep storage

6.配置client.conf

建立資料檔案和日志檔案目錄:

mkdir -pv /data/fastdfs/log
           

指令如下:

vim client.conf

修改内容如下:

base_path=/data/fastdfs/log                        #設定 log 的日志目錄(需預先建立)
 tracker_server=xxx.xx.xx.xxx:22122        #tracker伺服器的 IP 位址和端口号 根據自己tracker伺服器配置
 http.tracker_server_port=8888       
           
  1. 用戶端上傳檔案測試

    進入/usr/local/bin/目錄,上傳檔案,執行

sudo fdfs_test  /etc/fdfs/client.conf upload a.txt   
           

注:a.txt可以在/usr/local/bin/目錄下自己建立一個

如果指令行回報檔案位址

說明上傳完成。

安裝fastdfs-nginx-module子產品

FastDFS通過Tracker伺服器,将檔案放在Storage伺服器存儲,但是同組存儲伺服器之間需要進入檔案複制,有同步延遲的問題。假設Tracker伺服器将檔案上傳到了192.168.104.118,上傳成功後檔案ID已經傳回給用戶端。此時FastDFS存儲叢集機制會将這個檔案同步到同組存儲192.168.104.119,在檔案還沒有複制完成的情況下,用戶端如果用這個檔案ID在192.168.104.119上取檔案,就會出現檔案無法通路的錯誤。而fastdfs-nginx-module可以重定向檔案連接配接到源伺服器取檔案,避免用戶端由于複制延遲導緻的檔案無法通路錯誤。

#建立nginx下載下傳目錄

mkdir -p /usr/local/bak/nginx
           

#建立日志存儲目錄

mkdir -p /data/fastdfs/nginx
cd /usr/local/bak/nginx
#下載下傳并解壓
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz fastdfs-nginx-module-V1.20.tar.gz
tar xf V1.20
cd fastdfs-nginx-module-1.20/src/
           

拷貝fastdfs-nginx-module子產品的配置檔案mod_fastdfs.conf到/etc/fdfs目錄中并編輯

cp /usr/local/bak/nginx/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
cd /etc/fdfs/
           

編輯fastdfs-nginx-module-1.20/src/目錄下的config檔案(沒字首,沒字尾,就叫config),主要修改以下兩處地方,否則會有報錯,而且報錯是不可預料的,不要問為什麼,反正就是幹。

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
           

拷貝fastdfs-nginx-module子產品的配置檔案mod_fastdfs.conf到/etc/fdfs目錄中并編輯

cp /usr/local/bak/nginx/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
cd /etc/fdfs/
           

修改内容如下,圈紅為重點修改部分(感謝@驿外殘香 回報,此處的store_path0應該與storage.conf中的store_path0一緻,這樣nginx才能夠找到資源的正确路徑):

base_path=/data/fastdfs/nginx
store_path0=/data/fastdfs/storage
tracker_server=tracker_server=xx.xxx.xx.xx:22122 #填本機外網ip即可
storage_server_port=23000(預設配置為23000)
url_have_group_name = true
group_name=group1(預設配置為group1)
           

安裝nginx(此處極易出錯務必小心謹慎)

解壓nginx到/usr/local

wget https://nginx.org/download/nginx-1.15.8.tar.gz --no-check-certificate
tar xf nginx-1.15.8.tar.gz
           

此時編譯nginx會報錯,需要安裝pcre工具和zlib工具包

#我是将所有工具包下載下傳并放置在/srv/ftp下

wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
wget http://zlib.net/zlib-1.2.11.tar.gz
           

将上述兩個工具包解壓至/usr/local/

tar -xzvf pcre-8.40.tar.gz -C /usr/local/
tar -xzvf zlib-1.2.11.tar.gz -C /usr/local/
           

進入pcre-8.40并編譯

cd /usr/local/pcre-8.40
#編譯1
./configure
#編譯2
make && make install
           

進入zlib-1.2.11并編譯

#編譯1
./configure
#編譯2
make && make install
           

安裝編譯時需要用到的庫和工具

apt-get install build-essential libtool gcc automake autoconf make
           

執行成功不報錯後

編譯nginx

cd nginx-1.15.8
./configure --prefix=/usr/local/nginx   --conf-path=/usr/local/nginx/conf/nginx.conf --sbin-path=/usr/local/nginx/sbin --add-module=/usr/local/bak/nginx/fastdfs-nginx-module-1.20/src 
make  &&  make install
           

未報錯即為編譯成功,如果有報錯必須解決,否則nginx無法啟動成功。

拷貝FastDFS中的部配置設定置檔案到/etc/fdfs目錄中

cp /usr/fastdfs/fastdfs-5.11//conf/http.conf /etc/fdfs/
cp /usr/fastdfs/fastdfs-5.11//conf/mime.types /etc/fdfs/
           

配置nginx的配置檔案,路徑是/application/nginx/conf/nginx.conf

user  root;    
    worker_processes  1;
    events {
       worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       8888;
            server_name  localhost;
            location ~/group[0-9]/ {
                ngx_fastdfs_module;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
            root   html;
            }
        }
    }
           

啟動nginx

先上傳一個檔案

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /data/fastdfs/111.png
           

上傳成功傳回了一個檔案位址:

測試下載下傳:

http://xx.xxx.xx.xx:8888/group1/M00/00/00/rBM2HF6iorCAMeNOAAKo50Gq43I582.png

即可看到圖檔,叢集内容和安全問題下面繼續補充。