FastDFS安裝全過程記錄(V5.05)

FastDFS安裝全過程記錄

一、安裝準備

HA虛擬IP:192.168.1.208

HA軟件:Keepalived

操做系統:CentOS 7

用戶:root

數據目錄:/data/fastdfs
nginx

安裝包:

fastdfs-master-V5.05.zip:FastDFS源碼

libfastcommon-master.zip:(從 FastDFS 和 FastDHT 中提取出來的公共 C 函數庫)

fastdfs-nginx-module-master.zip:storage節點http服務nginx模塊

nginx-1.10.0.tar.gz:Nginx安裝包

ngx_cache_purge-2.3.tar.gz:Nginx圖片緩存清除模塊
c++

獲取安裝包的方式:

1> 從這裏下載打包好的全部安裝包:http://download.csdn.net/detail/xyang81/9667493

2> 從做者github官網挨個下載fastdfs源碼及其依賴庫:https://github.com/happyfish100 和 Nginx緩存清除模塊:https://github.com/FRiCKLE/ngx_cache_purge
開始前,先將全部安裝包下載到各個節點的/usr/local/src目錄中。git

1> 本文稱節點IP最後一段就表明某個節點,如:192.168.1.206,文中提到206節點,就表明192.168.1.206。

2> 本文稱tracker或跟蹤服務器是同一個意思

3> 本文稱storage或存儲服務器是同一個意思
github

二、開始安裝

1.安裝所需依賴包

shell> yum install make cmake gcc gcc-c++

2.安裝 FastDFS三步走

[root@localhost ~]# cd /usr/local/src
[root@localhost src]# ls
fastdfs-master-V5.05.zip         
fastdfs-nginx-module-master.zip  
libfastcommon-master.zip         
nginx-1.10.0.tar.gz              
ngx_cache_purge-2.3.tar.gz       
openssl-1.0.1t

2.1 安裝 libfastcommon

解壓 libfastcommon,命令:shell

[root@localhost src]# unzip libfastcommon-master.zip
[root@localhost src]# cd libfastcommon-master
[root@localhost libfastcommon-master]# ./make.sh
[root@localhost libfastcommon-master]# ./make.sh install

執行以上4步,安裝完畢,即完成第一步。數據庫

2.2 安裝 FastDFS

解壓 libfastcommon,命令:apache

[root@localhost libfastcommon-master]# cd ..
[root@localhost src]# ls
fastdfs-master-V5.05.zip         openssl-1.0.1t.tar.gz
fastdfs-nginx-module-master.zip  pcre-8.39
libfastcommon-master             pcre-8.39.tar.gz
libfastcommon-master.zip         zlib-1.2.8
nginx-1.10.0.tar.gz              zlib-1.2.8.tar.gz
ngx_cache_purge-2.3.tar.gz       zlib-1.2.8.tar.gz.1
openssl-1.0.1t
[root@localhost src]# unzip fastdfs-master-V5.05.zip
[root@localhost src]# cd fastdfs-master-V5.05
-bash: cd: fastdfs-master-V5.05: 沒有那個文件或目錄
[root@localhost src]# ls
fastdfs-master                   openssl-1.0.1t
fastdfs-master-V5.05.zip         openssl-1.0.1t.tar.gz
fastdfs-nginx-module-master.zip  pcre-8.39
libfastcommon-master             pcre-8.39.tar.gz
libfastcommon-master.zip         zlib-1.2.8
nginx-1.10.0.tar.gz              zlib-1.2.8.tar.gz
ngx_cache_purge-2.3.tar.gz       zlib-1.2.8.tar.gz.1
[root@localhost src]# cd fastdfs-master
[root@localhost fastdfs-master]# ./make.sh
[root@localhost fastdfs-master]# ./make.sh install

執行以上幾步,
顯示:vim

[root@localhost fastdfs-master]# ./make.sh install
cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG        -c -o ../common/fdfs_global.o ../common/fdfs_global.c  -I../    common -I/usr/include/fastcommon
cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG        -c -o tracker_proto.o tracker_proto.c  -I../common -I/usr/  include/fastcommon
...
tracker_client.h storage_client.h storage_client1.h client_func.h       client_global.h fdfs_client.h /usr/include/fastdfs
if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/       client.conf /etc/fdfs/client.conf.sample; fi

即安裝完畢!瀏覽器

3 配置 Tracker 服務

上述安裝成功後,在/etc/目錄下會有一個fdfs的目錄,進入它。會看到三個.sample後綴的文件,這是做者給咱們的示例文件,咱們須要把其中的tracker.conf.sample文件改成tracker.conf配置文件並修改它。看命令:緩存

[root@localhost fastdfs-master]# cd /etc/fdfs
[root@localhost fdfs]# ls
client.conf.sample  storage.conf.sample  tracker.conf.sample
---
[root@localhost fdfs]# cp tracker.conf.sample tracker.conf
[root@localhost fdfs]# vim tracker.conf

打開tracker.conf文件,只須要找到你只須要該這兩個參數就能夠了。

# the base path to store data and log files
base_path=/data/fastdfs
# HTTP port on this tracker server
http.server_port=80

固然前提是你要有或先建立了/data/fastdfs目錄。port=22122這個端口參數不建議修改,除非你已經佔用它了。
修改完成保存並退出 vim ,這時候咱們可使用/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start來啓動 Tracker服務,可是這個命令不夠優雅,怎麼作呢?使用ln -s 創建軟連接:

ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin

這時候咱們就可使用service fdfs_trackerd start來優雅地啓動 Tracker服務了,是否是比剛纔帶目錄的命令好記太多了(懶是社會生產力)。你也能夠啓動過服務看一下端口是否在監聽,命令:

啓動服務:service fdfs_trackerd start
查看監聽:netstat -unltp|grep fdfs

啓動命令以下:

[root@localhost fdfs]# mkdir /data
[root@localhost fdfs]# mkdir /data/fastdfs
[root@localhost fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

看到22122端口正常被監聽後,這時候就算 Tracker服務安裝成功啦!

[root@localhost fdfs]# netstat -unltp | grep fdfs
tcp        0      0 0.0.0.0:22122           0.0.0.0:*
LISTEN      5895/fdfs_trackerd

四、配置 Storage 服務

如今開始配置 Storage 服務,因爲我這是單機器測試,你把 Storage 服務放在多臺服務器也是能夠的,它有 Group(組)的概念,同一組內服務器互備同步,這裏再也不演示。直接開始配置,依然是進入/etc/fdfs的目錄操做,首先進入它。會看到三個.sample後綴的文件,咱們須要把其中的storage.conf.sample文件改成storage.conf配置文件並修改它。還看命令:

cp storage.conf.sample storage.conf
vim storage.conf

指令操做:

[root@localhost fdfs]# cd /etc/fdfs
[root@localhost fdfs]# cp storage.conf.sample storage.conf
[root@localhost fdfs]# vim storage.conf

打開storage.conf文件後,找到這兩個參數進行修改:

# the base path to store data and log files
base_path=/data/fastdfs/storage
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/data/fastdfs/storage
#store_path1=/home/yuqing/fastdfs2
# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.198.129:22122

固然你的/data/fastdfs目錄下要有storage文件夾,沒有就建立一個,否則會報錯的,日誌以及文件都會在這個下面,啓動時候會自動生成許多文件夾。stroage的port=23000這個端口參數也不建議修改,默認就好,除非你已經佔用它了。
修改完成保存並退出 vim ,這時候咱們依然想優雅地啓動 Storage服務,帶目錄的命令不夠優雅,這裏仍是使用ln -s 創建軟連接:

ln -s /usr/bin/fdfs_storaged /usr/local/bin

執行命令啓動服務:

service fdfs_storaged start

出現了一個大大的error啦!!!要仔細看,錯誤提示是找不到文件夾,這就好辦了嘛。建立一個文件夾再次啓動看看。

[root@localhost fdfs]# /usr/bin/fdfs_storaged start
[2017-02-08 14:48:00] ERROR - file: shared_func.c, line: 968, /etc/fdfs/start is not a regular file
[2017-02-08 14:48:00] ERROR - file: process_ctrl.c, line: 230, load conf file "start" fail, ret code: 22

此次啓動成功,沒有錯誤了。查看一下監聽:

netstat -unltp|grep fdfs

監聽以下:

[root@localhost fdfs]# netstat -unltp|grep fdfs
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      5895/fdfs_trackerd  
tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      6001/fdfs_storaged

很好,22122 和 23000端口都在監聽了,這個時候你去/data/fastdfs/storage文件夾下看的話,會出現一大堆文件夾,並且進去還有一大堆,哈哈,這就是存放文件的啦!

5服務監聽測試

咱們安裝配置並啓動了 Tracker 和 Storage 服務,也沒有報錯了。那他倆是否是在通訊呢?咱們能夠監視一下:

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

看到我橫線處ACTIVE這樣就 ok 啦!

[root@localhost fdfs]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
[2017-02-08 14:51:16] DEBUG - base_path=/data/fastdfs/storage, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

server_count=1, server_index=0

tracker server is 192.168.160.130:22122

group count: 1

Group 1:
group name = group1
disk total space = 17878 MB
disk free space = 10198 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8888
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0

Storage 1:
    id = 192.168.160.130
    ip_addr = 192.168.160.130 (localhost.localdomain)  ACTIVE
    http domain = 
    version = 5.08
    join time = 2017-02-08 14:49:53
    up time = 2017-02-08 14:49:53

其實這個時候你就能夠進行上傳測試了,但可能會下載不了,

6 安裝 Nginx 和 fastdfs-nginx-module

解壓 fastdfs-nginx-module ,記着這時候別用tar解壓了,由於是 .zip 文件,正確命令:

unzip master.zip

1)配置 nginx 安裝,加入fastdfs-nginx-module模塊

這是和普通 Nginx 安裝不同的地方,由於加載了模塊。
若nginx未安裝,根據相關教程進行安裝,若已安裝,查看已安裝的nginx的版本,找到源碼的存放位置,而後配置fastdfs-nginx-module模塊

[root@localhost src]# cd /home/roo/下載/nginx-1.11.6
[root@localhost nginx-1.11.6]# ./configure --add-module=/usr/local/src/fastdfs-nginx-module-master/src/
checking for OS
 + Linux 3.10.0-327.36.3.el7.x86_64 x86_64
checking for C compiler ... found
[root@localhost nginx-1.11.6]# make && make install

這時候,咱們能夠看一下 Nginx 下安裝成功的版本及模塊,命令:

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

配置 fastdfs-nginx-module 和 Nginx

1.配置mod-fastdfs.conf,並拷貝到/etc/fdfs文件目錄下。

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

修改mod-fastdfs.conf配置只須要修改我標註的這三個地方就好了,其餘不須要也不建議改變。

# FastDFS tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=192.168.198.129:22122
# if the url / uri including the group name
# set to false when uri like /M00/00/00/xxx
# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx
# default value is false
url_have_group_name = true
    # store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
store_path0=/data/fastdfs/storage
#store_path1=/home/yuqing/fastdfs1

接着咱們須要把fastdfs-5.05下面的配置中尚未存在/etc/fdfs中的拷貝進去

cd /usr/local/src/fastdfs-5.05/conf
cp anti-steal.jpg http.conf mime.types /etc/fdfs/

2.配置 Nginx。編輯nginx.conf文件:

cd /usr/local/nginx/conf
vi nginx.conf

在配置文件中加入:

location /group1/M00 {
    root /data/fastdfs/storage/;
    ngx_fastdfs_module;
}

因爲咱們配置了group1/M00的訪問,咱們須要創建一個group1文件夾,並創建M00到data的軟連接。

mkdir /data/fastdfs/storage/data/group1
ln -s /data/fastdfs/storage/data /data/fastdfs/storage/data/group1/M00

啓動 Nginx ,會打印出fastdfs模塊的pid,看看日誌是否報錯,正常不會報錯的

/usr/local/nginx/sbin/nginx

打開瀏覽器,訪問一下發現並不能訪問,也並無報錯,但顯示以下畫面。糟糕了,怎麼辦?對了,我好像沒關閉防火牆。

開放80端口訪問權限。在iptables中加入重啓就行,或者你直接關閉防火牆,本地測試環境能夠這麼幹,但到線上萬萬不能關閉防火牆的。

vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重啓防火牆,使設置生效:

service iptables restart

再次刷新瀏覽器,能夠看到以下畫面,說明咱們 Nginx 結合 fastdfs-nginx-module 模塊安裝並配置成功啦!

我最後說一下怎麼在已經安裝過 Nginx 的服務器上安裝配置 fastdfs-nginx-module 模塊? 由於,通常咱們線上服務器都是已經安裝過 Nginx 的,因此這個時候,咱們就直接進入 Nginx 的存放目錄,進行配置後編譯,就不須要執行最後安裝make install這一步了,接着重啓就好了。

上傳測試

完成上面的步驟後,咱們已經安裝配置完成了所有工做,接下來就是測試了。由於執行文件所有在/usr/bin目錄下,咱們切換到這裏,並新建一個test.txt文件,隨便寫一點什麼,我寫了This is a test file. by:mafly這句話在裏邊。而後測試上傳:

cd /usr/bin
vim test.txt
fdfs_test /etc/fdfs/client.conf upload test.txt

很不幸,並無成功,報錯了。

ERROR - file: shared_func.c, line: 960, open file /etc/fdfs/client.conf fail, errno: 2, error info: No such file or directory
ERROR - file: ../client/client_func.c, line: 402, load conf file "/etc/fdfs/client.conf" fail, ret code: 2

通常什麼事情第一次都不是很順利,這很正常,經過錯誤提示我看到,好像沒有找到client.conf這個文件,如今想起來的確沒有配置這個文件,那咱們如今去配置一下圖中的兩個參數:

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

怎麼還依然報錯阿???

upload file fail, error no: 2, error info: No such file or directory

哈哈,你是否是測試上傳命令中要上傳的test.txt文件路徑有問題,嗯,那我改一下命令:

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/bin/test.txt

成功啦!!! 返回文件信息及上傳後的文件 HTTP 地址,你打開瀏覽器訪問一下試試

7.總結一下

接下來其實還有更多關於文件的工做,好比防盜鏈、圖片切圖、視頻處理等等。

1.防盜鏈的經常使用方案

>1.加token驗證
>2.將FastDFS返回的地址,轉化爲該地址的映射,經過中間件來進行轉換訪問

2.關於Storage集羣分組存儲方式

1.Storage server會鏈接集羣中全部的Tracker server,定時向他們報告本身的狀態,包括磁盤剩餘空間、文件同步情況、文件上傳下載次數等統計信息。

2.storage集羣由一個或多個組構成,集羣存儲總容量爲集羣中全部組的存儲容量之和。一個組由一臺或多臺存儲服務器組成,組內的Storage server之間是平等關係,不一樣組的Storage server之間不會相互通訊,同組內的Storage server之間會相互鏈接進行文件同步,從而保證同組內每一個storage上的文件徹底一致的。一個組的存儲容量爲該組內存儲服務器容量最小的那個,因而可知組內存儲服務器的軟硬件配置最好是一致的。採用分組存儲方式的好處是靈活、可控性較強。好比上傳文件時,能夠由客戶端直接指定上傳到的組也能夠由tracker進行調度選擇。一個分組的存儲服務器訪問壓力較大時,能夠在該組增長存儲服務器來擴充服務能力(縱向擴容)。當系統容量不足時,能夠增長組來擴充存儲容量(橫向擴容)。

3.關於上傳的文件備註信息NameValuePair(源文件細息)的存儲

原文件信息的存儲:

>1.在上傳文件時,寫入FastDfs中的該文件NameValuePair[]中,但此方式只能根據文件查看文件的備註信息,FastDfs沒有提供逆向查詢的方式;
>2.在關係型數據庫建立一張表,用於存儲該group下的全部文件信息,此方式能夠解決第一種方式的逆向查詢問題,同時能夠存儲FastDfs的文件信息;

8.FastDfs常見異常彙總

1. 上傳文件失敗,返回錯誤碼28,這是怎麼回事?

返回錯誤碼28,表示磁盤空間不足。注意FastDFS中有
預留空間的概念,在tracker.conf中設置,配置項爲
:reserved_storage_space,缺省值爲4GB,即預留
4GB的空間。請酌情設置reserved_storage_space這個
參數,好比能夠設置爲磁盤總空間的20%左右。

2. nginx擴展模塊,不能正常顯示圖片的問題

在配置文件/etc/fdfs/mod_fastdfs.conf中,缺省的
設置是這樣的:http.need_find_content_type=false
這個參數在nginx中須要設置爲true,apache中應該設置爲false

3. 如何刪除無效的storage server?

可使用fdfs_monitor來刪除。命令行以下:
/usr/local/bin/fdfs_monitor delete
例如:
/usr/local/bin/fdfs_monitor
/etc/fdfs/client.conf delete group1
192.168.0.100
注意:若是被刪除的storage server的狀態是ACTIVE
,也就是該storage server還在線上服務的狀況下,
是沒法刪除掉的。

4. 執行fdfs_test或fdfs_test1上傳文件時,服務器

返回錯誤號2 錯誤號2表示沒有ACTIVE狀態的storage server。能夠 執行fdfs_monitor查看服務器狀態。

相關文章
相關標籤/搜索