最近项目开发为分模块开发,在项目开发过程中避免不了要使用文件上传,遂开发了一个通用的文件上传功能,将文件上传到专用的文件服务器当中。
FastDFS 是以C语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载),特别适合以文件为载体的在线服务,如图片网站,视频网站等。
一、架构
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。 存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。跟踪器和存储节点都可以由多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
简单概况来说就是,Tracker负责管理集群和实现集群。Storage实际保存文件。 Storage 分为多个组,每个组之间保存的文件是不同的,且每个组内部可以有多个成员,组成员内部保存的内容一致,组成员的地位也是一致的,没有主从的概念。
二、搭建
1、拉取镜像
docker pull delron/fastdfs
2、启动跟踪器(tracker)服务
docker run -d --restart=always --network=host --name tracker -v /data/fdfs/tracker:/var/fdfs delron/fastdfs tracker
Tracker容器默认端口是22122。
3、启动storage服务
docker run -d --network=host --name storage -e TRACKER_SERVER=192.168.23.30:22122 -v /data/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
需要注意的是,在启动storage命令中,需要将“192.168.23.30”这个IP地址修改为自己服务器的IP地址,由于我在内网搭建,所以IP地址为192.168..开头的。
Tracker和Storage启动后,将会把目录分别映射至“/data/fdfs/tracker”和“/data/fdfs/storage”,如有需要可以自行更改。
4、查看运行状态
可以看到Tracker和Storage容器都已经启动完成。
5、测试
在测试之前,需要在防火墙和安全组开放三个端口。分别为:23000、22122和8888,其中23000被storage服务使用,22122被tracker服务使用,8888为nginx反向代理端口。
需要注意的是,如果系统安装了宝塔面板,宝塔面板默认使用的是8888端口,此时需要修改宝塔面板端口或者Storage的8888端口。
首先将要测试的文件通过ftp上传至文件夹“/data/fdfs/storage”,即映射到Storage容器的文件夹。我这里是1.jpg
然后进入容器
docker exec -it storage bash
执行
cd /var/fdfs/
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf 1.jpg
其中1.jgp即为我们上传至 /data/fdfs/storage的1.jpg文件,然后在浏览器中输入“http://{你的IP地址}:{你的端口号}/group1/M00/00/00/wKgXHl-XeaqAYbbDAAWxl9vZtXk595.jpg”,就可以看到上传的照片啦。
三、其它配置
1、配置nginx访问端口
上文提到,在实际使用过程中,很多情况下回用到8888端口,这里我就将原来的8888端口修改为不常用端口,避免冲突。
进入容器:
docker exec -it storage bash
编辑nginx默认端口
vi /usr/local/nginx/conf/nginx.conf
编辑storage服务默认端口,我这里已经将8888修改为10001。
vi /etc/fdfs/storage.conf
需要注意的是nginx的端口要和storage服务端口保持一致,然后重启容器即可。
文章评论