千家信息网

如何安装部署分布式文件系统FastDFS

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要介绍了如何安装部署分布式文件系统FastDFS,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、FastDFS简介Fast
千家信息网最后更新 2025年12月01日如何安装部署分布式文件系统FastDFS

这篇文章主要介绍了如何安装部署分布式文件系统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,因此必须引入:   org.springframework.boot   spring-boot-starter-parent   2.0.0.RELEASE   FastDFS 依赖包:    com.github.tobato    fastdfs-client    1.26.7将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@Componentpublic class FdfsClientUtil {    private static FdfsClientUtil fdfsClientUtil;    @Autowired    private TrackerClient trackerClient;    @Autowired    private FastFileStorageClient storageClient;    @PostConstruct    public void init() {        fdfsClientUtil = this;    }    private static Set getMetaData(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();        }    }}

感谢你能够认真阅读完这篇文章,希望小编分享的"如何安装部署分布式文件系统FastDFS"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

文件 服务 存储 同步 客户 客户端 接口 服务器 系统 目录 节点 编译 配置 源码 地址 拷贝 进度 跟踪器 分配 跟踪 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 交大网络技术 第一作业 怎样根据表单建数据库 软件开发市场容量的变化趋势 服务器硬件层面的安全防护 银河互联网络科技有限公司 局办网络安全宣传周活动总结 网络安全宣传思想政治 信息网络技术过程 网络安全立法五个层面 网络技术专业毕业后从事什么工作 数据库安全性有哪几个层面 流体机械属于哪个数据库 奉贤区专业型软件开发定做价格 网络安全的等级保护 方舟服务器管理器网络不可用 国家对网络安全管理 网络技术学校可靠吗 宜昌越延网络技术有限公司 cf服务器名称不显示了 大连网络技术开发质量 电子计算机网络技术怎么样 网络安全简报大纲 重庆hp服务器虚拟化定制 奉化区高科技刀片服务器售后服务 工控网络安全实施 rds数据库安全设计方案 阿里云 信创服务器 网络安全微剧本格式 监控管理服务器不开机是什么问题 传蔚来员工用公司服务器
0