由于项目中用到很多图片,不过现在图片还是由type=file的按钮上传到服务器上,由nginx做静态服务器来访问这些图片,没有用到图片服务器来上传下载,这样做的缺点就是,服务部署在哪里,图片就上传到哪台服务器,没有一个集中的图片服务器,最进在考虑是否项目中引入一个图片服务来供上传下载,说到这里,思绪就回到了N年前开发用到的FastDFS,当时用的不亦说乎,今天重新搭建一下,回忆一下那个美好的屌丝生活!
附上大神写的FastDFS的Github:
FastDFS简要介绍:
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
下图就是他的架构图:
1、Tracker cluster中各个tracker server相互独立,不进行相互通信。
2、Storage cluster中各个storage组相互独立,不进行相互通信,也就是说各个组之间保存的数据是不相同的。但是各个组中的storage server之间是属于互相备份的关系,也就是说storage server之间保存相同的数据。
3、每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息。
文件上传的流程图如下:
请求上传说明:
1、Client通过Tracker server将文件上传到Storage server。
2、Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
3、Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。
4、上传完成,Storage server返回Client一个文件ID,文件上传结束。
上传完成后,会返回下面的文件索引信息:
文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
~组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
~虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
~数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
~文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
然后就是文件下载的过程如下:
请求下载说明:
1、Client通过Tracker server下载指定Storage组中某个Storage server上的某个文件(文件名包括Storage组名称)。
2、Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
3、Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件下载。
FastDFS提供简单易用的上传下载,是不是感觉手痒痒,那就动手搭建一下吧!
由于我身穷但是志坚,没钱买服务器,我就用虚拟机来搭建一下,一个storage的服务器,一个tracker的服务器。
1、创建一个目录,来存放FastDFS相关依赖:
[zjl@zheng ~]# mkdir -p /home/zheng/tools [zjl@zheng ~]# cd /home/zheng/tools/
2、下载并安装FastDFS依赖包libfastcommon
[zjl@zheng tools]# wget https://codeload.github.com/happyfish100/libfastcommon/zip/master [zjl@zheng tools]# unzip master [zjl@zheng tools]# cd libfastcommon-master/ [zjl@zheng libfastcommon-master]# ls HISTORY INSTALL libfastcommon.spec make.sh php-fastcommon README src [zjl@zheng libfastcommon-master]# ./make.sh [zjl@zheng libfastcommon-master]# ./make.sh install
3、下载并安装FastDFS
[zjl@zheng tools]# wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.08/FastDFS_v5.08.tar.gz [zjl@zheng tools]# tar xf FastDFS_v5.08.tar.gz [zjl@zheng tools]# cd FastDFS [zjl@zheng FastDFS]# ./make.sh && ./make.sh install
4、目录如下:
5、服务脚本和样例配置文件如下:
6、命令行工具如下:
7、配置跟踪服务器(tracker server),虽然FastDFS区分tracker和storage服务器,但是安装的软件及步骤均相同,只是不同的配置文件而已,以上安装适用tracker server和storage server,把样例文件复制出来一份:
8、编辑tracker server配置文件tracker.conf,修改内容如下:
9、编辑client端的配置文件client.conf,修改内容如下:
10、测试启动tracker server:
11、配置存储服务器(storage server),和配置tracker差不多,只是配置文件中的配置不一样,就是storage.conf的配置:
12、测试启动storage server:
到现在为止,FastDFS的跟踪和存储服务器我们已经搭建完毕了,我们可以通过命令行工具来测试一下:
[zjl@zheng ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/zheng/imgs/pythonNB.jpg group1/M00/00/00/uHYT6VcaP0aARXXvAAHrUgJEviQ626.jpg
返回文件ID即说明文件已经上传成功!对于这些图片,通常当做静态资源来处理,也就是要配置诸如Nginx这样的静态资源服务器来实现浏览器访问,这个配置就不多说了,FastDFS和Nginx的配合也是非常完美的!
本文暂时没有评论,来添加一个吧(●'◡'●)