1,为什么需要单独搭建分布式文
在单系统时代,可以在系统的resource目录下直接建立image,file目录用于存储图片等各种文件,这样做优点用处,直接在项目需要处引用图片就行,但是,缺点也非常明显,代码和文件资源相互杂糅,导致系统臃肿混乱,并且随着静态资源的增多,导致加载速度下降,并且不利于吸引同扩展,出于各种考虑,单独分离出文件系统
2,FastDFS相关知识点
概念:FastDFS 是以C语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载),特别适合以文件为载体的在线服务,如图片网站,视频网站等
架构:FastDFS分为客户端(client),追踪服务器(tracker server),存储服务器(storage server)三个角色
- 客户端(client):主要是上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。每个客户端服务器都需要安装Nginx
- 服务服务器(tracker server):,主要做调度工作,接收客户端请求,记录存储服务器集群中的的状态,然后调度文件的存储位置
- 存储服务器(storage server):用于存储文件和文件属性
文件的存储过程:
3,利用docker在Linux上安装FastDFS,引用地址(https://zhuanlan.zhihu.com/p/89922854)
1)拉取镜像
sudo docker pull delron/fastdfs
FastDFS中包含了storage镜像和tracker镜像还有nginx服务
2)构建并且运行运行trracker镜像
docker run -d --network=host --name tracker -v /root/fdfs:/var/root delron/fastdfs tracker
3)构建并且运行stroragei镜像
docker run -d --network=host --name storage -e TRACKER_SERVER=192.168.99.100:22122 -v /root/fdfs:/var/root/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
-e TRACKER_SERVER = 你的Linux ip地址, -v 表示把 外部Linux 的 /root/fdfs目录映射到 docker的 /var/root/fdfs的目录下,也就是说,文件上传到到docker的/root/fdfs文件目录下的时候,文件辉转存到镜像外Linxu系统的 /root/fdfs目录下
4)进入storage镜像
docker exec -it storage /bin/bash
5)随便下载一张图片
wget https://upload-images.jianshu.io/upload_images/11693390-a26b21909429f7d2.png
6)上传图片
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf 11693390-a26b21909429f7d2.png
7)得到字符串地址
group1/M00/00/00/wKglyF62tnyACzI-AC-ojGdpZlE570.png
这段字符串由组名,虚拟磁盘路径,数据两级目录,文件名组成
8)可以通过ip地址+端口号(默认8888+地址 访问图片(实际项目中此地址会存入数据库)