溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2021-11-12 11:37:21 來(lái)源:億速云 閱讀:157 作者:小新 欄目:云計(jì)算

這篇文章主要介紹了如何安裝部署分布式文件系統(tǒng)FastDFS,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、FastDFS簡(jiǎn)介

FastDFS是一個(gè)開(kāi)源的輕量級(jí)分布式文件系統(tǒng),它對(duì)文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件訪問(wèn)(文件上傳、文件下載)等,解決了大容量存儲(chǔ)和負(fù)載均衡的問(wèn)題。特別適合以文件為載體的在線服務(wù),如相冊(cè)網(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)度工作,在訪問(wèn)上起負(fù)載均衡的作用。

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

跟蹤器和存儲(chǔ)節(jié)點(diǎn)都可以由一臺(tái)或多臺(tái)服務(wù)器構(gòu)成。跟蹤器和存儲(chǔ)節(jié)點(diǎn)中的服務(wù)器均可以隨時(shí)增加或下線而不會(huì)影響線上服務(wù)。其中跟蹤器中的所有服務(wù)器都是對(duì)等的,可以根據(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)識(shí)分為兩個(gè)部分:卷名和文件名,二者缺一不可。

二、原理介紹

1.文件上傳

FastDFS以客戶端庫(kù)的方式提供基本的文件訪問(wèn)接口如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)系是對(duì)等的,因此客戶端上傳時(shí)會(huì)任意選擇一個(gè)Trackre服務(wù)。當(dāng)Tracker服務(wù)收到客戶端上傳文件請(qǐng)求時(shí),會(huì)為該文件分配一個(gè)可以存儲(chǔ)文件的group,當(dāng)選定了group后就要決定給客戶端分配group中的哪一個(gè)storage服務(wù)。當(dāng)分配好storage 服務(wù)后,客戶端向storage發(fā)送寫文件請(qǐng)求,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í),客戶端先詢問(wèn)tracker服務(wù)下載文件的storage,參數(shù)為文件標(biāo)識(shí)(卷名和文件名);然后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 目錄了:

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

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

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

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

注:編譯安裝fastdfs需要perl庫(kù)依賴

設(shè)置Tracker服務(wù)開(kāi)機(jī)自啟動(dòng):

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(該目錄為自己定義,啟動(dòng)時(shí)會(huì)用,沒(méi)有會(huì)報(bào)錯(cuò))

store_path0=/home/yuqing/fastdfs 改為:store_path0=/work/fastdfs/storage(該目錄為自己定義,啟動(dòng)時(shí)會(huì)用,沒(méi)有會(huì)報(bào)錯(cuò))

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

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

啟動(dòng)Storage服務(wù):systemctl start fdfs_storaged

重啟Storage服務(wù):systemctl restart fdfs_storaged

停止Storage服務(wù):systemctl stop fdfs_storaged

開(kāi)放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

修改各個(gè)Storage機(jī)器上的nginx服務(wù)的配置如下:

六、使用Java客戶端測(cè)試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ù)對(duì)Fdfs服務(wù)端進(jìn)行操作,主要接口包括:
TrackerClient - TrackerServer接口
GenerateStorageClient - 一般文件存儲(chǔ)接口 (StorageServer接口)
FastFileStorageClient - 為方便項(xiàng)目開(kāi)發(fā)集成的簡(jiǎn)單接口(StorageServer接口)
AppendFileStorageClient - 支持文件續(xù)傳操作的接口 (StorageServer接口)

2.實(shí)際測(cè)試案例

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”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI