文章目录
FastDFS
一、FastDFS简介
1、为什么需要 FastDFS
- 在分布式集群环境下,文件上传至节点A,这时通过负载均衡算法,访问到节点B,则不能访问到文件,这时 会出现有时能访问有时不能访问的问题
- 同时要考虑为文件做冗余备份(即上传文件后,存多份,避免一份文件坏了,访问不了)、负载均衡、线性扩容等功能,这些都是单节点文件上传所不具备的
2、 FastDFS 体系结构
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问 (文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标, 使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
3、文件上传流程
客户端上传文件后存储服务器将文件 ID 返回给客户端,此文件 ID 用于以后访问该文件的索引信息。文件索引信息 包括:组名,虚拟磁盘路径,数据两级目录,文件名。
**组名:**文件上传后所在的 storage 组名称,在文件上传成功后有storage 服务器返回,需要客户端自行保存。
**虚拟磁盘路径:**storage 配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0 则是 M00,如果配置了 store_path1 则是 M01,以此类推。
**数据两级目录:**storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
**文件名:**与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储 服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
二、FastDFS 安装
这里,我们使用 docker 进行安装,如果还有没有学过 docker 的小伙伴,建议去学习一下 docker ,可以打开新世界的大门
1、拉取 docker 镜像
fastdfs 有很多镜像版本,这里我们选择一个比较靠谱的
docker pull morunchang/fastdfs
2、运行 tracker
要是忘记了 tracker 是啥,请再看看前面的 FastDFS 架构
这里的 --net=host
docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
- 使用的网络模式是–net=host,host模式可以不用映射容器端口宿主机, 替换为你机器的Ip即可 是组名,即storage的组
- 如果想要增加新的storage服务器,再次运行该命令,注意更换 新组名
或者,我们可以手动指定端口映射:
docker run -d -p 22122:22122 --name=tracker morunchang/fastdfs sh tracker.sh
修改 tracker 的配置文件:
# 进入 tracker 的 bash
docker exec -it tracker bash
# 进入tracker配置文件目录
cd /etc/fdfs/
# 打开待修改的文件
vi client.conf
3、运行 storage
docker run -d --name storage --net=host -e TRACKER_IP=<你的 tracker 所在的 ip 地址>:22122 -e
GROUP_NAME=<组名> morunchang/fastdfs sh storage.sh
docker run -d --name storage --net=host -e TRACKER_IP=47.117.129.89:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
- 使用的网络模式是–net=host,host模式可以不用映射容器端口宿主机, 替换为你机器的Ip即可
- GROUP_NAME 是组名,即storage的组
- 如果想要增加新的storage服务器,再次运行该命令,注意更换 新组名
也可以使用传统的方法:
docker run -d -p 23000:23000 --name=storage -e TRACKER_IP=47.117.129.89:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh
**注意:**这里我们为了进行测试,没有挂载数据卷,在实际的操作中,我们是必须要挂载数据卷的,不然一旦容器被关闭,我们所存储的所有图片就会丢失
4、修改 storage 的nginx 配置文件
Fastdfs 中,是内置了 nginx 的,我们需要修改一下其配置
修改nginx的配置:
进入storage的容器内部,修改nginx.conf
docker exec -it storage /bin/bash
进入后
vi /etc/nginx/conf/nginx.conf
添加以下内容(一般是已经存在的,不用改)
location ~ /M00 { root /data/fast_data/data; ngx_fastdfs_module;}
禁止缓存:
add_header Cache-Control no-store;
退出容器
exit
重启storage容器
docker restart storage
5、测试配置是否成功
这里,我们在 tracker 容器,目录中,随便创建一个文件,然后尝试发送到 storage 中
随便创建一个文件:
echo "faroz"