分布式文件系統(tǒng)
1.分布式文件系統(tǒng)是什么
分布式文件系統(tǒng)(Distributed File System)是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點上全肮,而是通過計算機網(wǎng)絡(luò)與節(jié)點(可簡單的理解為一臺計算機)相連。分布式文件系統(tǒng)的設(shè)計基于客戶機/服務(wù)器模式友浸。一個典型的網(wǎng)絡(luò)可能包括多個供多用戶訪問的服務(wù)器片吊。另外吓揪,對等特性允許一些系統(tǒng)扮演客戶機和服務(wù)器的雙重角色监憎。例如庆揩,用戶可以“發(fā)表”一個允許其他客戶機訪問的目錄膳叨,一旦被訪問洽洁,這個目錄對客戶機來說就像使用本地驅(qū)動器一樣
上述來自百度百科的介紹。通俗來說就是:
傳統(tǒng)的文件系統(tǒng)管理的文件是存儲在本機菲嘴。例如我們在桌面創(chuàng)建個文件饿自,或者刪除文件都是在本機上操作汰翠,
-
分布式文件系統(tǒng)管理的文件存儲在很多機器上,這些機器通過網(wǎng)絡(luò)相互連接昭雌,被統(tǒng)一管理复唤。無論是上傳還是下載文件都通過管理中心來訪問。如圖:
2.分布式文件系統(tǒng)類型
分布式文件系統(tǒng)類型有很多城豁,主流的幾種類型如下:
-
NFS
最早由Sun微系統(tǒng)公司作為TCP/IP網(wǎng)上的文件共享系統(tǒng)開發(fā)苟穆。Sun公司估計大約有超過310萬個系統(tǒng)在運行NFS,大到大型計算機唱星、小至PC機雳旅,其中至少有80%的系統(tǒng)是非Sun平臺
-
AFS
AFS是一種分布式的文件系統(tǒng)用來共享與獲得在計算機網(wǎng)絡(luò)中存放的文件。AFS使得用戶獲得網(wǎng)絡(luò)文件就像本地機器般方便间聊。AFS文件系統(tǒng)被稱為“分布式”是因為文件可以分散地存放在很多不同的機器上攒盈,但這些文件對于用戶而言是可及的,用戶可以通過一定的方式得到這些文件哎榴。
-
GFS
Google公司為了存儲海量搜索數(shù)據(jù)而設(shè)計的專用文件系統(tǒng)型豁。是一個可擴展的分布式文件系統(tǒng),用于大型的尚蝌、分布式的迎变、對大量數(shù)據(jù)進行訪問的應(yīng)用。它運行于廉價的普通硬件上飘言,并提供容錯功能衣形。它可以給大量的用戶提供總體性能較高的服務(wù)
-
KFS
是開始軟件自主研發(fā)基于JAVA的純分布式文件系統(tǒng),通過HTTP WEB為企業(yè)的各種信息系統(tǒng)提供底層文件存儲及訪問服務(wù),搭建企業(yè)私有云存儲服務(wù)平臺
-
DFS
DFS是AFS的一個版本姿鸿,作為開放軟件基金會(OSF)的分布式計算環(huán)境DCE中的文件系統(tǒng)部分谆吴。
如果文件的訪問僅限于一個用戶,那么分布式文件系統(tǒng)就很容易實現(xiàn)苛预【淅牵可惜的是,在許多網(wǎng)絡(luò)環(huán)境中這種限制是不現(xiàn)實的热某,必須采取并發(fā)控制來實現(xiàn)文件的多用戶訪問腻菇,表現(xiàn)為如下幾個形式:
只讀共享 任何客戶機只能訪問文件,而不能修改它昔馋,這實現(xiàn)起來很簡單筹吐。
受控寫操作 采用這種方法,可有多個用戶打開一個文件绒极,但只有一個用戶進行寫修改骏令。而該用戶所作的修改并不一定出現(xiàn)在其它已打開此文件的用戶的屏幕上。
并發(fā)寫操作 這種方法允許多個用戶同時讀寫一個文件垄提。但這需要操作系統(tǒng)作大量的監(jiān)控工作以防止文件重寫榔袋,并保證用戶能夠看到最新信息周拐。這種方法即使實現(xiàn)得很好,許多環(huán)境中的處理要求和網(wǎng)絡(luò)通信量也可能使它變得不可接受
3.FastDFS
3.1 介紹
FastDFS是由淘寶的余慶先生所開發(fā)的一個輕量級凰兑、高性能的開源分布式文件系統(tǒng)妥粟。百度百科的介紹如下:
簡單總結(jié)為,其特點如下:
- 文件存儲
- 文件同步
- 文件訪問(文件上傳吏够,下載)
- 大容量的存儲和負載均衡
- 在線擴容勾给。
特別適合一些大容量存儲的系統(tǒng)。例如相冊網(wǎng)站锅知,視頻網(wǎng)站等等播急。當(dāng)然除了FastDFS例外還有一些其他的分布式系統(tǒng)也能存儲。例如上面介紹的那些分布式文件系統(tǒng)售睹。還是有HDFS(Hadoop),TFS(淘寶)等等
3.2 架構(gòu)圖
解釋:
- Client 是我們?nèi)ミB接FastDFS的客戶端桩警。例如我們是java客戶端去連接,那么client就是 java客戶端
- Track Server 跟蹤服務(wù)器 相當(dāng)于我們的管理中心昌妹,主要做調(diào)度工作捶枢,負責(zé)調(diào)度Storage 節(jié)點和Client之間的通信。同時在訪問上也有負載均衡的作用飞崖,以及記錄storage節(jié)點運行狀態(tài)烂叔。是連接Client和Storage server的樞紐
- Storage Server 存儲服務(wù)器。主要存儲文件和元數(shù)據(jù)(meta data),每一個strorage 都會啟動一個單獨的線程向 跟蹤服務(wù)器集群(Track cluster)里面的 Track匯報其狀態(tài)信息固歪。例如 磁盤的使用情況蒜鸡,文件同步情況,上傳下載次數(shù)等等昼牛。這其實跟微服務(wù)思想很相似术瓮。每一個服務(wù)向注冊中心發(fā)送心跳康聂。
- Group 文件組贰健,一個組里面包含了多臺 Storage Server,加入上傳到同一組的內(nèi)的任何個一臺機器后,同組內(nèi)其他機器就會同步到其他信息上恬汁,相當(dāng)于其他機器就是這臺機器的副本伶椿。達到文件備份效果。不同的組保存的數(shù)據(jù)是獨立的氓侧,相互不干擾脊另,不通信。假如當(dāng)所有的組文件存儲滿了约巷,我們還可以再增加組偎痛,這就是水平擴容。
- Track cluster 跟蹤服務(wù)器集群独郎,多臺跟蹤服務(wù)器組成
- Storage cluster 存儲服務(wù)器集群踩麦,多個組構(gòu)成
3.3 安裝(普通安裝 單機版)
-
上傳要用到的軟件
-
更新apt(切換到root用戶下枚赡,后面所有操作都在root用戶下操作)
apt-get update
-
安裝build_essential(包含了 gcc g++ make)
apt-get install build-essential
-
安裝libtool(用庫支持腳本,將共享庫的使用隱藏在一個一致的可移植的接口后面)
apt-get install libtool
-
安裝unzip 用來解壓 zip
apt-get install unzip zip
-
解壓libfastcommon(FastDFS依賴于這個)
unzip libfastcommon-master.zip
-
進入該目錄編譯安裝
cd libfastcommon-master ./make.sh ./make.sh install
-
安裝FastDFS - 解壓FastDFS
tar -zxvf FastDFS_v5.08.tar.gz
-
安裝FastDFS - 編譯安裝
cd FastDFS ./make.sh ./make.sh install
-
檢驗安裝結(jié)果
ll /etc/init.d/ | grep fdfs
fdfs_storaged storage啟動腳本
fdfs_trackerd tracker啟動腳本
-
配置文件模板
ll /etc/fdfs
這里面都是配hi文件的模板
-
啟動tracker
在我們編譯安裝FastDFS過程中,Tracker 和 Storage 已經(jīng)都被安裝了谓谦,所以我們直接啟動就可以贫橙,但是Tracker和Storage所需的配置文件不同,所以我們就修改一下不同的配置文件
-
修改Tracker配置文件反粥,先把Tracke模板配置文件復(fù)制一份
-
打開
tracker
并修改vim ./tracker.conf
當(dāng)然我們目錄是不存在的卢肃,我們就新建一個這樣的目錄
-
啟動Tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start #啟動 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart #重啟
-
-
啟動Storage
-
修改配置文件
創(chuàng)建剛剛我們修改的目錄
-
-
啟動
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start #啟動 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart #重啟
-
查看進程
ps -ef | grep fdfs
-
修改 client
這個是用來測試文件上傳
4.上傳文件
-
時序圖
-
創(chuàng)建文件
-
上傳文件
group1/M00/00/00/wKiphl6pa1-ARR-tAAAABRnOxBs74.html # group1 組名 # M00 對應(yīng) store_path0 也就是存儲路徑 # 00/00 磁盤路徑
查詢存儲文件的目錄
5.訪問文件
5.1 為什么需要安裝Nginx
通過上面的操作我們已經(jīng)可以去上傳文件了,但是文件上傳后我們沒有辦法通過瀏覽器去進行訪問才顿。因為在FastDFS 4.x 版本以后移除了 http支持莫湘。即使沒有移除也有以下缺陷:
(借鑒:https://www.php.cn/nginx/421962.html)
在使用FastDFS部署一個分布式文件系統(tǒng)的時候,通過FastDFS的客戶端API來進行文件的上傳郑气、下載逊脯、刪除等操作。
同時通過FastDFS的HTTP服務(wù)器來提供HTTP服務(wù)竣贪。但是FastDFS的HTTP服務(wù)較為簡單军洼,無法提供負載均衡等高性能的服務(wù),所以FastDFS的開發(fā)者—淘寶的架構(gòu)師余慶先生演怎,為我們提供了Nginx上使用的FastDFS模塊(也可以叫FastDFS的Nginx模塊)匕争。
FastDFS通過Tracker服務(wù)器,將文件放在Storage服務(wù)器存儲,但是同組之間的服務(wù)器需要復(fù)制文件,有延遲的問題.假設(shè)Tracker服務(wù)器將文件上傳到了storage1。
文件ID已經(jīng)返回客戶端,這時,后臺會將這個文件復(fù)制到storage2,如果復(fù)制沒有完成,客戶端就用這個ID在192.168.1.30取文件,肯定會出現(xiàn)錯誤爷耀。
所以我們可以采用Nginx的反向代理幫助我們?nèi)ミM行進行圖片的訪問甘桑。余慶先生提供了一個Nginx的FastDFS模塊。我們只需要將這個模塊集成到Nginx里面去歹叮,通過Nginx的反向代理跑杭,這樣我們就能訪問了。
5.2 安裝Nginx
-
安裝nginx所需要的依賴
-
openssl
apt-get install libssl-dev
-
pcre
apt-get install libpcre3 libpcre3-dev
-
zlib
apt-get install zlib1g-dev
-
5.2.1 fastdfs-nginx-module 安裝
-
解壓 fastdfs-nginx-module
進入到src文件夾下
修改配置
# 修改配置 vim config # 執(zhí)行下面命令(將配置中的/usr/local改為/usr): :%s+/usr/local/+/usr/+g
將
mod_fastdfs.conf
復(fù)制到/etc/fdfs
下進入
/etc/fdfs
下修改剛剛復(fù)制的配置文件咆耿,將下面參數(shù)修改成這樣:tracker_server=192.168.169.134:22122 # tracker服務(wù)IP和端口 url_have_group_name=true # 訪問鏈接前綴加上組名 store_path0=/var/fdfs/storage # 文件存儲路徑
將FastDFS一些關(guān)于Http訪問的配置文件也復(fù)制到
/etc/fdfs
下
5.2.2 Nginx安裝
-
解壓Nginx壓縮包
tar -zxvf nginx-1.10.0.tar.gz
-
進入nginx目錄德谅,編譯nginx
./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/home/wangzh/fastdfs-nginx-module/src
-
編譯
make
在編譯時報錯,我們只需要修改obj/MakeFile
就可以了萨螺。先找到該文件
編輯該文件
將圖中選中部分刪除窄做,重新make
-
安裝
make install
-
配置nginx整合fastdfs-module模塊
找到nginx產(chǎn)生的配置文件
修改文件,增加一個server
server { listen 8000; server_name localhost; #域名中包含 group 交給 ngx_fastdfs_module 處理 location ~/group([0-9])/ { ngx_fastdfs_module; } location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
-
啟動
nginx # 啟動 nginx -s stop # 停止 nginx -s reload # 重新加載配置
-
訪問nginx
-
訪問我們先前上傳的文件
http://192.168.169.134:8000/group1/M00/00/00/wKiphl6pa1-ARR-tAAAABRnOxBs74.html
完美慰技。