1. 程式人生 > >分散式檔案系統FastDFS詳解

分散式檔案系統FastDFS詳解

本文轉載自:Ubuntu下FastDFS分散式檔案系統配置與部署

Ubuntu下FastDFS分散式檔案系統配置與部署

白寧超

2017年4月15日09:11:52

摘要: FastDFS是一個開源的輕量級分散式檔案系統,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題。特別適合中小檔案(建議範圍:4KB < file_size <500MB),對以檔案為載體的線上服務,如相簿網站、視訊網站等。本文通過兩次單機環境配置均沒有錯誤,第1-4章節主要是對FastDFS背景發展原理及linux基本介紹,如果讀者只是安裝分散式檔案系統,只是想簡單關注其原理,建議閱讀第二節與第五節。如果讀者僅僅就是安裝為目的建議直接閱讀弟五節5節。本人郵箱:

[email protected],主頁:http://www.cnblogs.com/baiboy/

1 分散式檔案系統介紹


分散式檔案系統:Distributed file system, DFS,又叫做網路檔案系統:Network File System。一種允許檔案通過網路在多臺主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間。

特點:在一個分享的磁碟檔案系統中,所有節點對資料儲存區塊都有相同的訪問權,在這樣的系統中,訪問許可權就必須由客戶端程式來控制。分散式檔案系統可能包含的功能有:透通的資料複製與容錯。

分散式檔案系統是被設計用在區域網。而分散式資料儲存,則是泛指應用分散式運算技術的檔案和資料庫等提供資料儲存服務的系統。

決定因素:資料的儲存方式、資料的讀取速率、資料的安全機制。

發展歷史:大致分為三個發展階段,網路檔案系統(1980s)、共享SAN檔案系統(1990s)、面向物件的並行檔案系統(2000s)

概述:FastDFS是一個開源的輕量級分散式檔案系統,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題。特別適合中小檔案(建議範圍:4KB < file_size <500MB),對以檔案為載體的線上服務,如相簿網站、視訊網站等。

2 系統架構介紹


FastDFS由跟蹤伺服器(Tracker Server)、儲存伺服器(Storage Server)和客戶端(Client)構成。

跟蹤伺服器Tracker Server

主要做排程工作,起到均衡的作用;負責管理所有的 storage server和 group,每個 storage 在啟動後會連線 Tracker,告知自己所屬 group 等資訊,並保持週期性心跳。tracker根據storage的心跳資訊,建立group==>[storage serverlist]的對映表。

Tracker需要管理的元資訊很少,會全部儲存在記憶體中;另外tracker上的元資訊都是由storage彙報的資訊生成的,本身不需要持久化任何資料,這樣使得tracker非常容易擴充套件,直接增加tracker機器即可擴充套件為tracker cluster來服務,cluster裡每個tracker之間是完全對等的,所有的tracker都接受stroage的心跳資訊,生成元資料資訊來提供讀寫服務。

儲存伺服器Storage Server

主要提供容量和備份服務;以 group 為單位,每個 group 內可以有多臺 storage server,資料互為備份。以group為單位組織儲存能方便的進行應用隔離、負載均衡、副本數定製(group內storage server數量即為該group的副本數),比如將不同應用資料存到不同的group就能隔離應用資料,同時還可根據應用的訪問特性來將應用分配到不同的group來做負載均衡;缺點是group的容量受單機儲存容量的限制,同時當group內有機器壞掉時,資料恢復只能依賴group內地其他機器,使得恢復時間會很長。

group內每個storage的儲存依賴於本地檔案系統,storage可配置多個數據儲存目錄,比如有10塊磁碟,分別掛載在/data/disk1-/data/disk10,則可將這10個目錄都配置為storage的資料儲存目錄。storage接受到寫檔案請求時,會根據配置好的規則選擇其中一個儲存目錄來儲存檔案。為了避免單個目錄下的檔案數太多,在storage第一次啟動時,會在每個資料儲存目錄裡建立2級子目錄,每級256個,總共65536個檔案,新寫的檔案會以hash的方式被路由到其中某個子目錄下,然後將檔案資料作為本地檔案儲存到該目錄中。

客戶端Client

主要是上傳下載資料的伺服器,也就是我們自己的專案所部署在的伺服器。每個客戶端伺服器都需要安裝Nginx

基本架構如下圖所示。

 

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用來服務讀請求。

3 FastDFS效能方案

4 Linux基本命令操作


 

系統的基本操作

Ctrl+Alt+shift+Fn 切換終端

ls –l 檢視

su - username 切換登入

Reboot 重啟

pwd 當前路徑

shutdown -r now 關機

whereis filename 檔案路徑

rm –rf 刪除

touch 檔名 建立檔案

cp path1 path2 複製檔案

mkdir 建立目錄

mv 移動改名

Vi環境

vi filename 開啟檔案

i 插入

Esc 退出

dd 刪除行

x Esc下刪除

wq 儲存

a 插入游標後面

o 插入下一行

hjkl 左下上右

Ctrl+b 向後翻頁

Ctrl+f 向前翻頁

/ Esc下查詢

r 替換游標處文字

u 撤銷

壓縮與解壓

gzip 壓縮gz檔案

unzip 解壓zip

tar -czvf file1 file2 壓縮

tar -zxvf file 解壓.tar.gz

linux系統修改編碼

#vi /etc/sysconfig/i18n 將原內容

1 2 LANG= "en_US.UTF-8" SYSFONT= "latarcyrheb-sun16"

修改為

1 2 3 4 5 6 7 LANG= "zh_CN.GB18030"   LANGUAGE= "zh_CN.GB18030:zh_CN.GB2312:zh_CN"   SUPPORTED= "zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"   SYSFONT= "lat0-sun16"

Ubuntu初始化root密碼:

1 sudo passwd

Ubuntu配置VmwareTools工具:先下載然後找到檔案拷貝桌面並解壓,隨後找到檔案一路安裝。

5 安裝VirtualBox虛擬機器並配置Ubuntu


 

6 Ubuntu環境下安裝並配置FastDFS


 

虛擬機器

Oracle VM VirtualBox

作業系統

Ubuntu16.04

Fastdfs必備軟體(本文軟體下載均採用wget方式)

fastdfs-5.05 、 fastdfs-nginx-module-v1.16 、 libfastcommon-v1.0.7

Nginx

nginx-1.10.1 

Fastdfs主頁

https://github.com/happyfish100/fastdfs

聯網模式

NAT自動轉換模式

IP地址

自動生成,ifconfig檢視,本文是10.0.2.15

返回頂部

6.1 基本操作與配置

切換到root角色操作:sudo passwd #修改root許可權密碼

建立必要資料夾

1 2 3 4 5 6 mkdir /software #下載tar.zp軟體包並安裝 mkdir /software/testfile #上載檔案測試資料夾 mkdir /data #fastdfs根檔案 mkdir /data/fastdfs/track #tracker檔案配置路徑 mkdir /data/fastdfs/storage #storage配置路徑 mkdir /data/fastdfs/cli    ntlog #client配置路徑

返回頂部

6.2 安裝libfastcommon與FastDFS

(1) 下載安裝libfastcommon

1 2 cd /software wget https: //github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

解壓 libfastcommon:

tar -zxvf V1.0.7.tar.gz

進入libfastcommon-1.0.7裡面,進行編譯和安裝:

1 2 3 cd libfastcommon-1.0.7 ./make.sh ./make.sh install

(2) 下載安裝 FastDFS,這裡也是通過wget下載。

1 2 cd /software wget https: //github.com/happyfish100/fastdfs/archive/V5.05.tar.gz

1 2 3 4 tar -zxvf V5.05.tar.gz cd fastdfs-5.05 ./make.sh ./make.sh install

返回頂部

6.3 配置Tracker、Storage、Clent、HTTP服務

(1) 配置Tracker服務

1.6.2操作成功後,進入/etc/fdfs目錄。會看到三個.sample字尾的檔案,均是作者給我們的示例檔案,我們需要將其中的tracker.conf.sample檔案改為tracker.conf配置檔案並修改它。

1 2 3 4 cd /etc/fdfs ls cp tracker.conf.sample tracker.conf # 配置跟蹤檔案 vi tracker.conf # 進入conf檔案

進入conf檔案後完成以下引數的修改:

# the base path to store data and log files

base_path=/data/fastdfs/track # 修改跟蹤路徑

# HTTP port on this tracker server

http.server_port=80 # 修改埠號

完成以上操作之後即配置好tracker服務,採用以下方式啟動服務,檢視監聽:

1 2 3 export LD_LIBRARY_PATH=/usr/lib64/ /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf netstat -unltp|grep fdfs #檢視服務

(2) 配置Storage服務

本文采用單機器測試,你把 Storage 服務放在多臺伺服器也是可以的,它有 Group(組)的概念,同一組內伺服器互備同步。

1 2 3 cd /etc/fdfs cp storage.conf.sample storage.conf # 修改儲存路徑 vi storage.conf # 修改儲存檔案

進入conf檔案後完成以下引數的修改:

group_name=group1 # 修改組名

# the base path to store data and log files

base_path=/data/fastdfs/storage # 修改儲存路徑

# store_path#, based 0, if store_path0 not exists, it's value is base_path

# the paths must be exist

store_path0=/data/fastdfs/storage #這裡可以設定多個儲存伺服器

#store_path1=/home/yuqing/fastdfs2

# tracker_server can ocur more than once, and tracker_server format is

# "host:port", host can be hostname or ip address

tracker_server=10.0.2.15:22122 # 改為本地ip,檢視本地ip:ifconfig

http.server_port=8888 # 設定埠號,如果沒有衝突儘量預設

完成以上操作之後即配置好storage服務,採用以下方式啟動服務,檢視監聽:

1 2 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf netstat -unltp|grep fdfs #檢視服務

(3) 配置Clint服務

1 2 3 cd /etc/fdfs cp clint.conf.sample clint.conf #修改客戶端路徑檔案 vi clint.conf

進入conf檔案後完成以下引數的修改:

base_path=/data/fastdfs/clintlog #設定客戶端儲存路徑

tracker_server=10.0.2.15:22122 #改為本地ip

http.tracker_server_port=80

#include http.conf 注意,#include http.conf 這句,原配置檔案中有2個#,刪掉一個。

(4) 配置HTTP服務

1 2 3 cp /software/fastdfs-5.05/conf/http.conf /etc/fdfs/http.conf # 配置http服務檔案 cd /etc/fdfs vi http.conf

進入conf檔案後完成以下引數的修改:

http.anti_steal.token_check_fail=/data/fastdfs/httppic/anti-steal.jpg

返回頂部

6.4 設定環境變數和軟連結

在32位ubuntu中,libfastcommon會安裝在/usr/lib 中,64位系統則安裝在 /usr/lib64 中。依次執行以下命令:(根據自己的作業系統選擇路徑)

1 export LD_LIBRARY_PATH=/usr/lib64/

或者手動修改

1 2 vi /etc/ld.so.conf下配置/usr/lib64 ldconfig

軟連結:

1 ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
返回頂部

6.5 檢視tracker和storage服務執行情況

1 netstat -unltp|grep fdfs #檢視服務

如果沒有正常執行,啟動服務命令如下:

1 2 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

測試Tracker 和 Storage 服務通訊

1 /usr/bin/fdfs_monitor /etc/fdfs/storage.conf