這篇文章主要介紹了如何安裝部署分布式文件系統(tǒng)FastDFS,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)鐘祥,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
一、FastDFS簡介
FastDFS是一個(gè)開源的輕量級分布式文件系統(tǒng),它對文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲(chǔ)和負(fù)載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。
FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo),使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。
FastDFS服務(wù)端有兩個(gè)角色:跟蹤器(tracker)和存儲(chǔ)節(jié)點(diǎn)(storage)。跟蹤器主要做調(diào)度工作,在訪問上起負(fù)載均衡的作用。
存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)文件,完成文件管理的所有功能:就是這樣的存儲(chǔ)、同步和提供存取接口,F(xiàn)astDFS同時(shí)對文件的metadata進(jìn)行管理。所謂文件的meta data就是文件的相關(guān)屬性,以鍵值對(key value)方式表示,如:width=1024,其中的key為width,value為1024。文件metadata是文件屬性列表,可以包含多個(gè)鍵值對。
跟蹤器和存儲(chǔ)節(jié)點(diǎn)都可以由一臺(tái)或多臺(tái)服務(wù)器構(gòu)成。跟蹤器和存儲(chǔ)節(jié)點(diǎn)中的服務(wù)器均可以隨時(shí)增加或下線而不會(huì)影響線上服務(wù)。其中跟蹤器中的所有服務(wù)器都是對等的,可以根據(jù)服務(wù)器的壓力情況隨時(shí)增加或減少。
為了支持大容量,存儲(chǔ)節(jié)點(diǎn)(服務(wù)器)采用了分卷(或分組)的組織方式。存儲(chǔ)系統(tǒng)由一個(gè)或多個(gè)卷組成,卷與卷之間的文件是相互獨(dú)立的,所有卷的文件容量累加就是整個(gè)存儲(chǔ)系統(tǒng)中的文件容量。一個(gè)卷可以由一臺(tái)或多臺(tái)存儲(chǔ)服務(wù)器組成,一個(gè)卷下的存儲(chǔ)服務(wù)器中的文件都是相同的,卷中的多臺(tái)存儲(chǔ)服務(wù)器起到了冗余備份和負(fù)載均衡的作用。
在卷中增加服務(wù)器時(shí),同步已有的文件由系統(tǒng)自動(dòng)完成,同步完成后,系統(tǒng)自動(dòng)將新增服務(wù)器切換到線上提供服務(wù)。
當(dāng)存儲(chǔ)空間不足或即將耗盡時(shí),可以動(dòng)態(tài)添加卷。只需要增加一臺(tái)或多臺(tái)服務(wù)器,并將它們配置為一個(gè)新的卷,這樣就擴(kuò)大了存儲(chǔ)系統(tǒng)的容量。
FastDFS中的文件標(biāo)識分為兩個(gè)部分:卷名和文件名,二者缺一不可。
二、原理介紹
1.文件上傳
FastDFS以客戶端庫的方式提供基本的文件訪問接口如upload、download、append、delete等,Storage 服務(wù)會(huì)定時(shí)的向Tracker服務(wù)發(fā)送自己的存儲(chǔ)信息。當(dāng)Tracker 服務(wù)集群中的Tracker 服務(wù)是多個(gè)時(shí),各個(gè)Tracker服務(wù)之間的關(guān)系是對等的,因此客戶端上傳時(shí)會(huì)任意選擇一個(gè)Trackre服務(wù)。當(dāng)Tracker服務(wù)收到客戶端上傳文件請求時(shí),會(huì)為該文件分配一個(gè)可以存儲(chǔ)文件的group,當(dāng)選定了group后就要決定給客戶端分配group中的哪一個(gè)storage服務(wù)。當(dāng)分配好storage 服務(wù)后,客戶端向storage發(fā)送寫文件請求,storage將會(huì)為文件分配一個(gè)數(shù)據(jù)存儲(chǔ)目錄。然后為文件分配一個(gè)文件ID標(biāo)示,然后根據(jù)以上的信息生成文件名存儲(chǔ)文件。
2.文件同步
上傳文件后,客戶端將文件寫到group內(nèi)的一個(gè)storage 服務(wù)即為上傳文件成功,storage服務(wù)寫完文件后,會(huì)由后臺(tái)線程將文件同步至同group內(nèi)的其他的storage 服務(wù)節(jié)點(diǎn)上。 每個(gè)storage服務(wù)寫文件后,會(huì)同時(shí)寫一份binlog,binlog里不包含文件數(shù)據(jù),只包含文件名等元信息,這份binlog用于后臺(tái)同步,storage會(huì)記錄向group內(nèi)其他storage同步的進(jìn)度,以便重啟后能接上次的進(jìn)度繼續(xù)同步;進(jìn)度以時(shí)間戳的方式進(jìn)行記錄,所以最好能保證集群內(nèi)的所有server的始終保持同步。最后Storage服務(wù)的同步進(jìn)度會(huì)作為元數(shù)據(jù)的一部分匯報(bào)到tracker服務(wù)上,tracker服務(wù)在選擇讀storage的時(shí)候會(huì)以同步進(jìn)度作為參考指標(biāo)。
3.下載文件
當(dāng)下載文件時(shí),客戶端先詢問tracker服務(wù)下載文件的storage,參數(shù)為文件標(biāo)識(卷名和文件名);然后tracker向客戶端返回一臺(tái)可用的storage;最后客戶端直接和storage通訊完成文件下載。
三、環(huán)境準(zhǔn)備
1.軟件環(huán)境
libevent下載地址:http://libevent.org/
libfasttcommon下載地址:https://github.com/happyfish200/libfastcommon/releases
fastdfs下載地址:https://github.com/happyfish200/fastdfs/releases
fastdfs-nginx-module下載地址:https://github.com/happyfish200/fastdfs-nginx-module/releases
2.機(jī)器及網(wǎng)絡(luò)環(huán)境
Tracker Server1: 192.168.100.101
Storage Group1 Node1: 192.168.100.102
Storage Group1 Node2: 192.168.100.103
Tracker節(jié)點(diǎn)需要安裝的組件:libevent、libfasttcommon、fastdfs
Storage節(jié)點(diǎn)需要安裝的組件:libfasttcommon、fastdfs、nginx、fastdfs-nginx-module
四、部署Tracker服務(wù)(192.168.100.101)
1.安裝libevent依賴
注:如果機(jī)器有外網(wǎng)環(huán)境直接yum -y install libevent,本文使用源碼包編譯安裝
解壓libevent源碼包:tar -zxvf libevent-2.1.11-stable.tar.gz
編譯安裝前配置:./configure
編譯安裝:make && make install
默認(rèn)安裝位置:/usr/local/lib
2.安裝libfasttcommon依賴
解壓libfasttcommon源碼包:tar -zxvf libfastcommon-1.0.41.tar.gz
編譯安裝:./make.sh && ./make.sh install
默認(rèn)安裝位置:/usr/lib64
3.安裝FastDFS Tracker服務(wù)
解壓fastdfs源碼包:tar -zxvf fastdfs-6.01.tar.gz
編譯安裝:./make.sh && ./make.sh install
安裝完成后服務(wù)及腳本都拷貝到/usr/bin 目錄了:
安裝完成后配置文件都拷貝到/etc/fdfs目錄下了:
將/etc/init.d/fdfs_storaged刪掉,因?yàn)檫@臺(tái)機(jī)器只安裝Tracker服務(wù)
注:編譯安裝fastdfs需要perl庫依賴
設(shè)置Tracker服務(wù)開機(jī)自啟動(dòng):
chkconfig --add fdfs_trackerd
chkconfig fdfs_trackerd on
五、部署Storage服務(wù)(192.168.100.102/103)
1.安裝libfasttcommon依賴
解壓libfasttcommon源碼包:tar -zxvf libfastcommon-1.0.41.tar.gz
編譯安裝:./make.sh && ./make.sh install
默認(rèn)安裝位置:/usr/lib64
2.安裝FastDFS Storage服務(wù)
解壓fastdfs源碼包:tar -zxvf fastdfs-6.01.tar.gz
編譯安裝:./make.sh && ./make.sh install
安裝完成后服務(wù)及腳本都拷貝到/usr/bin 目錄了:
拷貝/etc/fdfs目錄下的Storage配置文件示例:cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
修改 /etc/fdfs/storage.conf中配置項(xiàng):
base_path=/home/yuqing/fastdfs 改為:base_path=/work/fastdfs/storage(該目錄為自己定義,啟動(dòng)時(shí)會(huì)用,沒有會(huì)報(bào)錯(cuò))
store_path0=/home/yuqing/fastdfs 改為:store_path0=/work/fastdfs/storage(該目錄為自己定義,啟動(dòng)時(shí)會(huì)用,沒有會(huì)報(bào)錯(cuò))
tracker_server=192.168.209.121:22122 改為:tracker_server=192.168.100.101:22122
安裝完成后啟動(dòng)腳本都拷貝到/etc/init.d目錄下了:
啟動(dòng)Storage服務(wù):systemctl start fdfs_storaged
重啟Storage服務(wù):systemctl restart fdfs_storaged
停止Storage服務(wù):systemctl stop fdfs_storaged
開放Storage服務(wù)端口:
iptables -I INPUT -p tcp --dport 23000 -j ACCEPT
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
驗(yàn)證當(dāng)前Storage服務(wù)和Tracker服務(wù)通信情況:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
修改各個(gè)Storage機(jī)器上的nginx服務(wù)的配置如下:
六、使用Java客戶端測試FastDFS
1.java項(xiàng)目Maven依賴
項(xiàng)目地址:https://github.com/tobato/FastDFS_Client 目前客戶端主要依賴于SpringBoot,因此必須引入: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath/> </parent> FastDFS 依賴包: <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.7</version> </dependency> 將FastDFS引入項(xiàng)目: @Import(FdfsClientConfig.class) 在application.yml當(dāng)中配置Fdfs相關(guān)參數(shù): # =================================================================== # 分布式文件系統(tǒng)FDFS配置 # =================================================================== fdfs: so-timeout: 1500 connect-timeout: 600 thumb-image: width: 150 height: 150 tracker-list: - 192.168.100.101:22122 使用接口服務(wù)對Fdfs服務(wù)端進(jìn)行操作,主要接口包括: TrackerClient - TrackerServer接口 GenerateStorageClient - 一般文件存儲(chǔ)接口 (StorageServer接口) FastFileStorageClient - 為方便項(xiàng)目開發(fā)集成的簡單接口(StorageServer接口) AppendFileStorageClient - 支持文件續(xù)傳操作的接口 (StorageServer接口)
2.實(shí)際測試案例
package com.maxbill; import com.github.tobato.fastdfs.domain.fdfs.MetaData; import com.github.tobato.fastdfs.domain.fdfs.StorePath; import com.github.tobato.fastdfs.service.FastFileStorageClient; import com.github.tobato.fastdfs.service.TrackerClient; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.HashSet; import java.util.Map; import java.util.Set; @Log4j2 @Component public class FdfsClientUtil { private static FdfsClientUtil fdfsClientUtil; @Autowired private TrackerClient trackerClient; @Autowired private FastFileStorageClient storageClient; @PostConstruct public void init() { fdfsClientUtil = this; } private static Set<MetaData> getMetaData(Map<String, String> infoMap) { Set<MetaData> metaDataSet = new HashSet<>(); metaDataSet.add(new MetaData("createUser", "maxbill")); metaDataSet.add(new MetaData("createDate", "2019-11-18")); return metaDataSet; } public static String uploadFile(File file, Map<String, String> infoMap) { try { String fileName = file.getName(); String fileType = fileName.substring(fileName.lastIndexOf("\\") + 1); log.info("upload file name: {}", fileName); StorePath path = fdfsClientUtil.storageClient.uploadFile(new FileInputStream(file), file.length(), fileType, getMetaData(infoMap)); log.info("upload success path: {}", path); Set<MetaData> metaData = fdfsClientUtil.storageClient.getMetadata(path.getGroup(), path.getPath()); log.info("upload success meta: {}", metaData); return path.getFullPath(); } catch (Exception e) { log.error(e.getMessage()); return e.getMessage(); } } }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何安裝部署分布式文件系統(tǒng)FastDFS”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
本文名稱:如何安裝部署分布式文件系統(tǒng)FastDFS
網(wǎng)站路徑:http://jinyejixie.com/article30/iehepo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、軟件開發(fā)、全網(wǎng)營銷推廣、網(wǎng)站設(shè)計(jì)公司、網(wǎng)頁設(shè)計(jì)公司、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)