使用docker安装FastDFS及简单的使用

提示:以下是本篇文章正文内容,下面案例可供参考

一、关于FastDFS

1.FastDFS内部组成

  1. FastDFS是一个高性能的分布式⽂件系统。
  2. FastDFS是由Tracker server(追踪调度服务器) 和 Storage server(文件存储服务器)组成。
  3. Storage server(文件存储服务器)又是由多个组构成

2.名词解释

Tracker server(追踪调度服务器)
Tracker server(追踪调度服务器),作⽤是负载均衡和调度,通过 Tracker server 在⽂件上传时可以根据⼀些策略找到Storage server 提供⽂件上传服务,所以将 tracker server称为追踪服务器或调度服务器。

Storage server(文件存储服务器)
Storage server(文件存储服务器) 作⽤是⽂件存储,客户端上传的⽂件最终存储在 Storage 服务器上,Storage server 没有实现⾃⼰的⽂件系统⽽是利⽤操作系统的⽂件系统来管理⽂件,所以将storage称为存储服务器。

Group(组)

  1. 由于Storage server(文件存储服务器)是用来存储文件的,具有容量限制,为了解决该问题,提出扩容分组,所以延伸出组的概念。
  2. 每个组存放部分文件,且每个组之间保存的⽂件是不同的。
  3. 为保证每个组内的节点服务高可用,允许组内构建存储服务器集群,每个组内部可以有多个成员,组成员内部保存的内容是⼀样的,组成员的地位是⼀致的,没有主从的概念。
  4. 由于文件存放在每个组的节点上,所以为了方便http访问调用,每个Storage server还要绑定一个nginx。
  5. 所有的组加起来是一个完成的Storage server(文件存储服务器)。
    在这里插入图片描述

3.工作原理上传

在这里插入图片描述

  1. Storage server(文件存储服务器)定时向Tracker server(追踪调度服务器)上报各个节点的状态,如:磁盘剩余空间,文件内同步状态;
  2. 当Tracker server(追踪调度服务器)接收到客户端的上传请求;
  3. Tracker server(追踪调度服务器)会查询可用的Storage server(文件存储服务器);
  4. 将可用的Storage server(文件存储服务器)的IP,端口等信息返回给用户;
  5. 客户端根据返回IP和端口将文件上传到这台可用的Storage server(文件存储服务器);
  6. Storage server(文件存储服务器)生成文件id(路径信息和文件名称);
  7. 并将上传的文件写入Storage server(文件存储服务器)的磁盘;
  8. 将生成的文件id(路径信息和文件名称)返回给客户端;
  9. 客户端会将文件id(路径信息和文件名称)存储,用于查询和下载;

4.工作原理下载

在这里插入图片描述

  1. Storage server(文件存储服务器)定时向Tracker server(追踪调度服务器)上报各个节点的状态,如:磁盘剩余空间,文件内同步状态;
  2. 当Tracker server(追踪调度服务器)接收到客户端的瞎下载请求;
  3. Tracker server(追踪调度服务器)会查询可用的Storage server(文件存储服务器);
  4. 将可用的Storage server(文件存储服务器)的IP,端口等信息返回给客户端;
  5. 客户端根据文件id(路径信息和文件名称)去请求这台可用的Storage server(文件存储服务器);
  6. Storage server(文件存储服务器)根据文件id(路径信息和文件名称)查询文件;
  7. Storage server(文件存储服务器)将查询到的文件返回给客户端下载;

二、docker安装FastDFS

1.安装步骤

  1. 拉取fastdfs镜像
 docker pull delron/fastdfs 
  1. 创建Tracker server(追踪调度服务器)容器
    提示:在指定虚拟机镜像之后,还需要添加tracker命令,这样镜像就会根据tracker命令启动tracker服务
docker run -d  --name tracker --net=host -p 22122:22122 delron/fastdfs tracker

–net=host : 将虚拟机的网络应用于容器,也就是说和宿主机网络一致

  1. Storage server(文件存储服务器),需要指定Tracker 的ip和端口
    提示:在指定虚拟机镜像之后,还需要添加storager命令,这样镜像就会根据storage命令启动storage服务
docker run -d --name storage --net=host  -p 8888:8888  -p 23000:23000  -e TRACKER_SERVER=192.168.136.160:22122 -e GROUP_NAME=group1 delron/fastdfs storage
  1. GROUP_NAME=group1 : 指定服务器在组group1中或者新增一个组叫group1,如果想要增加新的组用于扩容 ,再次运行该命令,更换新组名即可。
  2. –net=host : 将虚拟机的网络应用于容器,也就是说和宿主机网络一致

2.修改nginx配置

storage内部已经集成了nginx,这里的nginx可以使图片在浏览器中访问到

  1. 进入Storage容器内
    提示:进入Storage容器内【cd /etc/fdfs/ 】也有Storage和Tracker的配置
docker exec -it storage /bin/bash
  1. 编辑文件【nginx.conf】文件
 vi /usr/local/nginx/conf/nginx.conf 

在这里插入图片描述
3. 如果i进行了配置修改 则需要重启

docker restart storage

三、使用步骤

1.导入坐标

     <!--fastdfs文件存储-->
        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.26.7</version>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.添加配置

在【application.yml】添加配置

fdfs:
  so-timeout: 1500 #读取超时时间
  connect-timeout: 600 #连接超时时间
  thumb-image: #缩略图参数
    width: 150
    height: 150
  tracker-list: 192.168.136.160:22122 #tracker服务器地址 可配置多个
  web-server-url: http://192.168.136.160:8888 #访问路径 storage中nginx地址

在这里插入图片描述

3. 代码书写

import com.github.tobato.fastdfs.domain.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.tanhua.server.AppServerApplication;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.IOException;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppServerApplication.class)
public class FastDFSTest {
    
    
    @Autowired
    protected FastFileStorageClient storageClient;
    @Autowired
    private FdfsWebServer fdfsWebServer;

    @Test
    public void testUpload() {
    
    
        String path = "D:\\IMAGE\\2e8e06bd-bfe3-4af3-9540-83eb20982656.jpg";
        File file = new File(path);
        try {
    
    
            //上传图片
            StorePath storePath = this.storageClient.uploadFile(FileUtils.openInputStream(file), file.length(), "jpg", null);
            //拼接路径   可通过该路径访问上传的照片  http://192.168.136.160:8888/group1/M00/00/00/wKiIoGMB7PmAUPZZAAHMYGEwMhg147.jpg
            String url = fdfsWebServer.getWebServerUrl() + "/" + storePath.getFullPath();
            System.out.println(url);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/packge/article/details/126451355