如何安裝部署分布式文件系統(tǒng)FastDFS

這篇文章主要介紹了如何安裝部署分布式文件系統(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是一個開源的輕量級分布式文件系統(tǒng),它對文件進(jìn)行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負(fù)載均衡的問題。特別適合以文件為載體的在線服務(wù),如相冊網(wǎng)站、視頻網(wǎng)站等等。

FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo),使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。

FastDFS服務(wù)端有兩個角色:跟蹤器(tracker)和存儲節(jié)點(diǎn)(storage)。跟蹤器主要做調(diào)度工作,在訪問上起負(fù)載均衡的作用。

存儲節(jié)點(diǎn)存儲文件,完成文件管理的所有功能:就是這樣的存儲、同步和提供存取接口,F(xiàn)astDFS同時(shí)對文件的metadata進(jìn)行管理。所謂文件的meta data就是文件的相關(guān)屬性,以鍵值對(key value)方式表示,如:width=1024,其中的key為width,value為1024。文件metadata是文件屬性列表,可以包含多個鍵值對。

跟蹤器和存儲節(jié)點(diǎn)都可以由一臺或多臺服務(wù)器構(gòu)成。跟蹤器和存儲節(jié)點(diǎn)中的服務(wù)器均可以隨時(shí)增加或下線而不會影響線上服務(wù)。其中跟蹤器中的所有服務(wù)器都是對等的,可以根據(jù)服務(wù)器的壓力情況隨時(shí)增加或減少。

為了支持大容量,存儲節(jié)點(diǎn)(服務(wù)器)采用了分卷(或分組)的組織方式。存儲系統(tǒng)由一個或多個卷組成,卷與卷之間的文件是相互獨(dú)立的,所有卷的文件容量累加就是整個存儲系統(tǒng)中的文件容量。一個卷可以由一臺或多臺存儲服務(wù)器組成,一個卷下的存儲服務(wù)器中的文件都是相同的,卷中的多臺存儲服務(wù)器起到了冗余備份和負(fù)載均衡的作用。

在卷中增加服務(wù)器時(shí),同步已有的文件由系統(tǒng)自動完成,同步完成后,系統(tǒng)自動將新增服務(wù)器切換到線上提供服務(wù)。

當(dāng)存儲空間不足或即將耗盡時(shí),可以動態(tài)添加卷。只需要增加一臺或多臺服務(wù)器,并將它們配置為一個新的卷,這樣就擴(kuò)大了存儲系統(tǒng)的容量。

FastDFS中的文件標(biāo)識分為兩個部分:卷名和文件名,二者缺一不可。

二、原理介紹

1.文件上傳

FastDFS以客戶端庫的方式提供基本的文件訪問接口如upload、download、append、delete等,Storage 服務(wù)會定時(shí)的向Tracker服務(wù)發(fā)送自己的存儲信息。當(dāng)Tracker 服務(wù)集群中的Tracker 服務(wù)是多個時(shí),各個Tracker服務(wù)之間的關(guān)系是對等的,因此客戶端上傳時(shí)會任意選擇一個Trackre服務(wù)。當(dāng)Tracker服務(wù)收到客戶端上傳文件請求時(shí),會為該文件分配一個可以存儲文件的group,當(dāng)選定了group后就要決定給客戶端分配group中的哪一個storage服務(wù)。當(dāng)分配好storage 服務(wù)后,客戶端向storage發(fā)送寫文件請求,storage將會為文件分配一個數(shù)據(jù)存儲目錄。然后為文件分配一個文件ID標(biāo)示,然后根據(jù)以上的信息生成文件名存儲文件。

2.文件同步

上傳文件后,客戶端將文件寫到group內(nèi)的一個storage 服務(wù)即為上傳文件成功,storage服務(wù)寫完文件后,會由后臺線程將文件同步至同group內(nèi)的其他的storage 服務(wù)節(jié)點(diǎn)上。 每個storage服務(wù)寫文件后,會同時(shí)寫一份binlog,binlog里不包含文件數(shù)據(jù),只包含文件名等元信息,這份binlog用于后臺同步,storage會記錄向group內(nèi)其他storage同步的進(jìn)度,以便重啟后能接上次的進(jìn)度繼續(xù)同步;進(jìn)度以時(shí)間戳的方式進(jìn)行記錄,所以最好能保證集群內(nèi)的所有server的始終保持同步。最后Storage服務(wù)的同步進(jìn)度會作為元數(shù)據(jù)的一部分匯報(bào)到tracker服務(wù)上,tracker服務(wù)在選擇讀storage的時(shí)候會以同步進(jìn)度作為參考指標(biāo)。

3.下載文件

當(dāng)下載文件時(shí),客戶端先詢問tracker服務(wù)下載文件的storage,參數(shù)為文件標(biāo)識(卷名和文件名);然后tracker向客戶端返回一臺可用的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 目錄了:

如何安裝部署分布式文件系統(tǒng)FastDFS

安裝完成后配置文件都拷貝到/etc/fdfs目錄下了:

如何安裝部署分布式文件系統(tǒng)FastDFS

將/etc/init.d/fdfs_storaged刪掉,因?yàn)檫@臺機(jī)器只安裝Tracker服務(wù)

注:編譯安裝fastdfs需要perl庫依賴

設(shè)置Tracker服務(wù)開機(jī)自啟動:

chkconfig --add fdfs_trackerd

chkconfig fdfs_trackerd on

如何安裝部署分布式文件系統(tǒng)FastDFS

五、部署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 目錄了:

如何安裝部署分布式文件系統(tǒng)FastDFS

拷貝/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(該目錄為自己定義,啟動時(shí)會用,沒有會報(bào)錯)

store_path0=/home/yuqing/fastdfs 改為:store_path0=/work/fastdfs/storage(該目錄為自己定義,啟動時(shí)會用,沒有會報(bào)錯)

tracker_server=192.168.209.121:22122 改為:tracker_server=192.168.100.101:22122

安裝完成后啟動腳本都拷貝到/etc/init.d目錄下了:
如何安裝部署分布式文件系統(tǒng)FastDFS

啟動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

如何安裝部署分布式文件系統(tǒng)FastDFS

驗(yàn)證當(dāng)前Storage服務(wù)和Tracker服務(wù)通信情況:

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

如何安裝部署分布式文件系統(tǒng)FastDFS

修改各個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 - 一般文件存儲接口 (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://muchs.cn/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)請盡快告知,我們將會在第一時(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)

小程序開發(fā)