FastDFS的介紹

#FastDFS的介紹 ##FastDFSnode

FastDFS是由國人餘慶所開發,其項目地址:
		https://github.com/happyfish100
	FastDFS是一個輕量級的開源分佈式文件系統,主要解決了大容量的文件存儲和高併發訪問的問題,文件存取時實現了負載均衡。
	FastDFS是一款類Google FS的開源分佈式文件系統,它用純C語言實現,支持Linux、FreeBSD、AIX等UNIX系統。
	FastDFS只能經過專有API對文件進行存取訪問,不支持POSIX接口方式,不能mount使用。
	準確地講,Google FS以及FastDFS、mogileFS、 HDFS、TFS等類Google FS都不是系統級的分佈式文件系統,而是應用級的分佈式文件存儲服務。

##FastDFS的特性nginx

1》分組存儲,靈活簡潔、對等結構,不存在單點
	2》文件ID由FastDFS生成,做爲文件訪問憑證,FastDFS不須要傳統的name server
	3》和流行的web server無縫銜接,FastDFS已提供apache和nginx擴展模塊
	4》大、中、小文件都可以很好支持,支持海量小文件存儲
	5》 支持多塊磁盤,支持單盤數據恢復
	6》 支持相同文件內容只保存一份,節省存儲空間
	7》 存儲服務器上能夠保存文件附加屬性
	8》 下載文件支持多線程方式,支持斷點續傳

##FastDFS架構圖 git

FastDFS架構解讀
		只有兩個角色,tracker server和storage server,不須要存儲文件索引信息
		全部服務器都是對等的,不存在Master-Slave關係
		存儲服務器採用分組方式,同組內存儲服務器上的文件徹底相同(RAID 1)
		不一樣組的storage server之間不會相互通訊
		由storage server主動向tracker server報告狀態信息,tracker server之間一般不會相互通訊

##系統架構-上傳文件流程圖 github

1》client詢問tracker上傳到的storage;
	2》tracker返回一臺可用的storage;
	3》client直接和storage通訊完成文件上傳,storage返回文件ID。

##系統架構-下載文件流程圖 web

1》client詢問tracker下載文件的storage,參數爲文件ID(組名和文件名);
	2》tracker返回一臺可用的storage;
	3》client直接和storage通訊完成文件下載。

##Fast同步機制apache

採用binlog文件記錄更新操做,根據binlog進行文件同步
	同一組內的storage server之間是對等的,文件上傳、刪除等操做能夠在任意一臺storage server上進行;
	文件同步只在同組內的storage server之間進行,採用push方式,即源服務器同步給目標服務器;
	源頭數據才須要同步,備份數據不須要再次同步,不然就構成環路了;
	上述第二條規則有個例外,就是新增長一臺storage server時,由已有的一臺storage server將已有的全部數據(包括源頭數據和備份數據)同步給該新增服務器。

##FastDFS用戶請求過程 服務器

##FastDFS核心組件多線程

Tracker:
		調度器,負責維持集羣的信息,例如各group及其內部的storage node,這些信息也是storage node報告所生成,每一個storagenode會週期性向tracker發心跳信息;
	storage server:
		以group爲單位進行組織,任何一個storage server都應該屬於某個group,一個group應該包含多個storage server,在同一個group內部,各storage server的數據互相冗餘;

##FastDFS運行機制架構

如何在組中挑選storage server:
		1》rr;
		2》以ip爲次序,找第一個,即IP地址較小者;
		3》以優先級爲序,找第一個;
	如何選擇磁盤(存儲路徑):
		1》rr;
		2》剩餘可用空間大者優先;
	生成FID:
		由源頭storage server ip、建立時的時間戳、大小、文件的校驗碼和一個隨機數進行hash計算後生成;
		最後基於base64進行文本編碼,轉換爲可打印字符;
		groupID/MID/H1ID/H2ID/file_name
		groupID:組編號
		MID:存儲路徑(存儲設備)編號
		H1ID/H2ID:目錄分層
		file_name:文件名,不一樣於用戶上傳時使用文件名,而是由服務器生成hash文件名;
		服務器IP、文件建立時的時間戳、文件大小、文件名和擴展名;
	文件同步:
		每一個storage server在文件存儲完成後,會將其信息存於binlog, binlog不包含數據,僅包含文件名等元數據信息,binlog可用於同步;

##FastDFS配置修改併發

Tracker:
		編輯tracker server配置文件tracker.conf,須要修改內容以下:
		disabled=false(默認爲false,表示是否無效)
		port=22122(默認爲22122)
		base_path=/data/fastdfs/tracker
	storage server:
		disabled=false(默認爲false,表示是否無效)
		port=23000(默認爲23000)
		base_path=/data/fastdfs/storage
		tracker_server=172.18.10.232:22122
		store_path0=/data/fastdfs/storage
		http.server_port=8888(默認爲8888,nginx中配置的監聽端口那之一致)

##FastDFS經常使用命令

1》查看存儲節點狀態
		# fdfs_monitor /etc/fdfs/client.conf
	2》上傳測試
		fdfs_test <config_file> upload <local_filename> [FILE | BUFF | CALLBACK]
	3》文件上傳
		fdfs_upload_file /etc/fdfs/client.conf /root/solo-2.2.0.war
	4》文件查看
		fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/rBH7vFoax3KANb_FAUlr7-L-yRM9.0.war
	5》文件下載
		fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBH7vFoax3KANb_FAUlr7-L-yRM9.0.war

##FastDFS實現nginx代理

1》安裝nginx以及對應模塊
	2》修改nginx的location配置,映射路徑和啓動模塊
		location /group1/M00 {
			root /data/fdfs/store/data;
			ngx_fastdfs_module;
		}
	3》修改對應fastdfs模塊
		url_have_group_name = true
		tracker_server=172.17.252.234:22122
相關文章
相關標籤/搜索