admin管理员组文章数量:1602103
文章目录
-
- 1. 分布式文件存储-FastDFS
-
- 1.1 FastDFS简介
-
- 1.1.1 FastDFS体系结构
- 1.1.2 上传流程
- 1.2 FastDFS搭建(容器化部署)
-
- 1.2.0 Vmware虚拟机配置
- 1.2.1. 拉取镜像
- 1.2.2. 运行tracker
- 1.2.3. 运行storage
- 1.2.4. 修改nginx的配置
- 1.2.5. 设置开机启动容器
- 1.3 文件存储微服务
-
- 1.3.1. 创建文件管理微服务
- 1.3.2. 修改pom.xml引入依赖
- 1.3.3. 创建fasfDFS的配置文件
- 1.3.4. 创建微服务配置文件
- 1.3.5. 创建启动类
- 1.4 文件上传
-
- 1.4.1 文件信息封装
- 1.4.2 文件操作
- 1.4.3 文件上传
- 1.5 Postman测试文件上传
- 2. 阿里云对象存储 - OSS
-
- 2.1. 什么是对象存储OSS
- 2.2. 对象存储OSS作用
- 2.3. 对象存储OSS中的概念
- 2.4. 对象存储OSS管理方式
- 2.5. 阿里云对象存储OSS [官网]
- 2.6. 对象存储OSS注册和配置
-
- 2.6.1. 注册和登录
- 2.6.2. 开通对象存储OSS服务
- 2.6.3. 管理控制台
- 2.6.4. 使用控制台上传图片
- 2.7. AccessKey管理
-
- 2.7.1. 什么是AccessKey
- 2.7.2. 如何使用AccessKey
- 2.8. OSS-Browser管理工具使用
- 2.9. 写代码前准备工作
-
- 2.9.1. 下载SDK安装包
- 2.9.2. SDK包安装到本地maven仓库
- 2.10. 代码操作使用案例
-
- 2.10.1. 搭建项目环境
- 2.10.2. 上传文件
- 2.10.3. 下载文件到本地目录
- 2.10.4. 上传图片并返回访问路径
- 2.10.5. 删除文件
- 3. 总结
-
- 3.1. FastDFS优缺点
- 3.2. 阿里对象存储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软件配置如下:
- 点击vmware软件的编辑菜单, 虚拟网络编辑器
- 在弹出的框中配置如下:
注意: vmware软件中只能有一个nat模式网络连接, 如果没有点击添加网络添加一个,如果已经存在那么照着下面配置内容修改,
子网ip必须是: 192.168.200.0
因为虚拟机镜像中已经将虚拟机的ip锁死为192.168.200.128
- 点击Nat设置, 配置网关IP如下:
- 虚拟机配置好后, 需要本地和虚拟机网络连通
所以在本地windows网络适配器选项中找到
以太网8
虚拟网卡进行配置.因为我们vmware软件中配置的时候VMnet8, 右键属性配合如下:
注意 : 配置本地虚拟网卡的时候, ip地址一定要处于200网段
网关一定要写上面配置的网关地址, 否则windows本机和虚拟机网络无法连通
- 启动虚拟机后在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://wwwblogs/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版本 -->
<mavenpiler.source>1.8</mavenpiler.source>
<mavenpiler.target>1.8</mavenpiler.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;
版权声明:本文标题:文件系统FastDFS和阿里云OSS 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728394393a1156909.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论