一、分布式文件系統(tǒng)
分布式文件系統(tǒng) (Distributed File System) 是一個(gè)軟件/軟件服務(wù)器,這個(gè)軟件可以用來管理文件,但這個(gè)軟件所管理的文件通常不是在一個(gè)服務(wù)器節(jié)點(diǎn)上,而是在多個(gè)服務(wù)器節(jié)點(diǎn)上,這些服務(wù)器節(jié)點(diǎn)通過網(wǎng)絡(luò)相連構(gòu)成一個(gè)龐大的文件存儲(chǔ)服務(wù)器集群,這些服務(wù)器都用于存儲(chǔ)文件資源,通過分布式文件系統(tǒng)來管理這些服務(wù)器上的文件。
常見的分布式文件系統(tǒng)有:FastDFS、GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS等,
GFS(Google File System)
--------------------------------------
Google公司為了滿足本公司需求而開發(fā)的基于Linux的專有分布式文件系統(tǒng)
HDFS
--------------------------------------
Hadoop 實(shí)現(xiàn)的一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System),簡稱HDFS
Lustre
---------------------------------------
是一個(gè)大規(guī)模的、安全可靠的,具備高可用性的集群文件系統(tǒng),它是由SUN公司開發(fā)和維護(hù)的
Ceph
---------------------------------------
是加州大學(xué)圣克魯茲分校的Sage weil攻讀博士時(shí)開發(fā)的分布式文件系統(tǒng)
GridFS
---------------------------------------
GridFS是MongoDB之上的分布式文件系統(tǒng),其利用了MongoDB的分布式存儲(chǔ)機(jī)制并通過MongoDB來存儲(chǔ)文件數(shù)據(jù)和文件元數(shù)據(jù)
MogileFS
---------------------------------------
由memcahed的開發(fā)公司danga,開發(fā)的一款采用perl開發(fā)的產(chǎn)品,目前國內(nèi)使用mogielFS的有圖片托管網(wǎng)站yupoo等
mooseFS
---------------------------------------
相對(duì)比較輕量級(jí),對(duì)master服務(wù)器有單點(diǎn)依賴,用perl編寫,性能相對(duì)較差
分布式文件系統(tǒng)與傳統(tǒng)文件系統(tǒng)對(duì)比:
二、什么是FastDFS
FastDFS是一個(gè)開源的輕量級(jí)分布式文件系統(tǒng),為互聯(lián)網(wǎng)應(yīng)用量身定做,簡單、靈活、高效,采用C語言開發(fā),由阿里巴巴開發(fā)并開源,它對(duì)文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲(chǔ)和負(fù)載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊(cè)網(wǎng)站、視頻網(wǎng)站等等。
FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo),使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。
三、FastDFS發(fā)展歷史
1、2008年4月項(xiàng)目啟動(dòng),7月發(fā)布第一個(gè)版本V1.00,兩年時(shí)間內(nèi)持續(xù)升級(jí)到V1.29
2、2010年8月推出V2.00
3、2011年6月推出V3.00
4、2012年10月推出V4.00
5、2013年12月推出V5.00
6、2017年3月推出V5.10
7、2018年6月推出V5.12(截止目前最新版)
8、詳細(xì)發(fā)展歷史查看:?https://github.com/happyfish100/fastdfs/blob/master/HISTORY
9、FastDFS系統(tǒng)架構(gòu)從第一個(gè)版本發(fā)布后一直沒有大的調(diào)整,高版本完全兼容低版本的數(shù)據(jù),可以做到平滑升級(jí),推薦更新升級(jí)到最新版本;
10、FastDFS代碼托管在github上:https://github.com/happyfish100/fastdfs
四、FastDFS整體架構(gòu)
FastDFS文件系統(tǒng)由兩大部分構(gòu)成,一個(gè)是客戶端,一個(gè)是服務(wù)端;客戶端通常指我們的程序,比如我們的Java程序去連接FastDFS、操作FastDFS,那我們的Java程序就是一個(gè)客戶端;FastDFS提供專有API訪問,目前提供了 C、Java 和 PHP 幾種編程語言的API,用來訪問FastDFS文件系統(tǒng);
服務(wù)端由兩個(gè)部分構(gòu)成:一個(gè)是跟蹤器(tracker),一個(gè)是存儲(chǔ)節(jié)點(diǎn)(storage);跟蹤器(tracker)主要做調(diào)度工作,在內(nèi)存中記錄集群中存儲(chǔ)節(jié)點(diǎn)storage的狀態(tài)信息,是前端Client和后端存儲(chǔ)節(jié)點(diǎn)storage的樞紐;因?yàn)橄嚓P(guān)信息全部在內(nèi)存中,Tracker server的性能非常高,一個(gè)較大的集群(比如上百個(gè)group)中有3臺(tái)就足夠了;存儲(chǔ)節(jié)點(diǎn)(storage)用于存儲(chǔ)文件,包括文件和文件屬性(meta data)都保存到存儲(chǔ)服務(wù)器磁盤上,完成文件管理的所有功能:文件存儲(chǔ)、文件同步和提供文件訪問等;
TIP:
所需要安裝包版本對(duì)應(yīng)關(guān)系名稱版本號(hào)
| libfastcommon | 1.0.36 |
| fastdfs | 5.11 |
| nginx | 1.12.2 |
| fastdfs-nginx-module | 1.20 |
| fastdfs-client-java | 1.27-SNAPSHOT |
?
五、FastDFS下載
? ? ? ? ? ?FastDFS沒有Windows版本,不能在Windows下使用;FastDFS需要安裝部署在Linux環(huán)境下;下載地址:https://github.com/happyfish100/fastdfs/releases,下載安裝版本為FastDFS5.11
六、FastDFS安裝
安裝前的準(zhǔn)備 檢查Linux上是否安裝了 gcc、libevent、libevent-devel,執(zhí)行如下yum命令檢查:yum list installed | grep gccyum list installed | grep libeventyum list installed | grep libevent-devel如果沒有安裝,則需進(jìn)行安裝,執(zhí)行如下命令安裝:yum install gcc libevent libevent-devel -y安裝 libfastcommon 庫 libfastcommon 庫是 FastDFS 文件系統(tǒng)運(yùn)行需要的公共 C 語言函數(shù)庫安裝libfastcommon 庫的步驟如下 下載 libfastcommon 源代碼包 下載地址:https://github.com/happyfish100安裝包地址:https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz解壓下載下來的tar.gz壓縮包:tar -zxvf libfastcommon-1.0.36.tar.gz切換到解壓后的libfastcommon目錄:cd libfastcommon-1.0.36執(zhí)行make腳本進(jìn)行編譯:./make.sh 注意:第4步make編譯的時(shí)候如果報(bào)錯(cuò),需解決錯(cuò)誤后再次進(jìn)行make,通常發(fā)生錯(cuò)誤是由于Linux缺少某些依賴庫導(dǎo)致,根據(jù)錯(cuò)誤提示解決錯(cuò)誤執(zhí)行make install進(jìn)行安裝:./make.sh install至此 libfastcommon 庫安裝完畢安裝FastDFS FastDFS才是我們真正的分布式文件系統(tǒng),安裝步驟如下: 下載FastDFS,下載地址:https://github.com/happyfish100/fastdfs/releases下載安裝包:wget?https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz??-O fastdfs-5.11.tar.gz解壓下載下來的tar.gz包:tar -zxvf fastdfs-5.11.tar.gz切換到解壓后的目錄:cd fastdfs-5.11執(zhí)行編譯: ./make.sh然后再執(zhí)行安裝 ./make.sh install 至此FastDFS安裝完成,安裝后所有編譯出來的文件存放在/usr/bin目錄下,所有配置文件存放在/etc/fdfs目錄下,使用命令查看:ll /usr/bin/fdfs*另外注意需要把解壓后的fastdfs-5.11/conf目錄下的兩個(gè)文件拷貝到/etc/fdfs/? cp http.conf /etc/fdfs/cp mime.types /etc/fdfs/這兩個(gè)文件后續(xù)需要用到,所以先拷貝過去,原因:讓fastdfs-nginx-module的配置文件調(diào)用
七、FastDFS配置
FastDFS安裝后配置文件位于/etc/fdfs/目錄下,修改該目錄下的配置文件把所有的.sample后綴都去掉,使用 mv 命令改文件名,去掉文件名后綴。盡量使用cp復(fù)制在改名(備份,備份,備份) 修改tracker.conf文件 base_path=/opt/fastdfs/tracker新建?mkdir -p /opt/fastdfs/tracke不然會(huì)報(bào):修改storage.conf文件 base_path=/opt/fastdfs/storagestore_path0=/opt/fastdfs/storage/filestracker_server=192.168.184.133:22122新建文件夾:mkdir -p /opt/fastdfs/storagemkdir -p /opt/fastdfs/storage/files如果配置store_path0該配置了,就得創(chuàng)鍵file文件,如果不配置則默認(rèn)使用base_path然后啟動(dòng)FastDFS
八、FastDFS啟動(dòng)
FastDFS服務(wù)啟動(dòng)需要啟動(dòng)兩個(gè)腳本: 啟動(dòng)FastDFS的tracker服務(wù),在任意目錄下執(zhí)行:fdfs_trackerd /etc/fdfs/tracker.conf啟動(dòng)FastDFS的storage服務(wù),在任意目錄下執(zhí)行:fdfs_storaged /etc/fdfs/storage.conf首次啟動(dòng)storage后,它會(huì)在配置的路徑下創(chuàng)建存儲(chǔ)文件的目錄,前提是配置的路徑要存在,不存在服務(wù)都起不來,所以上面七步驟中有提示要?jiǎng)?chuàng)鍵文件夾查看啟動(dòng)進(jìn)程:ps -ef | grep fdfs ,有啟動(dòng)的執(zhí)行命令即為啟動(dòng)成功;查看storage是否已經(jīng)登記到了tracker下:fdfs_monitor /etc/fdfs/storage.conf
九、FastDFS關(guān)閉
關(guān)閉FastDFS,執(zhí)行如下命令: 關(guān)閉tracker執(zhí)行命令,在任意目錄下執(zhí)行:fdfs_trackerd /etc/fdfs/tracker.conf stop關(guān)閉storage執(zhí)行命令,在任意目錄下執(zhí)行:fdfs_storaged /etc/fdfs/storage.conf stop或者kill關(guān)閉fastdfs,但不建議kill -9 強(qiáng)制關(guān)閉,因?yàn)榭赡軙?huì)導(dǎo)致文件信息不同步問題
十、FastDFS重啟
重啟FastDFS,執(zhí)行如下命令: 重啟tracker執(zhí)行命令:fdfs_trackerd /etc/fdfs/tracker.conf restart重啟storage執(zhí)行命令:fdfs_storaged /etc/fdfs/storage.conf restart
十一、FastDFS測(cè)試
FastDFS安裝完成之后,可以使用fdfs_test腳本測(cè)試文件上傳,執(zhí)行命令:測(cè)試之前,需要修改client.conf配置文件,修改兩個(gè)配置: base_path=/opt/fastdfs/clienttracker_server=192.168.184.133:22122新建文件夾:mkdir -p /opt/fastdfs/client測(cè)試文件上傳,執(zhí)行命令: fdfs_test /etc/fdfs/client.conf upload /root/testfastfds.txt測(cè)試文件刪除,執(zhí)行命令: fdfs_delete_file ?/etc/fdfs/client.conf? group1/M00/00/00/wKi4hVzVCW-AR0ZTAAAAIIe1k0c233_big.txtFastDFS生成的文件目錄結(jié)構(gòu)及名稱示例: ?
//一道亮麗的風(fēng)景線//
十二、安裝Nginx的FastDFS擴(kuò)展模塊
概述 已經(jīng)上傳到FastDFS文件系統(tǒng)中的文件,我們?nèi)绾卧跒g覽器中訪問呢?FastDFS?V4.05 以后的版本就把內(nèi)置 HTTP服務(wù)去掉了,所以我們測(cè)試上傳成功了,但是卻無法訪問。FastDFS提供了一個(gè)Nginx擴(kuò)展模塊,利用該模塊,我們可以通過Nginx訪問已經(jīng)上傳到FastDFS上的文件下載 下載fastdfs的nginx擴(kuò)展模塊源代碼:wget?https://github.com/happyfish100/fastdfs-nginx-module/archive/73869650b6171fd6e5bf81b5b8caa89f021d6c7b.zip?-O fastdfs-nginx-module.zip解壓下載下來的fastdfs-nginx-module.zip 文件:unzip fastdfs-nginx-module.zip安裝Nginx并且添加fastDFS模塊 下載nginx:wget http://nginx.org/download/nginx-1.12.2.tar.gz解壓下載下來的nginx文件,執(zhí)行命令:tar -zxvf nginx-1.12.2.tar.gz切換至解壓后的nginx主目錄,執(zhí)行命令:cd nginx-1.12.2切換到解壓后的nginx-1.12.1目錄下,執(zhí)行configure命令: ./configure --prefix=/usr/local/fastdfs/nginx_fdfs --add-module=/home/soft/fastdfs/fastdfs-nginx-module-73869650b6171fd6e5bf81b5b8caa89f021d6c7b/src其中--prefix是指定nginx安裝路徑,--add-module指定fastDFS的nginx模塊的源代碼路徑執(zhí)行命令進(jìn)行編譯:make執(zhí)行命令進(jìn)行安裝:make install以上安裝Nginx的FastDFS擴(kuò)展模塊注意事項(xiàng) 我們知道,nginx是C語言開發(fā),因此同樣需要gcc,還需要安裝pcre,因?yàn)閚ginx的http模塊需要用到pcre,還需要zlib,它提供了解壓縮,還需要openssl,Nginx的安裝需要Linux安裝相關(guān)的幾個(gè)庫,否則編譯會(huì)出現(xiàn)錯(cuò)誤,這幾個(gè)庫分別是:gcc編譯器是否安裝? 檢查是否安裝:yum list installed | grep gcc執(zhí)行安裝:yum install gcc -yopenssl庫是否安裝? 檢查是否安裝:yum list installed | grep openssl執(zhí)行安裝:yum install openssl openssl-devel -ypcre庫是否安裝? 檢查是否安裝:yum list installed | grep pcre執(zhí)行安裝:yum install pcre pcre-devel -yzlib庫是否安裝? 檢查是否安裝:yum list installed | grep zlib執(zhí)行安裝:yum install zlib zlib-devel -y一次性安裝,執(zhí)行如下命令: yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y配置 將/home/soft/fastdfs/fastdfs-nginx-module-73869650b6171fd6e5bf81b5b8caa89f021d6c7b/src目錄下的mod_fastdfs.conf文件拷貝到 /etc/fdfs/目錄下,這樣才能正常啟動(dòng)Nginx mod_fastdfs.conf 專門配置Nginx的擴(kuò)展模塊的修改mod_fastdfs.conf配置文件: base_path=/opt/fastdfs/nginx_modtracker_server=192.168.184.133:22122store_path0=/opt/fastdfs/storage/filesurl_have_group_name = true創(chuàng)鍵文件夾:mkdir -p /opt/fastdfs/nginx_mod其他路徑都存在所以不用創(chuàng)鍵配置Nginx的配置文件 #攔截請(qǐng)求路徑中包含 /group[1-9]/M0[0-9] 的請(qǐng)求,使用 fastdfs的Nginx 模塊進(jìn)行轉(zhuǎn)發(fā):
location ~ /group[1-9]/M0[0-9] {
? ? ?ngx_fastdfs_module;
}如果出現(xiàn)404訪問不到,檢查一下 url_have_group_name = false,如果為false改為true啟動(dòng)與測(cè)試 啟動(dòng)帶有fastdfs模塊的Nginx重啟fastDFS服務(wù)進(jìn)程,執(zhí)行如下命令:(不重啟也可以) fdfs_trackerd /etc/fdfs/tracker.conf restartfdfs_storaged /etc/fdfs/storage.conf restart重新上傳一個(gè)文件進(jìn)行測(cè)試驗(yàn)證:fdfs_test /etc/fdfs/client.conf upload /root/testfastfdsnginx.txt在瀏覽器訪問上傳的文件,顯示訪問成功當(dāng)遇到400錯(cuò)誤, 檢查配置/etc/fdfs/mod_fastdfs.confurl_have_group_name=true ?該配置表示訪問路徑中是否需要帶有g(shù)roup1,改為true表示路徑中需要有g(shù)roup1
十三、FastDFS提供的主要功能
? ?upload:上傳文件,download:下載文件,delete:刪除文件
十四、FastDFS文件系統(tǒng)的Java客戶端
前提你電腦安裝了maven使用mvn命令操作一下就行了fastDFS文件系統(tǒng)Java客戶端是指采用Java語言編寫的一套程序,專門用來訪問fastDFS文件系統(tǒng)由于maven倉庫里沒有該依賴所以:下載官方的源代碼:https://github.com/happyfish100/fastdfs-client-java/archive/master.zip解壓fastdfs-client-java-master,采用maven命令編譯成jar安裝到本地maven庫:mvn clean install在Java程序中使用它提供的API來訪問fastDFS文件系統(tǒng)
十五、FastDFS開發(fā)示例
使用Java客戶端,編程操作fastDFS分布式文件系統(tǒng):
引入依賴:
<dependency><groupId>org.csource</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27-SNAPSHOT</version>
</dependency>
代碼:
在類路徑中配置該文件:fdfs_client.conf配置,tracker_server可以配置多個(gè),配置多個(gè)tracker_server連接集群
connect_timeout = 2
network_timeout = 30
charset = UTF-8
tracker_server=192.168.184.133:22122
代碼:
public class FastService {public static void main(String[] args) throws IOException, MyException {//1、初始化配置連接信息ClientGlobal.init("fdfs_client.conf");//檢查加載配置結(jié)果System.out.println("加載配置結(jié)果:ClientGlobal.configInfo(): " + ClientGlobal.configInfo());//2、創(chuàng)建一個(gè)Tracker的客戶端對(duì)象TrackerClient trackerClient = new TrackerClient();//3、通過Tracker的客戶端對(duì)象,獲取到一個(gè)Tracker服務(wù)器對(duì)象TrackerServer trackerServer = trackerClient.getConnection();//4、通過Tracker的客戶端對(duì)象和Tracker服務(wù)器對(duì)象,獲取到一個(gè)Storage服務(wù)器對(duì)象StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);//5、通過Tracker服務(wù)器對(duì)象和Storage服務(wù)器對(duì)象,構(gòu)造一個(gè)Storage客戶端對(duì)象StorageClient storageClient = new StorageClient(trackerServer, storageServer);//有了上面的5步,接下來就可以正式去操作FastDFS了//文件上傳String[] strArray = storageClient.upload_file("G:/test.txt", "txt", null);for (String str : strArray) {System.out.println(str);}//文件下載,返回值0表示下載成功,其他值都是下載失敗,比如:-1, 1, -22 都是失敗的//strArray[0] group_name//strArray[1] remote_filename//G:/測(cè)試下載.txt local_filenameint download = storageClient.download_file(strArray[0], strArray[1], "G:/測(cè)試下載.txt");System.out.println("下載結(jié)果:"+download);//文件刪除,返回值0表示刪除成功,其他值都是刪除失敗,比如:-1, 1, -22 都是失敗的//int delete = storageClient.delete_file(strArray[0], strArray[1]);//System.out.println("刪除結(jié)果:"+delete);}}
fastdfs-client-java-master里面的README.md說的很清楚了
?
總結(jié)
以上是生活随笔為你收集整理的FastDFS分布式文件系统介绍及单机版安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。