原创

爽!FastDFS分布式文件系统这么玩儿,省时省力!附测试源码

1 分布式文件系统FastDFS的介绍

1.1 作用说明

FastDFS是一个开源的高性能分布式文件系统(DFS)。它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size < 500MB)为载体的在线服务。

1.2 结构说明

FastDFS 系统有三个角色:

  • 跟踪服务器(Tracker Server);
  • 存储服务器(Storage Server);
  • 客户端(Client)。

Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

2 安装教程

2.1 拉取FastDFS镜像

找了找,发现FastDFS开源项目好像并不活跃,也不怎么更新了,可能有更好的方案或更低成本的解决方案(OSS),这个镜像还是两年前的。

docker pull delron/fastdfs:latest

3 构建tracker容器(跟踪服务器,起到调度的作用)

3.1 启动脚本

docker run -dti --network=host \
    --name tracker \
    -v /data/fdfs/tracker:/var/fdfs \
    -v /etc/localtime:/etc/localtime \
    delron/fastdfs:latest \
    tracker

3.2 停止脚本

docker stop -t=30 tracker;
docker rm tracker;

4 构建storage容器(存储服务器,提供容量和备份服务)

4.1 启动脚本

docker run -dti  \
    --network=host \
    --name storage \
    -e TRACKER_SERVER=公网IP:22122 \
    -v /data/fdfs/storage:/var/fdfs \
    -v /etc/localtime:/etc/localtime \
    -e GROUP_NAME=group1 \
    delron/fastdfs:latest \
    storage

4.2 停止脚本

docker stop -t=30 storage;
docker rm storage;

5 测试代码

5.1 项目配置文件

spring:
  servlet:
    multipart:
      max-file-size: 100MB # 最大支持文件大小
      max-request-size: 100MB # 最大支持请求大小
# 分布式文件系统FDFS配置
fdfs:
  # 链接超时
  connect-timeout: 1000
  # 读取时间
  so-timeout: 3000
  # 生成缩略图参数
  thumb-image:
    width: 150
    height: 150
  tracker-list: IP:22122

5.2 项目jar包依赖

说明:fastdfs-client的jar包版本会与spring boot的版本起冲突,产生莫名其妙的错误,我的是报“找不到节点”问题,所以要处理好jar包版本:


<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.5.RELEASE</version>
    <relativePath />
</parent>

<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <!--集成springmvc框架并实现自动配置 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- FastDFS依赖 -->
    <dependency>
        <groupId>com.github.tobato</groupId>
        <artifactId>fastdfs-client</artifactId>
        <version>1.27.2</version>
    </dependency>
    <!-- test -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!-- Swagger2 核心依赖 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.6.1</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.6.1</version>
    </dependency>
</dependencies>

5.3 上传测试

项目启动后访问swagger-ui.html,进行测试:

测试结果:

5.4 获取资源节点地址

@Test
public void getStorageNode() {
    StorageNodeInfo storageNodeInfo = trackerClient.getFetchStorage("group1", "/group1/M00/00/00/rBxqSmCJNiSAPuWkAALE6uRBKok754.png");

    System.out.println("文件地址" + storageNodeInfo.getIp() + ":" + storageNodeInfo.getPort());
}

5.5 源码地址

FastDFS测试项目|fastdfs-demo

6 个人总结

FastDFS开源项目目前并不活跃,导致文档,教程有点少,出了问题也不容易解决;另外有类似MinIO,OSS这些更容易,简单的解决方案以供选择。

文档写的比较简单,个人学习FastDFS的机会也比较特殊(客户要求的),如果老哥有什么问题可以评论区沟通哈。

正文到此结束
该篇文章的评论功能已被站长关闭
本文目录