一文搞定FastDFS分散式檔案系統配置與部署

伏草惟存發表於2017-04-15

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

白寧超

2017年4月15日09:11:52

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

相關文章

  1. 【FastDFS分散式檔案系統】 Ubuntu下FastDFS分散式檔案系統配置與部署
  2. 【Oracle RAC叢集系統】 OracleRAC叢集搭建系列文章
  3. 【MySql資料庫叢集搭建】   真機環境下MySQL-Cluster搭建文件
  4. 【Hadoop叢集搭建】Hadoop叢集的配置系列文章

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 將原內容

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

修改為

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密碼:

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許可權密碼

建立必要資料夾

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

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裡面,進行編譯和安裝:

cd libfastcommon-1.0.7
./make.sh
./make.sh install

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

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

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配置檔案並修改它。

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服務,採用以下方式啟動服務,檢視監聽:

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

(2) 配置Storage服務

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

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服務,採用以下方式啟動服務,檢視監聽:

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

(3) 配置Clint服務

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服務

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 中。依次執行以下命令:(根據自己的作業系統選擇路徑)

export LD_LIBRARY_PATH=/usr/lib64/

或者手動修改

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

軟連結:

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

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

netstat -unltp|grep fdfs #檢視服務

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

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

測試Tracker 和 Storage 服務通訊

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

6.6 測試上傳檔案功能

cd /software/testfile
ls
touch test.txt
vi test.txt
fdfs_test /etc/fdfs/client.conf upload /software/testfile/test.txt

見到上述結果證明測試成功。複製url地址到web瀏覽器中檢視:

現在只是支援上傳,還不支援下載功能。下文是配置檔案下載,

6.7 安裝Nginx 和 fastdfs-nginx-module,pcre,zlib

上文並配置啟動了 Tracker 和 Storage 服務,已經可以上傳檔案了。下文需要配合 Nginx 來進行檔案的上傳下載。

cd /software
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz

wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip

檢視檔案

(1) 在安裝Nginx之前,需要安裝如下(gcc/pcre/zlib/openssl)外掛

檢視zlib是否安裝

dpkg -l | grep zlib

下面是在ubuntu環境下的外掛安裝,使用centos時採用不同的方式安裝:

Ubuntu外掛安裝

openssl安裝:
sudo apt-get install openssl libssl-dev
pcre安裝:  
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install openssl libssl-dev
zlib安裝:
sudo apt-get install zlib1g-dev
gcc安裝:
sudo apt-get install build-essential

CentOS外掛安裝

gcc安裝:yum install gcc-c++
pcre安裝:yum install -y pcre pcre-devel
zlib安裝:yum install -y zlib zlib-devel
OpenSSL安裝:yum install -y openssl openssl-devel

(2) 接下來可以安裝Nginx

cd /software
# wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1

配置 nginx 安裝,加入fastdfs-nginx-module模組。

./configure --add-module=/software/ fastdfs-nginx-module-master/src/

編譯安裝

Make

make install

查詢安裝路徑

whereis nginx

啟動、停止nginx

cd /usr/local/nginx/sbin/

./nginx #啟動

./nginx -s stop #此方式相當於先查出nginx程式id再使用kill命令強制殺掉程式

./nginx -s quit #:此方式停止步驟是待nginx程式處理任務完畢進行停止。

./nginx -s reload

(3) 查詢nginx程式:

ps aux|grep nginx

(4) 設定開機自啟動即在rc.local增加啟動程式碼、。(可略過此步)

vi /etc/rc.local

增加一行

/usr/local/nginx/sbin/nginx

設定執行許可權:

chmod 755 rc.local

6.8 配置fastdfs-nginx-module 和 Nginx

(1) 配置mod-fastdfs.conf,並拷貝到/etc/fdfs檔案目錄下

cd /software/fastdfs-nginx-module-master/src/
vi mod_fastdfs.conf

對conf檔案作以下修改

# valid only when load_fdfs_parameters_from_tracker is true

tracker_server=10.0.2.15:22122

# default value is false

url_have_group_name = true

# must same as storage.conf

store_path0=/data/fastdfs/storage

#store_path1=/home/yuqing/fastdfs1

cp mod_fastdfs.conf /etc/fdfs

(2) 把fastdfs-5.05下面的配置中還沒有存在/etc/fdfs中的拷貝進去

cd /software/fastdfs-5.05/conf
cp anti-steal.jpg http.conf mime.types /etc/fdfs/

(3) 配置Nginx,編輯nginx.config

cd /usr/local/nginx/conf
vi nginx.conf

在配置檔案中加入:

location /group1/M00 {

root /data/fastdfs/storage/;

ngx_fastdfs_module;

}

(4) 由於我們配置了group1/M00的訪問,我們需要建立一個group1資料夾,並建立M00到data的軟連結。

mkdir /data/fastdfs/storage/data/group1
ln -s /data/fastdfs/storage/data /data/fastdfs/storage/data/group1/M00

(5) 啟動 Nginx ,會列印出fastdfs模組的pid,正常不會報錯的

/usr/local/nginx/sbin/nginx

(6) 在瀏覽器中輸入IP10.0.2.15地址,可以看到如下畫面,說明我們 Nginx 結合 fastdfs-nginx-module 模組安裝並配置成功啦。可以跳過1.6.9

6.9 關閉防火牆

真實環境不要這麼做,預設安裝時防火牆是關閉的,開放80埠訪問許可權。在iptables中加入重啟就行,或者你直接關閉防火牆,    本地測試環境可以這麼幹,但到線上萬萬不能關閉防火牆的。

vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重啟防火牆,使設定生效:

service iptables restart

6.10 上傳測試

因為執行檔案全部在/usr/bin目錄下,我們切換到這裡,並新建一個test.txt檔案,隨便寫一點什麼,我寫了This is a test file. by:mafly這句話在裡邊。然後測試上傳:

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/bin/test.txt

複製地址到瀏覽器檢視

如上是完整的配置過程,如果需要建立叢集,只需要擴充套件伺服器並對tracker和storage服務進行配置即可。各個伺服器結點都需要安裝Nginx。

7 開機啟動服務

(1) 啟動開機檢查Tracker、Storage服務是否開啟:

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

(2) 試Tracker 和 Storage 服務通訊

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

(3) 檢視Nginx是否開啟:

ps aux|grep nginx
/usr/local/nginx/sbin/nginx

(4) 測試上傳下載

fdfs_test /etc/fdfs/client.conf upload /software/testfile/test.txt

8 參考文獻

[1] FastDFS Github, https://github.com/happyfish100

[2] FastDFS 分散式檔案儲存, https://community.qingcloud.com/topic/321/%E5%88%86%E5%B8%83%E5%BC%8F%E6%96%87%E4%BB%B6%E5%AD%98%E5%82%A8fastdfs-%E4%B8%80-%E5%88%9D%E8%AF%86fastdfs

[3] FastDFS 簡單瞭解,http://www.cnblogs.com/mafly/p/fastdfs.html

[4] FastDFS 在CentOS下配置安裝部署,http://blog.mayongfa.cn/192.html

[5] FastDFS 配置Nginx模組及上傳測試,http://blog.mayongfa.cn/193.html

[6] 分散式儲存CentOS6.5虛擬機器環境搭建FastDFS-5.0.5叢集,http://www.cnblogs.com/PurpleDream/p/4510279.html

[7] Hadoop 分散式檔案系統:架構和設計,https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html

[8] FastDFS安裝使用實踐,http://soartju.iteye.com/blog/803477

[9] FastDFS安裝部署操作手冊,http://blog.csdn.net/XingJames/article/details/52759876

[10] FastDFS安裝和配置,http://www.ctolib.com/docs/sfile/Linux-Tutorial/FastDFS-Install-And-Settings.html

[11] Ubuntu下安裝並配置FastDFS,http://www.linuxdiyf.com/linux/27518.html

[12] 多機安裝部署,http://blog.csdn.net/ricciozhang/article/details/49402273

 

相關文章