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


FastDFS安裝全過程記錄

1、安裝准備

HA虛擬IP:192.168.1.208

HA軟件:Keepalived

操作系統:CentOS 7

用戶:root

數據目錄:/data/fastdfs

安裝包:

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圖片緩存清除模塊

獲取安裝包的方式:

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目錄中。

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

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

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

2、開始安裝

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,命令:

[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,命令:

[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

執行以上幾步,
顯示:

[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  

4、配置 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查看服務器狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM