搭建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
在這裏插入圖片描述

綁定端口則啓動正常

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並編譯

cd /usr/local/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
即可看到圖片,集羣內容和安全問題下面繼續補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章