1. FastDFS適用的場景以及不適用的場景
? ? FastDFS是為互聯(lián)網(wǎng)應(yīng)用量身定做的一套分布式文件存儲系統(tǒng),非常適合用來存儲圖片、音頻、視頻、文檔等文件。對于互聯(lián)網(wǎng)應(yīng)用,簡潔高效的FastDFS和其他分布式文件系統(tǒng)相比,優(yōu)勢非常明顯。具體情況大家可以查閱相關(guān)介紹文檔,如:FastDFS架構(gòu)設(shè)計文檔等等。
? ? 出于簡潔考慮,F(xiàn)astDFS沒有對文件做分塊存儲,因此不太適合分布式計算場景。
2. 服務(wù)器時間必須保持一致
? ? 因?yàn)镕astDFS的精巧設(shè)計不需要存儲文件索引,F(xiàn)astDFS通過比較時間戳來判斷文件是否同步完成。因此集群內(nèi)的服務(wù)器時間要保持一致,各臺服務(wù)器的時間差值不要超過1秒。建議采用NTP對時服務(wù)。
3. too many open files錯誤的解決方法
?? 日志中報打開文件過多的錯誤,是因?yàn)橄到y(tǒng)允許一個進(jìn)程打開的文件數(shù)設(shè)置太小了。Linux環(huán)境下的解決辦法,修改文件/etc/security/limits.conf,在文件尾部添加如下代碼(如果已經(jīng)存在則修改相應(yīng)數(shù)值):
root soft nofile 65535
root hard nofile 65535
?* soft nofile 65535
?* hard nofile 65535
? ? 注:只配置最后兩行不就可以了嗎,為啥還要單獨(dú)為root用戶配置呢?查了網(wǎng)上資料,說是*這樣的通配符對root用戶無效,所以root需要單獨(dú)配置(嗯,阿里云ECS就配置了上面這4行)。
4. FastDFS服務(wù)啟停
? ? FastDFS server程序自帶start、stop和restart指令,命令行示例如下:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf? [start | stop | restart]
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf? [start | stop |?restart]
? ? 可以使用kill或者killall正常殺掉 fdfs_trackerd 和?fdfs_storaged 進(jìn)程,但
千萬不要加上-9參數(shù)強(qiáng)殺,否則可能會導(dǎo)致binlog數(shù)據(jù)丟失等問題。
5. FastDFS支持?jǐn)帱c(diǎn)續(xù)傳嗎?
? ? 上傳和下載文件均可支持。
? ? 對于文件上傳,需要先上傳appender類型的文件,然后使用append方法。
? ? 如果要上傳超過1GB的大文件,建議采用append方式分多次上傳,比如每次上傳64MB。需要先創(chuàng)建appender類型的文件,可以創(chuàng)建空的appender文件。
? ? ?對于超大文件,如果想支持多線程上傳以加快上傳速度,可以采用如下4個步驟實(shí)現(xiàn):
? ? ? 1)上傳appender類型的文件,上傳內(nèi)容可以為空;
? ? ? 2)? 調(diào)用truncate方法將該appender文件設(shè)置為最終文件大??;
? ? ? 3)調(diào)用modify方法并發(fā)上傳文件分片,直至上傳完成;
? ? ? 4)【可選】如果以后不再對該文件進(jìn)行modify和append,可以調(diào)用regenerate_appender_filename方法生成normal類型的文件。
? ? 對于文件下載,F(xiàn)astDFS可以指定文件偏移量和獲取的文件內(nèi)容大小。利用這個特性,文件下載可以實(shí)現(xiàn)斷點(diǎn)續(xù)傳以及多線程下載。
6. Java SDK非線程安全
? ?FastDFS提供的Java SDK是非線程安全的,有人已經(jīng)踩過這個坑了。包括負(fù)責(zé)與tracker server交互的TrackerClient、與storage server直接通信的StorageClient 和?StorageClient1 這三個類均是非線程安全的。
? ?為啥會出現(xiàn)兩個StorageClient字樣的類名呢?二者實(shí)現(xiàn)功能完全一樣,StorageClient是group和filename分離的用法,StorageClient1是group和filename合體用法(文件ID)。通常使用StorageClient1就好。
? ? 大家在部署和使用FastDFS的過程中有任何疑問,歡迎在FastCFS 技術(shù)交流群或微信公眾號交流。我可以根據(jù)大家的反饋和交流結(jié)果,繼續(xù)整理FastDFS常見問題。