淺析FastDFS及所遇問題集錦

1、FastDFS簡介 php

FastDFS(最新版本v3.04)是一個開源的輕量級分佈式文件系統,它用純C語言實現,支持Linux、FreeBSD、AIX等UNIX系統。它只能經過專有API對文件進行存取訪問,不支持POSIX接口方式,不能mount使用,不是系統級的分佈式文件系統,而是應用級的分佈式文件存儲服務。 nginx

2、FastDFS用途 web

1)FastDFS主要解決了大容量的文件存儲和高併發訪問的問題,文件存取時實現了負載均衡。 apache

2)FastDFS實現了軟件方式的RAID,可使用廉價的IDE硬盤進行存儲 ,支持存儲服務器在線擴容。 服務器

3)FastDFS特別適合大中型網站使用,用來存儲資源文件(如:圖片、文檔、音頻、視頻等等。 網絡

3、FastDFS原理 併發

存儲節點採用了分組(group)的方式。存儲系統由一個或多個group組成,group與group之間的文件是相互獨立的,全部group的文件容量累加就是整個存儲系統中的文件容量。一個group能夠由一臺或多臺存儲服務器組成,一個group下的存儲服務器中的文件都是相同的,group中的多臺存儲服務器起到了冗餘備份和負載均衡的做用(一個組的存儲容量爲該組內存儲服務器容量最小的那個,不一樣組的Storage server之間不會相互通訊,同組內的Storage server之間會相互鏈接進行文件同步)。 負載均衡

在group中增長服務器時,同步已有的文件由系統自動完成,同步完成後,系統自動將新增服務器切換到線上提供服務。 分佈式

當存儲空間不足或即將耗盡時,能夠動態添加group。只須要增長一臺或多臺服務器,並將它們配置爲一個新的group,這樣就擴大了存儲系統的容量。 高併發

FastDFS只有兩個角色:Tracker server和Storage server。Tracker server做爲中心結點,其主要做用是負載均衡和調度。Tracker server在內存中記錄分組和Storage server的狀態等信息,不記錄文件索引信息,佔用的內存量不多。另外,客戶端(應用)和Storage server訪問Tracker server時,Tracker server掃描內存中的分組和Storage server信息,而後給出應答。由此能夠看出Tracker server很是輕量化,不會成爲系統瓶頸。

FastDFS中的Storage server在其餘文件系統中一般稱做Trunk server或Data server。Storage server直接利用OS的文件系統存儲文件。FastDFS不會對文件進行分塊存儲,客戶端上傳的文件和Storage server上的文件一一對應(FastDFS中的文件標識分爲兩個部分:組名和文件名,兩者缺一不可)。

4、Nginx環境調用FastDFS要求

1)編譯安裝 nginx時附帶 fastdfs-nginx-module 模塊 –add-module=/root/fastdfs-nginx-module/src

2)修改 nginx 配置文件增長 ngx_fastdfs_module;

3)編譯fastdfs_client.so php擴展模塊

4)修改 php.ini 讓 php-fpm 支持fastdfs_client 擴展模塊 extension = fastdfs_client.so

注意:若是要使fastdfs支持web和開機自動腳本(默認是不支持的),須要修改make.sh文件

#WITH_HTTPD=1

#WITH_LINUX_SERVICE=1

(由於是給nginx添加fastdfs模塊,因此不須要fastdfs支持 http 因此就不須要去掉 #WITH_HTTPD=1 前的註釋了)。

5、所遇問題

1. FastDFS適用的場景以及不適用的場景?

FastDFS是爲互聯網應用量身定作的一套分佈式文件存儲系統,很是適合用來存儲用戶圖片、視頻、文檔等文件。對於互聯網應用,和其餘分佈式文件系統相比,優點很是明顯。FastDFS沒有對文件作分塊存儲,所以不太適合分佈式計算場景。

2. FastDFS須要的編譯和運行環境是怎樣的?

FastDFS Server僅支持unix系統,在Linux和FreeBSD測試經過。在Solaris系統下網絡通訊方面有些問題。編譯須要的其餘庫文件有pthread和libevent。pthread使用系統自帶的便可。對libevent的版本要求爲1.4.x,建議使用最新的stable版本,如1.4.14b。注意,千萬不要使用libevent 2.0 stable之前的版本。

3. 啓動storage server時,一直處於僵死狀態。

啓動storage server,storage將鏈接tracker server,若是連不上,將一直重試。直到鏈接成功,啓動纔算真正完成。

出現這樣狀況,請檢查鏈接不上tracker server的緣由。

友情提示:從V2.03之後,多tracker server在啓動時會作時間上的檢測,判斷是否須要從別的tracker server同步4個系統文件。

觸發時機是第一個storage server鏈接上tracker server後,併發起join請求。

若是集羣中有2臺tracker server,而其中一臺tracker沒有啓動,可能會致使storage server一直處於僵死狀態。

4. 執行fdfs_test或fdfs_test1上傳文件時,服務器返回錯誤號2

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

5. 如何刪除無效的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還在線上服務的狀況下,是沒法刪除掉的。

6. nginx和apache擴展模塊與FastDFS server版本對應關係

擴展模塊1.05: 針對FastDFs server v2.x,要求server版本大於等於v2.09

擴展模塊1.07及以上版本: 針對FastDFs server v3.x

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

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

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

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

相關文章
相關標籤/搜索