文件系统FastDFS和阿里云OSS

1. 分布式文件存储-FastDFS

1.1 FastDFS简介

1.1.1 FastDFS体系结构

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储文件同步文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份负载均衡线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
|
FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文件上传、下载通过Tracker server 调度最终由 Storage server 完成文件上传和下载。

Tracker server 作用是负载均衡调度,通过 Tracker server 在文件上传时可以根据一些策略找到Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。Storage server作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storageserver 没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。

1.1.2 上传流程

客户端上传文件后存储服务器将文件 ID 返回给客户端,此文件 ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

组名:文件上传后所在的 storage 组名称,在文件上传成功后有storage 服务器返回,需要客户端自行保存。

虚拟磁盘路径:storage 配置的虚拟路径,与磁盘选项store_path对应。如果配置了

store_path0 则是 M00,如果配置了 store_path1 则是 M01,以此类推。

数据两级目录:storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据

文件。

文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储

服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

1.2 FastDFS搭建(容器化部署)

注意 :

提供的虚拟机中FastDFS已经搭建完成, 并且是开机自动启动, 配置好虚拟机网络后直接使用即可。

1.2.0 Vmware虚拟机配置

虚拟机ip地址固定为 : 自己默认地址

用户名 : xxx

密码 : xxx

  • 导入虚拟机镜像步骤:
  • 文件菜单 -> 打开选项 -> 选择需要打开的虚拟机镜像文件(镜像文件需要提前解压)

如需使用本课程提供的虚拟机镜像, Vmware软件配置如下:

  1. 点击vmware软件的编辑菜单, 虚拟网络编辑器

在这里插入图片描述

  1. 在弹出的框中配置如下:

注意: vmware软件中只能有一个nat模式网络连接, 如果没有点击添加网络添加一个,如果已经存在那么照着下面配置内容修改,
子网ip必须是: 192.168.200.0

因为虚拟机镜像中已经将虚拟机的ip锁死为192.168.200.128

在这里插入图片描述

  1. 点击Nat设置, 配置网关IP如下:

在这里插入图片描述

  1. 虚拟机配置好后, 需要本地和虚拟机网络连通

所以在本地windows网络适配器选项中找到 以太网8虚拟网卡进行配置.

因为我们vmware软件中配置的时候VMnet8, 右键属性配合如下:

在这里插入图片描述

注意 : 配置本地虚拟网卡的时候, ip地址一定要处于200网段

网关一定要写上面配置的网关地址, 否则windows本机和虚拟机网络无法连通

在这里插入图片描述

  1. 启动虚拟机后在windows的cmd中可以ping服务器, 看是否能够连通虚拟机
ping 192.168.200.128

在这里插入图片描述

我们使用Docker容器化搭建FastDFS

1.2.1. 拉取镜像
docker pull morunchang/fastdfs
1.2.2. 运行tracker

创建FastDFS管理端tracker容器

docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
1.2.3. 运行storage

创建FastDFS存储端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

#创建storage容器例子:
docker run -d --name storage --net=host -e TRACKER_IP=192.168.200.128:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
  • 使用的网络模式是–net=host
  • 其中 位置替换为你机器的Ip即可
  • 其中 是组名,即storage的组, 例如: group1, group2, group3等
  • 如果想要增加新的storage服务器,再次运行该命令,注意更换 新组名
1.2.4. 修改nginx的配置

进入storage的容器内部,修改nginx.conf

# 进入到storage容器内部
docker exec -it storage  /bin/bash

进入到容器内部后

#1. 通过命令来查询Nginx的安装位置:
root@iZ8vb6w2xyjemtqcxtmaj4Z:/# whereis nginx
#显示如下:
nginx: /etc/nginx

#2. 查看当前Nginx的进程
root@iZ8vb6w2xyjemtqcxtmaj4Z:/# ps aux | grep nginx
#显示如下:
root        16  0.0  0.0  32480  1480 ?        Ss   13:18   0:00 nginx: master process /etc/nginx/sbin/nginx
nobody     100  0.0  0.0  33036  2116 ?        S    14:15   0:00 nginx: worker process
root       118  0.0  0.0  11272   728 pts/1    S+   14:54   0:00 grep --color=auto nginx

在这里插入图片描述

在storage存储端容器的nginx中添加以下内容:

#3. 修改Nginx的配置文件
vi /etc/nginx/conf/nginx.conf

#4. 修改Nginx配置内容
 server {
        listen       80;
        server_name  localhost;
        
        location ~ /M00 {
        		# storage 实际存储图片的位置
            root /data/fast_data/data;
            ngx_fastdfs_module;
        }
}

#5. 进入到Nginx sbin目录从新加载Nginx配置文件
cd /etc/nginx/sbin

#6. 重新加载配置文件, 让nginx配置生效
./nginx -s reload

修改后:

在这里插入图片描述

storage存储的位置/data/fast_data/data

在这里插入图片描述

1.2.5. 设置开机启动容器
docker update --restart=always  tracker
docker update --restart=always  storage

如果更新不成功,查看是否是下面错误

IPv4 forwarding is disabled. Networking will not work

解决:https://www.cnblogs.com/python-wen/p/11224828.html

1.3 文件存储微服务

1.3.1. 创建文件管理微服务

创建文件管理微服务fastdfsDemo,该工程主要用于实现文件上传以及文件删除等功能。

创建微服务时, 项目为Maven项目, 不要选择骨架.

1.3.2. 修改pom.xml引入依赖
<!-- 继承Spring boot工程 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
</parent>

<properties>
    <!-- 项目源码及编译输出的编码 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <!-- 项目编译JDK版本 -->
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>

    <!-- 依赖包版本管理 -->
    <spring.boot.version>2.1.5.RELEASE</spring.boot.version>
    <fastdfs.client.version>1.27.0.0</fastdfs.client.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${spring.boot.version}</version>
    </dependency>
    <dependency>
        <groupId>net.oschina.zcx7878</groupId>
        <artifactId>fastdfs-client-java</artifactId>
        <version>${fastdfs.client.version}</version>
    </dependency>
</dependencies>
1.3.3. 创建fasfDFS的配置文件

在resources文件夹下创建fasfDFS的配置文件fdfs_client.conf

connect_timeout = 60
network_timeout = 60
charset = UTF-8
http.tracker_http_port = 80
tracker_server = 192.168.200.128:22122

  • connect_timeout:连接超时时间,单位为秒。

  • network_timeout:通信超时时间,单位为秒。发送或接收数据时。假设在超时时间后还不能发送或接收数据,则本次网络通信失败

  • charset: 字符集

  • http.tracker_http_port :.tracker的http端口

  • tracker_server: tracker服务器IP和端口设置

1.3.4. 创建微服务配置文件

在resources文件夹下创建application.yml

spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
  application:
    name: fastdfs-demo
server:
  port: 9001

max-file-size是单个文件大小,max-request-size是设置总上传的数据大小

1.3.5. 创建启动类

创建com.qianfeng包,创建启动类FastDFSApplication

package com.qianfeng;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 项目启动类
 * @Author zhaojian
 */
@SpringBootApplication
public class FastDFSApplication {
   

    public static void main(String[] args) {
   
        SpringApplication.run(FastDFSApplication.class, args);
    }
}

1.4 文件上传

1.4.1 文件信息封装

文件上传一般都有文件的名字、文件的内容、文件的扩展名、文件的md5值、文件的作者等相关属性,我们可以创建一个对象封装这些属性,代码如下:

创建com.ymk.pojo.FastDFSFile

package com.qianfeng.pojo;

/**
 * 自定义封装, 文件实体类
 * @Author zhaojian
 */
public class FastDFSFile {
   

    //文件名字
    private String name;
    //文件内容
    private byte[] content;
    //文件扩展名
    private String ext;
    //文件MD5摘要值
    private String md5;
    //文件创建作者
    private String author;

    public FastDFSFile(String name, byte[] content, String ext, String height, String width, String author) {
   
        super();
        this.name = name;
        this.content = content;
        this.ext = ext;
        this.author = author;
    }

    public FastDFSFile(String name, byte[] content, String ext) {
   
        super();
        this.name = name;
        this.content = content;
        this.ext = ext;
    }

	// getter and setter ...
}
1.4.2 文件操作

创建FastDFSClient类,放在com.ymk.util下, 在该类中实现FastDFS信息获取以及文件的相关操作,

代码如下:

package com.ymk.util;

import com.ymk.pojo.FastDFSFile;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;

import 
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值