FastDFS 叢集 安裝 配置

純潔的微笑發表於2017-11-01

這篇文章介紹如何搭建FastDFS 叢集

FastDFS是一個開源的輕量級分散式檔案系統,它對檔案進行管理,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題。特別適合以檔案為載體的線上服務,如相簿網站、視訊網站等等。

FastDFS為網際網路量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用FastDFS很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、下載等服務。

環境準備

系統系統 centos6.5
六臺伺服器:192.168.53.85/86/90
192.168.54.73/74/75
安裝包:

fastdfs-5.05.tar.gz
libfastcommon-1.0.36.zip
nginx-1.7.9.tar.gz

伺服器規劃

tracker伺服器:192.168.53.85/86
storage伺服器:192.168.53.90
192.168.54.73/74/75



安裝Fastdfs(全部)

安裝依賴包

注意:FastDFS 5.x 取消了對 libevent 的依賴,新增了對 libfastcommon 的依賴。

  • 在安裝FastDFS和Nginx之前,需確保gcc、gcc-c++、 libstdc++-devel、make等依賴庫和工具已經安裝
#安裝依賴軟體
yum -y install gcc gcc-c++ libstdc++-devel pcre-devel zlib-devel wget make
yum -y groupinstall 'Development Tools' 

安裝libfastcommon類庫

安裝FastDFS必須先安裝libfastcommon類庫,否則會導致報錯,安裝直接根據如下幾個步驟即可~

unzip libfastcommon-1.0.36.zip  -d /usr/local

cd /usr/local/libfastcommon-1.0.36
./make.sh
./make.sh install

安裝FastDFS

tar -xvzf fastdfs-5.05.tar.gz -C /usr/local

cd /usr/local/fastdfs-5.05
./make.sh
./make.sh install

安裝好之後,在/usr/bin目錄下,可以看fdfs開頭的命令工具

FastDFS安裝完成之後,所有配置檔案在/etc/fdfs目錄下,tracker需要tracker.conf配置檔案,storage需要storage.conf配置檔案。


安裝tracker(85/86)

將tracker.conf.sample檔案重新命名為tracker.conf,然後修改配置檔案/etc/fdfs/tracker.conf

# 儲存日誌和資料的根目錄
mkdir /root/fastdfs

cd /etc/fdfs
cp tracker.conf.sample tracker.conf

只需要修改 base_pash路徑(檔案儲存路徑)

vi tracker.conf
base_path=/root/fastdfs

配置檔案中有這幾個引數需要注意:

#啟用配置檔案
disabled=false
#設定tracker的埠號
port=22122
#設定tracker的資料檔案和日誌目錄(需手動建立)
base_path=/root/fastdfs
#設定http埠號
http.server_port=9090

使用/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start嘗試啟動tracker

[root@localhost ~]# fdfs_trackerd /etc/fdfs/tracker.conf restart
[root@localhost ~]# 

沒有報錯,檢視埠22122是否開始監聽,確認啟動是否成功。

[root@localhost ~]# ps -ef|grep fdfs
root      6078     1  0 11:59 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
root      6101  6054  0 12:01 pts/2    00:00:00 grep fdfs
[root@localhost ~]# netstat -unltp | grep fdfs
tcp        0      0 0.0.0.0:22122               0.0.0.0:*                   LISTEN      6078/fdfs_trackerd  

也可以檢視tracker的日誌是否啟動成功

[root@localhost ~]# cat /root/fastdfs/logs/trackerd.log 
[2017-10-09 11:59:12] INFO - FastDFS v5.05, base_path=/root/fastdfs, run_by ...

至此,一個簡單的的tracker配置就完成了,Tracker也成功啟動~, 接下來要做的就是完成Storage的配置~


安裝storage(90/73/74/75)

將儲存節點分為兩個組,其中group1 (72、73)、group2 (74、75)。

建立儲存目錄和配置檔案

mkdir /root/fastdfs

cd /etc/fdfs
cp storage.conf.sample storage.conf

修改配置

storage主要完成base_path,store_path以及tracker的連線地址以及storage的http服務埠配置等。

主要有如下幾個引數:

vi /etc/fdfs/storage.conf
# 內容
group_name=group1                   # 組名(第一組為group1,第二組為group2,依次類推...)
base_path=/root/fastdfs             # 資料和日誌檔案儲存根目錄
store_path0=/root/fastdfs           #第一個儲存目錄,第二個儲存目錄起名為:store_path1=xxx,其它儲存目錄名依次類推...
store_path_count=1                  # 儲存路徑個數,需要和store_path個數匹配
tracker_server=192.168.53.85:22122          # tracker伺服器IP和埠
tracker_server=192.168.53.86:22122          # tracker伺服器IP和埠

啟動Storage

啟動storage,會根據配置檔案的設定自動建立多級儲存目錄,檢視埠23000是否開始監聽,確認啟動是否成功。

[root@localhost fdfs]# fdfs_storaged /etc/fdfs/storage.conf restart
[root@localhost fdfs]# netstat -unltp | grep fdfs
tcp        0      0 0.0.0.0:23000               0.0.0.0:*                   LISTEN      5551/fdfs_storaged  

也可以檢視storage的日誌是否啟動成功。

[root@localhost logs]# cat /root/fastdfs/logs/storaged.log 
[2017-10-09 15:39:12] INFO - FastDFS v5.05, base_path=/root/fastdfs, store_path_count=1 ...

驗證storage是否登記到tracker伺服器

使用fdfs_monitor /etc/fdfs/storage.conf,執行fdfs_monitor檢視storage伺服器是否已經登記到tracker伺服器。

可以在任一儲存節點上使用如下命令檢視叢集的狀態資訊

fdfs_monitor /etc/fdfs/storage.conf

如果出現ip_addr = Active, 則表明storage伺服器已經登記到tracker伺服器,如下:

Storage 1:
        id = 192.168.53.90
        ip_addr = 192.168.53.90 (localhost)  ACTIVE

至此,tracker、storage等配置都完成併成功啟動

接下來,繼續完成Nginx和fastdfs-nginx-module的安裝和配置



在storage上安裝nginx

注意:fastdfs-nginx-module模組只需要安裝到storage上。


安裝

解壓安裝包

tar -xvzf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local
tar -zvxf nginx-1.7.9.tar.gz  -C /usr/local

需要先配置軟連結:

ln -sv /usr/include/fastcommon /usr/local/include/fastcommon 
ln -sv /usr/include/fastdfs /usr/local/include/fastdfs 
ln -sv /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

安裝nginx的時候,新增 fastdfs-nginx-module-master模組,如:
./configure --add-module=../fastdfs-nginx-module/src/

cd /usr/local/nginx-1.7.9
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module/src

configure 成功輸出結果:

checking for OS
 + Linux 2.6.32-431.el6.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) 
checking for gcc -pipe switch ... found

......

nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp" 

configure成功了

接下來執行make和make install

make

確定編譯沒有出錯,再進行install

make install 

安裝成功,檢視版本資訊

/usr/local/nginx/sbin/nginx -V


配置

配置fastdfs-nginx-module

進入fastdfs-nginx-module的src目錄,將md_fastdfs.conf配置檔案拷貝到/etc/fdfs/目錄中

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

配置 mod_fastdfs.conf

vim /etc/fdfs/mod_fastdfs.conf
一般只需改動以下幾個引數即可:
base_path=/root/fastdfs           #儲存日誌目錄
tracker_server=192.168.53.85:22122
tracker_server=192.168.53.86:22122 
storage_server_port=23000         #storage伺服器的埠號
group_name=group1                 #當前伺服器的group名
url_have_group_name = true        #檔案url中是否有group名
store_path_count=1                #儲存路徑個數,需要和store_path個數匹配
store_path0=/root/fastdfs         #儲存路徑
group_count = 2                   #設定組的個數

在末尾增加3個組的具體資訊:

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/root/fastdfs

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/root/fastdfs

建立M00至儲存目錄的符號連線。

ln -s /root/fastdfs/data /root/fastdfs/data/M00
ll /root/fastdfs/data/M00



配置nginx

編輯/usr/local/nginx/conf配置檔案目錄下的nginx.conf,設定新增storage資訊並儲存。

vim /usr/local/nginx/conf/nginx.conf

將server段中的listen埠號改為8080,啟動使用者使用root。

user root
listen       8080;

在server段中新增:

location ~/group[1-2]/M00 {
    root /root/fastdfs/data;
    ngx_fastdfs_module;
}

複製fastdfs中的http.conf、mime.types檔案到/etc/fdfs

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

至此,nginx以及FastDFS外掛模組設定完成。

執行

執行nginx之前,先要把防火牆中對應的埠開啟(本例中為8080)。

iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
/etc/init.d/iptables save

啟動nginx,確認啟動是否成功。(檢視是否對應埠8080是否開始監聽)

[root@localhost ~]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=12768
[root@localhost ~]# netstat -unltp | grep nginx
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      12769/nginx  

也可檢視nginx的日誌是否啟動成功或是否有錯誤。

cat /usr/local/nginx/logs/error.log

在error.log中沒有錯誤,既啟動成功。可以開啟瀏覽器,直接訪問http://192.168.53.90:8080,檢視是否彈出nginx歡迎頁面。

檢視到歡迎頁則說明,nginx執行成功。之後依次在其它storage上全部安裝上nginx並確認執行正常。

將nginx設定為開機啟動:

vim /etc/rc.d/rc.local

將執行命令列新增進檔案:/usr/local/nginx/sbin/nginx



在tracker上安裝nginx

在tracker上安裝的nginx主要為了提供http訪問的反向代理、負載均衡以及快取服務。

安裝

解壓

tar -zvxf nginx-1.7.9.tar.gz  -C /usr/local

執行./configure進行安裝前的設定,主要設定安裝路徑

cd /usr/local/nginx-1.7.9
./configure --prefix=/usr/local/nginx

執行make進行編譯,確保編譯成功。

make

執行make install進行安裝。

make install


配置

編輯/usr/local/nginx/conf配置檔案目錄下的nginx.conf,設定負載均衡

vim /usr/local/nginx/conf/nginx.conf

配置資訊

worker_processes  4;                  #根據CPU核心數而定
events {
    worker_connections  65535;        #最大連結數
    use epoll;                        #新版本的Linux可使用epoll加快處理效能
}
http {
    #設定group1的伺服器
    upstream fdfs_group1 {
        server 192.168.53.90:8080 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.54.229:8080 weight=1 max_fails=2 fail_timeout=30s;
    }
    #設定group2的伺服器
    upstream fdfs_group2 {
        server 192.168.54.233:8080 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.54.234:8080 weight=1 max_fails=2 fail_timeout=30s;
    }

   server {
       #設定伺服器埠
        listen       8080;
       #設定group1的負載均衡引數
        location /group1/M00 {
            proxy_pass http://fdfs_group1;
        }
        #設定group2的負載均衡引數
        location /group2/M00 {
            proxy_pass http://fdfs_group2;
        }
      }

    }

至此,nginx設定完成。

執行

執行nginx之前,先要把防火牆中對應的埠開啟(本例中為8080)

iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
/etc/init.d/iptables save

啟動nginx,確認啟動是否成功。(檢視是否對應埠8080是否開始監聽)

[root@localhost ~]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=12768
[root@localhost ~]# netstat -unltp | grep nginx
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      12769/nginx  

也可檢視nginx的日誌是否啟動成功或是否有錯誤。

cat /usr/local/nginx/logs/error.log

嘗試上傳一個檔案到FastDFS,然後訪問試試。先配置client.conf檔案。

cp client.conf.sample  client.conf
vim /etc/fdfs/client.conf

修改以下引數:

base_path=/root/fastdfs                   #日誌存放路徑
tracker_server=192.168.53.85:22122         
tracker_server=192.168.53.86:22122 
http.tracker_server_port=8080

使用/usr/local/bin/fdfs_upload_file上傳一個檔案,程式會自動返回檔案的URL。

[root@localhost fdfs]# fdfs_upload_file /etc/fdfs/client.conf /root/test.jpg
group2/M00/00/00/wKg26VncfamAEqZ0AAu-4Kcs3QI677.jpg

然後使用瀏覽器訪問:

http://192.168.53.85:8080/group2/M00/00/00/wKg26VncfamAEqZ0AAu-4Kcs3QI677.jpg

看有檢視到圖片,說明叢集搭建成功!

FastDFS 叢集 安裝 配置

生產中可以將:/root/fastdfs 替換為:/fdfs/storage



報錯

編譯nginx的時候報錯

在nginx目錄下,執行configure之後,進行make編譯報錯,報錯內容如下:

s -I src/mail \
                -o objs/addon/src/ngx_http_fastdfs_module.o \
                /usr/local/fastdfs-nginx-module/src/ngx_http_fastdfs_module.c
In file included from /usr/local/fastdfs-nginx-module/src/ngx_http_fastdfs_module.c:6:
/usr/local/fastdfs-nginx-module/src/common.c:21:25: error: fdfs_define.h: No such file or directory

......

/usr/local/fastdfs-nginx-module/src/ngx_http_fastdfs_module.c:933: error: ‘true’ undeclared (first use in this function)
make[1]: *** [objs/addon/src/ngx_http_fastdfs_module.o] Error 1
make[1]: Leaving directory `/usr/local/nginx-1.7.9'
make: *** [build] Error 2

做以下修改

vim /usr/local/fastdfs-nginx-module/src/config

將、

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

修改為:

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

其實就是改動了fastdfs的路徑,沒改之前直接訪問cd /usr/local/include/fastdfs為空目錄。

或者設定對應的軟連線也可以。

ln -sv /usr/include/fastcommon /usr/local/include/fastcommon 
ln -sv /usr/include/fastdfs /usr/local/include/fastdfs 
ln -sv /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

修改完成之後在nginx目錄,重新configure和make就好了。

./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module/src
make


啟動nginx報錯

在在storage上配置nginx相關資訊後啟動nginx,檢視日誌發現報錯:

cat /usr/local/nginx/logs/error.log
ngx_http_fastdfs_process_init pid=12770
[2017-10-10 13:41:44] ERROR - file: ini_file_reader.c, line: 631, include file "http.conf" not exists, line: "#include http.conf"
[2017-10-10 13:41:44] ERROR - file: /usr/local/fastdfs-nginx-module/src/common.c, line: 155, load conf file "/etc/fdfs/mod_fastdfs.conf" fail, ret code: 2
2017/10/10 13:41:44 [alert] 12769#0: worker process 12770 exited with fatal code 2 and cannot be respawned

解決方案:

複製fastdfs中的http.conf、mime.types檔案到/etc/fdfs

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

然後重啟nginx

killall nginx
/usr/local/nginx/sbin/nginx

檢視日誌,還報錯:

[root@localhost logs]# cat /usr/local/nginx/logs/error.log
ngx_http_fastdfs_process_init pid=12813
[2017-10-10 14:05:33] ERROR - file: /usr/local/fastdfs-nginx-module/src/common.c, line: 180, config file: /etc/fdfs/mod_fastdfs.conf, you must set url_have_group_name to true to support multi-group!
2017/10/10 14:05:33 [alert] 12812#0: worker process 12813 exited with fatal code 2 and cannot be respawned

解決方案:

vim  /etc/fdfs/mod_fastdfs.conf

url_have_group_name=false

改為

url_have_group_name=true 

重啟正常


測試圖片無法訪問

搭建完成之後,訪問http://192.168.53.85:8080/group2/M00/00/00/wKg26VncfamAEqZ0AAu-4Kcs3QI677.jpg
地址圖片總是報404無法找到,跟蹤到storage伺服器,檢視nginx的error日誌發現如下;

ERROR - file: /usr/local/fastdfs-nginx-module/src/common.c, line: 877, stat file: /root/fastdfs/data/00/00/wKg1Wlnchn2AOo0kAAu-4Kcs3QI239.jpg fail, errno: 13, error info: Permission denied

原因是nginx啟動的時候預設會以nobody使用者來啟動,這樣的話就許可權訪問/root/fastdfs/data的許可權

修改這個問題有兩個版本,第一個方案設定nginx以root身份啟動,或者設定nobody使用者許可權可以訪問/root/fastdfs/data地址。這裡只展示第一種方案的修改

vim /usr/local/nginx/conf/nginx.conf
# 修改nobody為root
user root

重啟nginx後問題解決

這裡有一個網友整理的word版本的安裝配置文件,包括快取各方面的內容比較全面,需要的朋友在公眾號回覆:“fastdfs”


參考:

CentOS上安裝分散式檔案系統FastDFS & 配置和問題

相關文章