分布式文件系統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
- VirtualBox虛擬機安裝參照:http://jingyan.baidu.com/article/73c3ce280755f8e50243d945.html
- VirtualBox下安裝ubuntu參照:http://jingyan.baidu.com/article/2009576197fd24cb0721b409.html
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
|
分布式文件系統FastDFS詳解