這篇文章主要介紹了如何安裝部署分布式文件系統(tǒng)FastDFS,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)鐘祥,10余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
一、FastDFS簡介
FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。
FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。
FastDFS服務(wù)端有兩個角色:跟蹤器(tracker)和存儲節(jié)點(storage)。跟蹤器主要做調(diào)度工作,在訪問上起負載均衡的作用。
存儲節(jié)點存儲文件,完成文件管理的所有功能:就是這樣的存儲、同步和提供存取接口,F(xiàn)astDFS同時對文件的metadata進行管理。所謂文件的meta data就是文件的相關(guān)屬性,以鍵值對(key value)方式表示,如:width=1024,其中的key為width,value為1024。文件metadata是文件屬性列表,可以包含多個鍵值對。
跟蹤器和存儲節(jié)點都可以由一臺或多臺服務(wù)器構(gòu)成。跟蹤器和存儲節(jié)點中的服務(wù)器均可以隨時增加或下線而不會影響線上服務(wù)。其中跟蹤器中的所有服務(wù)器都是對等的,可以根據(jù)服務(wù)器的壓力情況隨時增加或減少。
為了支持大容量,存儲節(jié)點(服務(wù)器)采用了分卷(或分組)的組織方式。存儲系統(tǒng)由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷的文件容量累加就是整個存儲系統(tǒng)中的文件容量。一個卷可以由一臺或多臺存儲服務(wù)器組成,一個卷下的存儲服務(wù)器中的文件都是相同的,卷中的多臺存儲服務(wù)器起到了冗余備份和負載均衡的作用。
在卷中增加服務(wù)器時,同步已有的文件由系統(tǒng)自動完成,同步完成后,系統(tǒng)自動將新增服務(wù)器切換到線上提供服務(wù)。
當存儲空間不足或即將耗盡時,可以動態(tài)添加卷。只需要增加一臺或多臺服務(wù)器,并將它們配置為一個新的卷,這樣就擴大了存儲系統(tǒng)的容量。
FastDFS中的文件標識分為兩個部分:卷名和文件名,二者缺一不可。
二、原理介紹
1.文件上傳
FastDFS以客戶端庫的方式提供基本的文件訪問接口如upload、download、append、delete等,Storage 服務(wù)會定時的向Tracker服務(wù)發(fā)送自己的存儲信息。當Tracker 服務(wù)集群中的Tracker 服務(wù)是多個時,各個Tracker服務(wù)之間的關(guān)系是對等的,因此客戶端上傳時會任意選擇一個Trackre服務(wù)。當Tracker服務(wù)收到客戶端上傳文件請求時,會為該文件分配一個可以存儲文件的group,當選定了group后就要決定給客戶端分配group中的哪一個storage服務(wù)。當分配好storage 服務(wù)后,客戶端向storage發(fā)送寫文件請求,storage將會為文件分配一個數(shù)據(jù)存儲目錄。然后為文件分配一個文件ID標示,然后根據(jù)以上的信息生成文件名存儲文件。
2.文件同步
上傳文件后,客戶端將文件寫到group內(nèi)的一個storage 服務(wù)即為上傳文件成功,storage服務(wù)寫完文件后,會由后臺線程將文件同步至同group內(nèi)的其他的storage 服務(wù)節(jié)點上。 每個storage服務(wù)寫文件后,會同時寫一份binlog,binlog里不包含文件數(shù)據(jù),只包含文件名等元信息,這份binlog用于后臺同步,storage會記錄向group內(nèi)其他storage同步的進度,以便重啟后能接上次的進度繼續(xù)同步;進度以時間戳的方式進行記錄,所以最好能保證集群內(nèi)的所有server的始終保持同步。最后Storage服務(wù)的同步進度會作為元數(shù)據(jù)的一部分匯報到tracker服務(wù)上,tracker服務(wù)在選擇讀storage的時候會以同步進度作為參考指標。
3.下載文件
當下載文件時,客戶端先詢問tracker服務(wù)下載文件的storage,參數(shù)為文件標識(卷名和文件名);然后tracker向客戶端返回一臺可用的storage;最后客戶端直接和storage通訊完成文件下載。
三、環(huá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.機器及網(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é)點需要安裝的組件:libevent、libfasttcommon、fastdfs
Storage節(jié)點需要安裝的組件:libfasttcommon、fastdfs、nginx、fastdfs-nginx-module
四、部署Tracker服務(wù)(192.168.100.101)
1.安裝libevent依賴
注:如果機器有外網(wǎng)環(huán)境直接yum -y install libevent,本文使用源碼包編譯安裝
解壓libevent源碼包:tar -zxvf libevent-2.1.11-stable.tar.gz
編譯安裝前配置:./configure
編譯安裝:make && make install
默認安裝位置:/usr/local/lib
2.安裝libfasttcommon依賴
解壓libfasttcommon源碼包:tar -zxvf libfastcommon-1.0.41.tar.gz
編譯安裝:./make.sh && ./make.sh install
默認安裝位置:/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刪掉,因為這臺機器只安裝Tracker服務(wù)
注:編譯安裝fastdfs需要perl庫依賴
設(shè)置Tracker服務(wù)開機自啟動:
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
默認安裝位置:/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中配置項:
base_path=/home/yuqing/fastdfs 改為:base_path=/work/fastdfs/storage(該目錄為自己定義,啟動時會用,沒有會報錯)
store_path0=/home/yuqing/fastdfs 改為:store_path0=/work/fastdfs/storage(該目錄為自己定義,啟動時會用,沒有會報錯)
tracker_server=192.168.209.121:22122 改為:tracker_server=192.168.100.101:22122
安裝完成后啟動腳本都拷貝到/etc/init.d目錄下了:
啟動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
驗證當前Storage服務(wù)和Tracker服務(wù)通信情況:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
修改各個Storage機器上的nginx服務(wù)的配置如下:
六、使用Java客戶端測試FastDFS
1.java項目Maven依賴
項目地址:https://github.com/tobato/FastDFS_Client 目前客戶端主要依賴于SpringBoot,因此必須引入:FastDFS 依賴包: org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE 將FastDFS引入項目: @Import(FdfsClientConfig.class) 在application.yml當中配置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ù)端進行操作,主要接口包括: TrackerClient - TrackerServer接口 GenerateStorageClient - 一般文件存儲接口 (StorageServer接口) FastFileStorageClient - 為方便項目開發(fā)集成的簡單接口(StorageServer接口) AppendFileStorageClient - 支持文件續(xù)傳操作的接口 (StorageServer接口) com.github.tobato fastdfs-client 1.26.7
2.實際測試案例
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 SetgetMetaData(Map infoMap) { Set 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 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 = 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(); } } }
感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何安裝部署分布式文件系統(tǒng)FastDFS”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習!