FastDFS简介
FastDFS对文件进行管理,功能包括:文件存储、同步、访问 上传、下载等,解决了大容量存储和负载均衡的问题。特别适合一文件为载体的在线服务。
FastDFS架构包括Tracker server和Storage server。客户端请求Tracker Server进行文件上传,下载。通过Tracker server 调度最终由Storage server完成文件上传和下载
Tracker server作用是负载均衡和调度
Storage server作用是文件存储
客户端最终把文件传递到Storage服务器上,Storage server 没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将Storage称为存储服务器
步骤
1.Storage server 服务器定时向Tracker server 发送上传状态
2.客户端上传链接请求
3.Tracker server 服务器查询可用Storage
4.返回信息(Storage的ip和端口)
5.生成file_id
6.上传到文件磁盘
7.把路径和文件名发送给客户端
存储文件信息
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名
利用FastDFS实现上传删除(干货)
启动FastDfs需要启动tracker、storage
虚拟机开启docker容器
docker pull morunchang/fastdfs #拉取镜像
docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh #运行tracker
docker run -d --name storage --net=host -e TRACKER_IP=192.168.220.100:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh #创建storage容器
docker run -d --name storage --net=host -e TRACKER_IP=<your tracker server address>:22122 -e GROUP_NAME=<group name> morunchang/fastdfs sh storage.sh
·使用的网络模式是-net=host,host模式可以不用映射容器宿主机,替换为ip即可
·是组名,即storage的组
·如果想要增加新的storage服务器,再次运行该命令,注意更换新组名
1.修改storage容器的nginx的配置
docker exec -it storage /bin/bash
进入后
vi /etc/nginx/conf/nginx.conf
在nginx.conf里面下面内容为add_header Cache-Control no-stroe
localtion ~/M00{
root /data/fast_data/data;
ngx_fastdfs_module;
add_header Cache-Control no-store; #添加禁止缓存
};
exit #退出容器
docker restart storage # 重启容器
创建upload-service上传微服务,通过fastdfs-client组件实现文件上传和删除的功能
pom.xml内容为
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Spring-cloud</artifactId>
<groupId>com.zzz</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>upload-service</artifactId>
<dependencies>
<!-- web插件依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- eureka依赖 -->
<dependency>