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分布式文件系統配置與部署 )
相關文章
- 【FastDFS分布式文件系統】 Ubuntu下FastDFS分布式文件系統配置與部署
- 【Oracle RAC集群系統】 OracleRAC集群搭建系列文章
- 【MySql數據庫集群搭建】 真機環境下MySQL-Cluster搭建文檔
- 【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
- 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主頁 |
|
聯網模式 |
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