FastDFS分佈式文件系統

FastDFS分佈式文件系統

Ubuntu下FastDFS分佈式文件系統配置與部署

白寧超linux

2017年4月15日09:11:52nginx

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

相關文章

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

1 分佈式文件系統介紹


分佈式文件系統:Distributed file system, DFS,又叫作網絡文件系統:Network File System。一種容許文件經過網絡在多臺主機上分享的文件系統,可以讓多機器上的多用戶分享文件和存儲空間。git

特色:在一個分享的磁盤文件系統中,全部節點對數據存儲區塊都有相同的訪問權,在這樣的系統中,訪問權限就必須由客戶端程序來控制。分佈式文件系統可能包含的功能有:透通的數據複製與容錯。github

分佈式文件系統是被設計用在局域網。而分佈式數據存儲,則是泛指應用分佈式運算技術的文件和數據庫等提供數據存儲服務的系統。web

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

發展歷史:大體分爲三個發展階段,網絡文件系統(1980s)、共享SAN文件系統(1990s)、面向對象的並行文件系統(2000s)apache

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

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

6.6 測試上傳文件功能

1
2
3
4
5
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 來進行文件的上傳下載。

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

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

查看文件

(1) 在安裝Nginx以前,須要安裝以下(gcc/pcre/zlib/openssl)插件

查看zlib是否安裝

1
dpkg -l | grep zlib

下面是在ubuntu環境下的插件安裝,使用centos時採用不一樣的方式安裝:

Ubuntu插件安裝

1
2
3
4
5
6
7
8
9
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插件安裝

1
2
3
4
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

1
2
3
4
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模塊。

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

編譯安裝

Make

make install

查找安裝路徑

1
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文件目錄下

1
2
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中的拷貝進去

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

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

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

在配置文件中加入:

location /group1/M00 {

root /data/fastdfs/storage/;

ngx_fastdfs_module;

}

(4) 因爲咱們配置了group1/M00的訪問,咱們須要創建一個group1文件夾,並創建M00到data的軟連接。

1
2
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這句話在裏邊。而後測試上傳:

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

複製地址到瀏覽器查看

如上是完整的配置過程,若是須要創建集羣,只須要擴展服務器並對tracker和storage服務進行配置便可。各個服務器結點都須要安裝Nginx。

7 開機啓動服務

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

1
2
3
netstat -unltp|grep fdfs #查看服務
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

(2) 試Tracker 和 Storage 服務通訊

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

(3) 查看Nginx是否開啓:

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

(4) 測試上傳下載

1
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

相關文章
相關標籤/搜索