天天看點

FastDFS常見問題

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

FastDFS是為網際網路應用量身定做的一套分布式檔案存儲系統,非常适合用來存儲使用者圖檔、視訊、文檔等檔案。對于網際網路應用,和其他分布式檔案系統相比,優勢非常明顯。具體情況大家可以看相關的介紹文檔,包括FastDFS介紹PPT等等。

出于簡潔考慮,FastDFS沒有對檔案做分塊存儲,是以不太适合分布式計算場景。

2. FastDFS需要的編譯和運作環境是怎樣的?

FastDFS Server僅支援unix系統,在Linux和FreeBSD測試通過。在Solaris系統下網絡通信方面有些問題。

編譯需要的其他庫檔案有pthread,V5.0以前的版本依賴libevent;V5.0以後,不再依賴libevent。

v5.04開始依賴libfastcommon,github位址:https://github.com/happyfish100/libfastcommon

v5版本從v5.05開始才是穩定版本,請使用v5版本的同學盡快更新到v5.05或更新的版本,建議更新到v5.08。

pthread使用系統自帶的即可。

對libevent的版本要求為1.4.x,建議使用最新的stable版本,如1.4.14b。

注意,千萬不要使用libevent 2.0非stable版本。

測試了一下,libevent 2.0.10是可以正常工作的。

在64位系統下,可能需要自己在/usr/lib64下建立libevent.so的符号連結。比如:

ln -s /usr/lib/libevent.so /usr/lib64/libevent.so

在ubuntu 11及後續版本,可能會出現找不到動态庫pthread庫,解決方法參見:http://bbs.chinaunix.net/thread-2324388-1-2.html

若出現libfastcommon版本不比對問題,請執行如下指令:/bin/rm -rf /usr/local/lib/libfastcommon.so /usr/local/include/fastcommon

3. 有人在生産環境中使用FastDFS嗎?

答案是肯定的。據我所知,截止2012年底至少有25家公司在使用FastDFS,其中有好幾家是做網盤的公司。

其中存儲量最大的一家,叢集中存儲group數有400個,存儲伺服器超過800台,存儲容量達到6PB,檔案數超過1億,Group持續增長中。。。

以下是使用FastDFS的使用者清單:

  某大型網盤(因對方要求對公司名保密,就不提供名字了。有400個group,存儲容量達到了6PB,檔案數超過1億) 

  UC (http://www.uc.cn/,存儲容量超過10TB)

  支付寶(http://www.alipay.com/)

  京東商城(http://www.360buy.com/)

  淘淘搜(http://www.taotaosou.com/)

  飛信(http://feixin.1008**/)

  趕集網(http://www.ganji.com/)

  淘米網(http://www.61.com/)

  迅雷(http://www.xunlei.com/)

  螞蜂窩(http://www.mafengwo.cn/)

  丫丫網(http://www.iyaya.com/)

  虹網(http://3g.ahong.com)

  5173(http://www.5173.com/)

  華夏原創網(http://www.yuanchuang.com/)

  華師京城教育雲平台(http://www.hsjdy.com.cn/)

  視友網(http://www.cuctv.com/)

  搜道網(http://www.sodao.com/)

  58同城(http://www.58.com/)

  商務聯盟網(http://www.biz72.com/)

  中青網(http://www.youth.cn/)

  缤麗網 (http://www.binliy.com/)

  飛視雲視訊(http://www.freeovp.com/)

  夢芭莎(http://www.moonbasa.com/)

  活動幫(www.eventsboom.com)

  51CTO(http://www.51cto.com/)

  搜房網(http://www.soufun.com/)

4、如何讓server程序退出運作?

直接kill即可讓server程序正常退出,可以使用killall指令,例如:

killall fdfs_trackerd

killall fdfs_storaged

也可以使用如下指令:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop

千萬不要使用-9參數強殺,否則可能會導緻binlog資料丢失的問題。

5、如何重新開機server程序?

直接使用:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

6、跨營運商通信異常問題

比如電信和網通機房互相通信,可能會存在異常,有兩種表現:

  1)不能建立連接配接,這個比較直接,肯定是網絡連接配接的問題

  2)可以正常建立連接配接,但接收和發送資料失敗,這個問題比較隐蔽,正常網絡環境下,不應該出現此類問題。

       還有人碰到過從一個方向建立連接配接可以正常通信,但從另外一個方向就不能正常通信的情況。

解決辦法:

  嘗試将服務端口改小,建議将端口修改為1024以下。比如将storage服務端口由23000修改為873等,也可以試試修改為8080

  如果問題還不能解決,請聯系你的網絡(機房)服務商。

7、fdfs_test和fdfs_test1是做什麼用的?

   這兩個是FastDFS自帶的測試程式,會對一個檔案上傳兩次,分别作為主檔案和從檔案。傳回的檔案ID也是兩個。

   并且會上傳檔案附加屬性,storage server上會生成4個檔案。

   這兩個程式僅用于測試目的,請不要用作實際用途。

   V2.05提供了比較正式的三個小工具:

      上傳檔案:/usr/bin/fdfs_upload_file  <config_file> <local_filename>

      下載下傳檔案:/usr/bin/fdfs_download_file <config_file> <file_id> [local_filename]

       删除檔案:/usr/bin/fdfs_delete_file <config_file> <file_id>

8、什麼是主從檔案?

主從檔案是指檔案ID有關聯的檔案,一個主檔案可以對應多個從檔案。

    主檔案ID = 主檔案名 + 主檔案擴充名

    從檔案ID = 主檔案名 + 從檔案字尾名 + 從檔案擴充名

使用主從檔案的一個典型例子:以圖檔為例,主檔案為原始圖檔,從檔案為該圖檔的一張或多張縮略圖。

FastDFS中的主從檔案隻是在檔案ID上有聯系。FastDFS server端沒有記錄主從檔案對應關系,是以删除主檔案,FastDFS不會自動删除從檔案。

删除主檔案後,從檔案的級聯删除,需要由應用端來實作。

主檔案及其從檔案均存放到同一個group中。

主從檔案的生成順序:

  1)先上傳主檔案(如原檔案),得到主檔案ID

  2)然後上傳從檔案(如縮略圖),指定主檔案ID和從檔案字尾名(當然還可以同時指定從檔案擴充名),得到從檔案ID。

9、如何删除無效的storage server?

可以使用fdfs_monitor來删除。指令行如下:

/usr/bin/fdfs_monitor <config_filename> delete <group_name> <storage_id>

例如:

/usr/bin/fdfs_monitor /etc/fdfs/client.conf delete group1 192.168.0.100

注意:如果被删除的storage server的狀态是ACTIVE,也就是該storage server還線上上服務的情況下,是無法删除掉的。

         storage_id參數:如果使用預設的ip方式,填寫storage server IP位址,否則使用對應的server id。

10、FastDFS擴充子產品更新到V1.06及以上版本的注意事項

apache和nginx擴充子產品版本v1.06及以上版本,需要在配置檔案/etc/fdfs/fastdfs_mod.conf中設定storage server的存儲路徑資訊。

一個示例如下所示:

store_path_count=1

store_path0=/home/yuqing/fastdfs

store_path_count和store_path#均需要正确設定,必須和storage.conf中的相應配置完全一緻,否則将導緻檔案不能正确下載下傳!

11、nginx和apache擴充子產品與FastDFS server版本對應關系

    擴充子產品1.05:  針對FastDFs server v2.x,要求server版本大于等于v2.09

    擴充子產品1.07及以上版本:  針對FastDFs server v3.x

    具體的版本比對情況,參閱擴充子產品源碼下的HISTORY檔案

12、上傳檔案失敗,傳回錯誤碼28,這是怎麼回事?

  傳回錯誤碼28,表示磁盤空間不足。注意FastDFS中有預留白間的概念,在tracker.conf中設定,配置項為:reserved_storage_space,預設值為4GB,即預留4GB的空間。

  請酌情設定reserved_storage_space這個參數,比如可以設定為磁盤總空間的20%左右。

13、上傳檔案失敗,傳回錯誤碼28,這是怎麼回事?

  傳回錯誤碼28,表示磁盤空間不足。注意FastDFS中有預留白間的概念,在tracker.conf中設定,配置項為:reserved_storage_space,預設值為4GB,即預留4GB的空間。

  請酌情設定reserved_storage_space這個參數,比如可以設定為磁盤總空間的20%左右。

14、fdfs_trackerd或者fdfs_storaged的日志中出現:malloc task buff failed字樣的錯誤,這是怎麼回事?

  出現此類資訊表示已經達到最大連接配接數。server端支援的最大連接配接數可以通過max_connections這個參數來設定。

  出現這樣的問題,需要排查一下是否用戶端使用不當導緻的,比如用戶端沒有及時關閉無用的連接配接。

15、FastDFS的檔案ID中可以反解出哪些字段?

檔案ID中除了包含group name和存儲路徑外,檔案名中可以反解出如下幾個字段:

  1)檔案建立時間(unix時間戳,32位整數)

  2)檔案大小

  3)上傳到的源storage server IP位址(32位整數)

  4)檔案crc32校驗碼

  5)随機數(這個字段用來避免檔案重名)

16、為什麼生成的token驗證無法通過?

  出現這樣的問題,請進行如下兩項檢查:

  1)确認調用token生成函數,傳遞的檔案ID中沒有包含group name。傳遞的檔案ID格式形如:M00/00/1B/wKgnVE84utyOG9hEAAATz5-S0SI99.java

  2)确認伺服器時間基本是一緻的,注意伺服器時間不能相差太多,不要相差到分鐘級别。

17、最新程式包的下載下傳位址是什麼?

   因google code不支援上傳程式包,最新的程式包可以在sourceforge上下載下傳,下載下傳位址:https://sourceforge.net/projects/fastdfs/files/

18、FastDFS支援斷點續傳嗎?

   可以支援。先上傳appender類型的檔案,然後使用apend函數。

繼續閱讀