FASTDFS是什么
FastDFS是由國人余慶所開發,其項目地址:https://github.com/happyfish100
FastDFS是一個輕量級的開源分布式文件系統,主要解決了大容量的文件存儲和高並發訪問的問題,文件存取時實現了負載均衡。
FastDFS是一款類Google FS的開源分布式文件系統,它用純C語言實現,支持Linux、FreeBSD、AIX等UNIX系統。它只能通過 專有API對文件進行存取訪問,不支持POSIX接口方式,不能mount使用。准確地講,Google FS以及FastDFS、mogileFS、 HDFS、TFS等類Google FS都不是系統級的分布式文件系統,而是應用級的分布式文件存儲服務。
FastDFS的特性
2、 文件ID由FastDFS生成,作為文件訪問憑證。FastDFS不需要傳統的name server
3、和流行的web server無縫銜接,FastDFS已提供apache和nginx擴展模塊
| FastDFS |
mogileFS |
|
| 系統簡潔性 |
簡潔,只有兩個角色:tracker和storage |
一般,有三個角色:tracker,storage和存儲文件信息的mysql db |
| 系統性能 |
很高(沒有數據庫,文件同步直接點對點,不經過tracker中轉) |
高(使用mysql來存儲文件索引等信息文件同步通過tracker調度和中轉) |
| 系統穩定性 |
高(c語言開發,可以支持高並發和高負載) |
一般(Perl語言開發,高並發和高負載支持一般) |
| RAID方式 |
分組(組內冗余),靈活性大 |
動態冗余,靈活性一般 |
| 通信協議 |
專有協議 下載文件支持http |
http |
| 技術文檔 |
較詳細 |
較少 |
| 文件附加屬性(meta data) |
支持 |
不支持 |
| 相同內容文件只保存一分 |
支持 |
不支持 |
| 下載文件時支持文件偏移量 |
支持 |
不支持 |
| FastDFS |
NFS |
集中存儲設備如:NetApp,NAS |
|
| 線性擴容性 |
高 |
差 |
差 |
| 文件高並發訪問性能 |
高 |
差 |
一般 |
| 文件訪問方式 |
專有API |
POSIX |
支持POSIX |
| 硬件成本 |
較低 |
中等 |
高 |
| 相同文件內容只保存一份 |
支持 |
不支持 |
不支持 |

工作方式:客戶端向tracker發出請求,然后tracker從storage節點拿到源數據,返還給客戶端,然后客戶端根據源數據再去請求storage節點。
FastDFS架構解讀
1.只有兩個角色,tracker server和storage server,不需要存儲文件索引信息
2.所有服務器都是對等的,不存在Master-Slave關系
3.存儲服務器采用分組方式,同組內存儲服務器上的文件完全相同(RAID 1)
5.由storage server主動向tracker server報告狀態信息,tracker server之間通常不會相互通信
系統架構-上傳文件流程圖

1. client詢問tracker上傳到的storage;
3. client直接和storage通信完成文件上傳,storage返回文件ID。
•系統架構-下載文件流程圖

1. client詢問tracker下載文件的storage,參數為文件ID(組名和文件名);
FastDFS同步機制
1.采用binlog文件記錄更新操作,根據binlog進行文件同步同一組內的storage server之間是對等的,文件上傳、刪除等操作可以在任意一台storage server上進行;
2.文件同步只在同組內的storage server之間進行,采用push方式,即源服務器同步給目標服務器;
源頭數據才需要同步,備份數據不需要再次同步,否則就構成環路了;
3.上述第二條規則有個例外,就是新增加一台storage server時,由已有的一台storage server將已有的所有數據(包括源頭數據和備份數據)同步給該新增服務器。
FastDFS用戶請求過程

FastDFS核心組件
Tracker:調度器,負責維持集群的信息,例如各group及其內部的storage node,這些信息也是storage node報告所生成;每個storage node會周期性向tracker發心跳信息;
storage server:以group為單位進行組織,任何一個storage server都應該屬於某個group,一個group應該包含多個storage server;在同一個group內部,各storage server的數據互相冗余;
FastDFS運行機制
如何在組中挑選storage server:
如何選擇磁盤(存儲路徑):
生成FID:
由源頭storage server ip、創建時的時間戳、大小、文件的校驗碼和一個隨機數進行hash計算后生成;最后基於base64
groupID/MID/H1ID/H2ID/file_name
file_name:文件名,不同於用戶上傳時使用文件名,而是由服務器生成hash文件名;
文件同步:
每個storage server在文件存儲完成后,會將其信息存於binlog, binlog不包含數據,僅包含文件名等元數據信息;
FastDFS配置修改
tracker:
編輯tracker server配置文件tracker.conf,需要修改內容如下:
disabled=false(默認為false,表示是否無效)
base_path=/data/fastdfs/tracker
storage server:
disabled=false(默認為false,表示是否無效)
base_path=/data/fastdfs/storage
tracker_server=172.18.10.232:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默認為8888,nginx中配置的監聽端口那之一致)
實驗:企業級分布式存儲應用與實戰fastdfs實現
實驗環境:3台機器,一台tracker調度器,兩台storage節點服務器
(1)安裝fastdfs
1.創建一個安裝fastdfs所需軟件包的目錄
2.用lftp將安裝fastdfs所需軟件包下載到該目錄里
lftp 172.17.0.1:/pub/Sources/7.x86_64/fastdfs> mget *

yum localinstall fastdfs* lib* -y 因為有依賴關系,所以和依賴的庫文件包一起安裝

4.另外兩台機器也是如此
(2)配置tracker調度器
cp tracker.conf.sample tracker.conf 在/etc/fdfs目錄下有一個tracker配置文件模板,將其復制並改名為tracker.conf作為tarcker的配置文件
disabled=false(默認為false,表示是否無效)
base_path=/data/fastdfs/tracker
mdkir /data/fastdfs/tracker -p
/etc/init.d/fdfs_trackerd start 啟動tracker服務
注意:路徑和創建的目錄要一致,不要寫錯,否則tracker服務就會起不來

(3)配置storage節點服務器
cp storage.conf.sample storage.conf 在/etc/fdfs目錄下有一個storage配置文件模板,將其復制並改名為storage.conf作為storage的配置文件
disabled=false(默認為false,表示是否無效)
base_path=/data/fastdfs/storage
tracker_server=172.18.10.232:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默認為8888,nginx中配置的監聽端口那之一致)
mkdir /data/fastdfs/storage -p
/etc/init.d/fdfs_storaged start 啟動storage服務
注意:路徑和創建的目錄要一致,不要寫錯,否則storage服務就會起不來

(4)查看存儲節點狀態,需要配置客戶端配置文件
cp client.conf.sample client.conf
base_path=/data/fastdfs/tracker
tracker_server=192.168.10.190:22122
fdfs_monitor /etc/fdfs/client.conf 查看存儲節點狀態

(5)文件上傳
fdfs_upload_file /etc/fdfs/client.conf /root/solo-2.2.0.war


6.上傳文件查看(在調度器上查看)
fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKgKu1ocsWGADh40AABakQQUHpk839.log

fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgKu1ocsWGADh40AABakQQUHpk839.log

8.FastDFS實現nginx代理(在storage節點)
1、安裝nginx以及對應模塊
2、修改nginx的location配置,映射路徑和啟動模塊
root /data/fastdfs/storage/data;
3、修改對應fastdfs模塊
vim /etc/fdfs/mod_fastdfs.conf
tracker_server=192.168.10.190:22122
store_path0=/data/fastdfs/storage
4.啟動nginx服務
5.然后我上傳一個圖片文件

6.在瀏覽器上去訪問,訪問成功

