爽!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 源码地址
6 个人总结
FastDFS开源项目目前并不活跃,导致文档,教程有点少,出了问题也不容易解决;另外有类似MinIO,OSS这些更容易,简单的解决方案以供选择。
文档写的比较简单,个人学习FastDFS的机会也比较特殊(客户要求的),如果老哥有什么问题可以评论区沟通哈。
正文到此结束
- 本文标签: Linux Spring Boot nginx
- 版权声明: 本站原创文章,于2021年04月30日由刀锋发布,转载请注明出处
热门推荐
相关文章
该篇文章的评论功能已被站长关闭