您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何安裝部署分布式文件系統FastDFS,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
一、FastDFS簡介
FastDFS是一個開源的輕量級分布式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務,如相冊網站、視頻網站等等。
FastDFS為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。
FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要做調度工作,在訪問上起負載均衡的作用。
存儲節點存儲文件,完成文件管理的所有功能:就是這樣的存儲、同步和提供存取接口,FastDFS同時對文件的metadata進行管理。所謂文件的meta data就是文件的相關屬性,以鍵值對(key value)方式表示,如:width=1024,其中的key為width,value為1024。文件metadata是文件屬性列表,可以包含多個鍵值對。
跟蹤器和存儲節點都可以由一臺或多臺服務器構成。跟蹤器和存儲節點中的服務器均可以隨時增加或下線而不會影響線上服務。其中跟蹤器中的所有服務器都是對等的,可以根據服務器的壓力情況隨時增加或減少。
為了支持大容量,存儲節點(服務器)采用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷的文件容量累加就是整個存儲系統中的文件容量。一個卷可以由一臺或多臺存儲服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多臺存儲服務器起到了冗余備份和負載均衡的作用。
在卷中增加服務器時,同步已有的文件由系統自動完成,同步完成后,系統自動將新增服務器切換到線上提供服務。
當存儲空間不足或即將耗盡時,可以動態添加卷。只需要增加一臺或多臺服務器,并將它們配置為一個新的卷,這樣就擴大了存儲系統的容量。
FastDFS中的文件標識分為兩個部分:卷名和文件名,二者缺一不可。
二、原理介紹
1.文件上傳
FastDFS以客戶端庫的方式提供基本的文件訪問接口如upload、download、append、delete等,Storage 服務會定時的向Tracker服務發送自己的存儲信息。當Tracker 服務集群中的Tracker 服務是多個時,各個Tracker服務之間的關系是對等的,因此客戶端上傳時會任意選擇一個Trackre服務。當Tracker服務收到客戶端上傳文件請求時,會為該文件分配一個可以存儲文件的group,當選定了group后就要決定給客戶端分配group中的哪一個storage服務。當分配好storage 服務后,客戶端向storage發送寫文件請求,storage將會為文件分配一個數據存儲目錄。然后為文件分配一個文件ID標示,然后根據以上的信息生成文件名存儲文件。
2.文件同步
上傳文件后,客戶端將文件寫到group內的一個storage 服務即為上傳文件成功,storage服務寫完文件后,會由后臺線程將文件同步至同group內的其他的storage 服務節點上。 每個storage服務寫文件后,會同時寫一份binlog,binlog里不包含文件數據,只包含文件名等元信息,這份binlog用于后臺同步,storage會記錄向group內其他storage同步的進度,以便重啟后能接上次的進度繼續同步;進度以時間戳的方式進行記錄,所以最好能保證集群內的所有server的始終保持同步。最后Storage服務的同步進度會作為元數據的一部分匯報到tracker服務上,tracker服務在選擇讀storage的時候會以同步進度作為參考指標。
3.下載文件
當下載文件時,客戶端先詢問tracker服務下載文件的storage,參數為文件標識(卷名和文件名);然后tracker向客戶端返回一臺可用的storage;最后客戶端直接和storage通訊完成文件下載。
三、環境準備
1.軟件環境
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.機器及網絡環境
Tracker Server1: 192.168.100.101
Storage Group1 Node1: 192.168.100.102
Storage Group1 Node2: 192.168.100.103
Tracker節點需要安裝的組件:libevent、libfasttcommon、fastdfs
Storage節點需要安裝的組件:libfasttcommon、fastdfs、nginx、fastdfs-nginx-module
四、部署Tracker服務(192.168.100.101)
1.安裝libevent依賴
注:如果機器有外網環境直接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服務
解壓fastdfs源碼包:tar -zxvf fastdfs-6.01.tar.gz
編譯安裝:./make.sh && ./make.sh install
安裝完成后服務及腳本都拷貝到/usr/bin 目錄了:
安裝完成后配置文件都拷貝到/etc/fdfs目錄下了:
將/etc/init.d/fdfs_storaged刪掉,因為這臺機器只安裝Tracker服務
注:編譯安裝fastdfs需要perl庫依賴
設置Tracker服務開機自啟動:
chkconfig --add fdfs_trackerd
chkconfig fdfs_trackerd on
五、部署Storage服務(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服務
解壓fastdfs源碼包:tar -zxvf fastdfs-6.01.tar.gz
編譯安裝:./make.sh && ./make.sh install
安裝完成后服務及腳本都拷貝到/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服務:systemctl start fdfs_storaged
重啟Storage服務:systemctl restart fdfs_storaged
停止Storage服務:systemctl stop fdfs_storaged
開放Storage服務端口:
iptables -I INPUT -p tcp --dport 23000 -j ACCEPT
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
驗證當前Storage服務和Tracker服務通信情況:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
修改各個Storage機器上的nginx服務的配置如下:
六、使用Java客戶端測試FastDFS
1.java項目Maven依賴
項目地址: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引入項目: @Import(FdfsClientConfig.class) 在application.yml當中配置Fdfs相關參數: # =================================================================== # 分布式文件系統FDFS配置 # =================================================================== fdfs: so-timeout: 1500 connect-timeout: 600 thumb-image: width: 150 height: 150 tracker-list: - 192.168.100.101:22122 使用接口服務對Fdfs服務端進行操作,主要接口包括: TrackerClient - TrackerServer接口 GenerateStorageClient - 一般文件存儲接口 (StorageServer接口) FastFileStorageClient - 為方便項目開發集成的簡單接口(StorageServer接口) AppendFileStorageClient - 支持文件續傳操作的接口 (StorageServer接口)
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 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(); } } }
感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何安裝部署分布式文件系統FastDFS”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。