白寧超html
2017年4月15日09:11:52linux
摘要: FastDFS是一個開源的輕量級分佈式文件系統,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合中小文件(建議範圍:4KB < file_size <500MB),對以文件爲載體的在線服務,如相冊網站、視頻網站等。本文經過兩次單機環境配置均沒有錯誤,第1-4章節主要是對FastDFS背景發展原理及linux基本介紹,若是讀者只是安裝分佈式文件系統,只是想簡單關注其原理,建議閱讀第二節與第五節。若是讀者僅僅就是安裝爲目的建議直接閱讀弟五節5節。本人郵箱:datathinks@qq.com,主頁:http://www.cnblogs.com/baiboy/nginx
分佈式文件系統:Distributed file system, DFS,又叫作網絡文件系統:Network File System。一種容許文件經過網絡在多臺主機上分享的文件系統,可以讓多機器上的多用戶分享文件和存儲空間。git
特色:在一個分享的磁盤文件系統中,全部節點對數據存儲區塊都有相同的訪問權,在這樣的系統中,訪問權限就必須由客戶端程序來控制。分佈式文件系統可能包含的功能有:透通的數據複製與容錯。github
分佈式文件系統是被設計用在局域網。而分佈式數據存儲,則是泛指應用分佈式運算技術的文件和數據庫等提供數據存儲服務的系統。數據庫
決定因素:數據的存儲方式、數據的讀取速率、數據的安全機制。ubuntu
發展歷史:大體分爲三個發展階段,網絡文件系統(1980s)、共享SAN文件系統(1990s)、面向對象的並行文件系統(2000s)安全
概述:FastDFS是一個開源的輕量級分佈式文件系統,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合中小文件(建議範圍:4KB < file_size <500MB),對以文件爲載體的在線服務,如相冊網站、視頻網站等。服務器
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用來服務讀請求。
系統的基本操做 |
|
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工具:先下載而後找到文件拷貝桌面並解壓,隨後找到文件一路安裝。
虛擬機 |
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 |
切換到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配置路徑
|
(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
|
(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
在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
|
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
|