一、FastDFS介紹
簡介
FastDFS是一個開源的高性能分布式文件系統(DFS)。它的主要功能包括:文件存儲,文件同步和文件訪問,以及高容量和負載平衡。主要解決了海量數據存儲問題,特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務。
FastDFS系統三大角色:跟蹤服務器(Tracker Server)、存儲服務器(Storage Server)和客戶端(Client)。
- 跟蹤服務器(Tracker Server)
跟蹤服務器,主要做調度工作,起到均衡的作用;負責管理所有的 存儲服務器(Storage Server) 和 組(group),每個 storage 在啟動后會連接 跟蹤服務器Tracker,告知自己所屬 group 等信息,並保持周期性心跳。
- 存儲服務器(Storage Server)
存儲服務器,主要提供容量和備份服務;以 group 為單位,每個 group 內可以有多台 存儲服務器storage server,數據互為備份。
- 客戶端(Client)
客戶端,作為業務請求的發起方,通過專有接口,使用TCP/IP協議與跟蹤器服務器或存儲節點進行數據交互。
FastDFS的存儲策略
為了支持大容量,存儲節點(服務器)采用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷的文件容量累加就是整個存儲系統中的文件容量。一個卷可以由一台或多台存儲服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多台存儲服務器起到了冗余備份和負載均衡的作用。
在卷中增加服務器時,同步已有的文件由系統自動完成,同步完成后,系統自動將新增服務器切換到線上提供服務。當存儲空間不足或即將耗盡時,可以動態添加卷。只需要增加一台或多台服務器,並將它們配置為一個新的卷,這樣就擴大了存儲系統的容量。
FastDFS的文件上傳
FastDFS向使用者提供基本文件訪問接口,比如upload、download、append、delete等,通過客戶端的方式提供給用戶使用。
Storage Server會定期的向Tracker Server發送自己的存儲信息。當Tracker Server Cluster中的Tracker Server不止一個時,各個Tracker之間的關系是對等的,所以客戶端上傳時可以選擇任意一個Tracker。
當Tracker收到客戶端上傳文件的請求時,會為該文件分配一個可以存儲文件的group,當選定了group后就要決定給客戶端分配group中的哪一個storage server。當分配好storage server后,客戶端向storage發送寫文件請求,storage將會為文件分配一個數據存儲目錄。然后為文件分配一個fileid,最后根據以上的信息生成文件名存儲文件。
FastDFS的文件同步
寫文件時,客戶端將文件寫至group內一個storage server即認為寫文件成功,storage server寫完文件后,會由后台線程將文件同步至同group內其他的storage server。
每個storage寫文件后,同時會寫一份binlog,binlog里不包含文件數據,只包含文件名等元信息,這份binlog用於后台同步,storage會記錄向group內其他storage同步的進度,以便重啟后能接上次的進度繼續同步;進度以時間戳的方式進行記錄,所以最好能保證集群內所有server的時鍾保持同步。
storage的同步進度會作為元數據的一部分匯報到tracker上,tracke在選擇讀storage的時候會以同步進度作為參考。
FastDFS的文件下載
客戶端uploadfile成功后,會拿到一個storage生成的文件名,接下來客戶端根據這個文件名即可訪問到該文件。
跟upload file一樣,在downloadfile時客戶端可以選擇任意tracker server。tracker發送download請求給某個tracker,必須帶上文件名信息,tracke從文件名中解析出文件的group、大小、創建時間等信息,然后為該請求選擇一個storage用來服務讀請求。
部署結構圖
二、下載安裝使用(linux)
Windows暫時不能使用FastDFS,如果真的需要在Windows,通過docker使用。
0. 下載安裝libfastcommon環境
libfastcommon是從 FastDFS 和 FastDHT 中提取出來的公共 C 函數庫,基礎環境,安裝即可
① 下載libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
② 解壓
tar -zxvf V1.0.7.tar.gz
③ 編譯、安裝
cd libfastcommon-1.0.7
./make.sh
./make.sh install
cd /usr/lib64
ll libfast*
④ 復制libfastcommon.so 到 usr/lib
cp libfastcommon.so /usr/lib
cd /usr/lib
1. 下載安裝FastDFS
① 下載FastDFS
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
② 解壓FastDFS
tar -zxvf V5.11.tar.gz
③ 編譯安裝
進入解壓文件夾,通過以下命令
./make.sh
./make.sh install
2. 配置FastDFS服務
① 配置跟蹤服務器(tracker)
① 進入 /etc/fdfs,復制 FastDFS 跟蹤器樣例配置文件 tracker.conf.sample,並重命名為 tracker.conf。
# cd /etc/fdfs
# cp tracker.conf.sample tracker.conf
# vim tracker.conf
② 編輯tracker.conf ,標紅的需要修改下,其它的默認即可。
vim tracker.conf# 配置文件是否不生效,false 為生效
disabled=false# 提供服務的端口
port=22122# Tracker 數據和日志目錄地址(根目錄必須存在,子目錄會自動創建)
base_path=/ljzsg/fastdfs/tracker# HTTP 服務端口
http.server_port=80③ 創建tracker基礎數據目錄,在FastDFS安裝路徑下
cd fastdfs/
mkdir tracker
mkdir storage
mkdir client如果已存在,不用創建
④ 防火牆中打開跟蹤端口(默認的22122)
# vim /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT重啟防火牆:
# service iptables restart⑤ 啟動Tracker
初次成功啟動,會在 /{base_path}/fdfsdfs/tracker/ 下創建 data、logs 兩個目錄。也可以用這種方式啟動,
下面兩種,二選一。前提是上面創建了軟鏈接,后面都用這種方式啟動
# /etc/init.d/fdfs_trackerd start
# service fdfs_trackerd start
查看 FastDFS Tracker 是否已成功啟動 ,22122端口正在被監聽,則算是Tracker服務安裝成功。# netstat -unltp|grep fdfs
關閉Tracker命令:
# service fdfs_trackerd stop
⑥ 設置Tracker開機啟動
# chkconfig fdfs_trackerd on
或 # vim /etc/rc.d/rc.local:加入配置:/etc/init.d/fdfs_trackerd start
⑦ tracker server 目錄及文件結構
Tracker服務啟動成功后,會在base_path下創建data、logs兩個目錄。目錄結構如下:
${base_path} |__data | |__storage_groups.dat:存儲分組信息 | |__storage_servers.dat:存儲服務器列表 |__logs | |__trackerd.log: tracker server 日志文件
② 配置存儲服務器storage
1 進入 /etc/fdfs 目錄,復制 FastDFS 存儲器樣例配置文件 storage.conf.sample,並重命名為 storage.conf
# cd /etc/fdfs
# cp storage.conf.sample storage.conf
# vim storage.conf
2 編輯storage.conf
標紅的需要修改,其他的默認即可。
# 配置文件是否不生效,false 為生效
disabled=false# 指定此 storage server 所在 組(卷)
group_name=group1# storage server 服務端口
port=23000# 心跳間隔時間,單位為秒 (這里是指主動向 tracker server 發送心跳)
heart_beat_interval=30# Storage 數據和日志目錄地址(根目錄必須存在,子目錄會自動生成)
base_path=/ljzsg/fastdfs/storage# 存放文件時 storage server 支持多個路徑。這里配置存放文件的基路徑數目,通常只配一個目錄。
store_path_count=1
# 逐一配置 store_path_count 個路徑,索引號基於 0。
# 如果不配置 store_path0,那它就和 base_path 對應的路徑一樣。
store_path0=/ljzsg/fastdfs/file# FastDFS 存儲文件時,采用了兩級目錄。這里配置存放文件的目錄個數。
# 如果本參數只為 N(如: 256),那么 storage server 在初次運行時,會在 store_path 下自動創建 N * N 個存放文件的子目錄。
subdir_count_per_path=256# tracker_server 的列表 ,會主動連接 tracker_server
# 有多個 tracker server 時,每個 tracker server 寫一行
tracker_server=file.ljzsg.com:22122# 允許系統同步的時間段 (默認是全天) 。一般用於避免高峰同步產生一些問題而設定。
sync_start_time=00:00
sync_end_time=23:59
# 訪問端口
http.server_port=80
3 在安裝路徑中創建Storage基礎數據目錄,若已有則不用操作
4. 防火牆中打開存儲器端口(默認的 23000)
# vim /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT重啟防火牆:
# service iptables restart
5. 啟動Storage
啟動Storage前確保Tracker是啟動的。初次啟動成功,會在 /ljzsg/fastdfs/storage 目錄下創建 data、 logs 兩個目錄。
啟動
# /etc/init.d/fdfs_storaged start
# service fdfs_storaged start //大多用這種方式啟動
查看 Storage 是否成功啟動,23000 端口正在被監聽,就算 Storage 啟動成功。
# netstat -unltp|grep fdfs
關閉Storage命令:# service fdfs_storaged stop
查看Storage和Tracker是否在通信
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
6 設置 Storage 開機啟動
# chkconfig fdfs_storaged on
或者:
# vim /etc/rc.d/rc.local
加入配置:
/etc/init.d/fdfs_storaged start
③ 配置客戶端client
vim client.conf
# 修改 base_path=/fastdfs/client
# tracker_server=203.195.238.249:22122
# 測試 (先放一張圖片到/root/test/headImg.jpg)
fdfs_test /etc/fdfs/client.conf upload /root/test/headImg.jpg
# 返回路徑http://203.195.238.249/group1/M00/00/00/rBAAAl0EX5WAQtpGAACGZ5UrSuI275_big.jpg
目錄結構