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
shell> yum install make cmake gcc gcc-c++
[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
解壓 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步,安裝完畢,即完成第一步。數據庫
解壓 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
即安裝完畢!瀏覽器
上述安裝成功後,在/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 服務放在多臺服務器也是能夠的,它有 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文件夾下看的話,會出現一大堆文件夾,並且進去還有一大堆,哈哈,這就是存放文件的啦!
咱們安裝配置並啓動了 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
其實這個時候你就能夠進行上傳測試了,但可能會下載不了,
解壓 fastdfs-nginx-module ,記着這時候別用tar解壓了,由於是 .zip 文件,正確命令:
unzip master.zip
這是和普通 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
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/
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 地址,你打開瀏覽器訪問一下試試
接下來其實還有更多關於文件的工做,好比防盜鏈、圖片切圖、視頻處理等等。
>1.加token驗證 >2.將FastDFS返回的地址,轉化爲該地址的映射,經過中間件來進行轉換訪問
1.Storage server會鏈接集羣中全部的Tracker server,定時向他們報告本身的狀態,包括磁盤剩餘空間、文件同步情況、文件上傳下載次數等統計信息。
2.storage集羣由一個或多個組構成,集羣存儲總容量爲集羣中全部組的存儲容量之和。一個組由一臺或多臺存儲服務器組成,組內的Storage server之間是平等關係,不一樣組的Storage server之間不會相互通訊,同組內的Storage server之間會相互鏈接進行文件同步,從而保證同組內每一個storage上的文件徹底一致的。一個組的存儲容量爲該組內存儲服務器容量最小的那個,因而可知組內存儲服務器的軟硬件配置最好是一致的。採用分組存儲方式的好處是靈活、可控性較強。好比上傳文件時,能夠由客戶端直接指定上傳到的組也能夠由tracker進行調度選擇。一個分組的存儲服務器訪問壓力較大時,能夠在該組增長存儲服務器來擴充服務能力(縱向擴容)。當系統容量不足時,能夠增長組來擴充存儲容量(橫向擴容)。
原文件信息的存儲:
>1.在上傳文件時,寫入FastDfs中的該文件NameValuePair[]中,但此方式只能根據文件查看文件的備註信息,FastDfs沒有提供逆向查詢的方式; >2.在關係型數據庫建立一張表,用於存儲該group下的全部文件信息,此方式能夠解決第一種方式的逆向查詢問題,同時能夠存儲FastDfs的文件信息;
返回錯誤碼28,表示磁盤空間不足。注意FastDFS中有
預留空間的概念,在tracker.conf中設置,配置項爲
:reserved_storage_space,缺省值爲4GB,即預留
4GB的空間。請酌情設置reserved_storage_space這個
參數,好比能夠設置爲磁盤總空間的20%左右。
在配置文件/etc/fdfs/mod_fastdfs.conf中,缺省的
設置是這樣的:http.need_find_content_type=false
這個參數在nginx中須要設置爲true,apache中應該設置爲false
可使用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還在線上服務的狀況下,
是沒法刪除掉的。
返回錯誤號2 錯誤號2表示沒有ACTIVE狀態的storage server。能夠 執行fdfs_monitor查看服務器狀態。