FastDFS+nginx+php的完整应用[转储]

FastDFS功能简介

 

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

 

主页地址:http://code.google.com/p/fastdfs/     #目前据说这上面已停止更新

 

FastDFS特点

 

   FastDFS主要解决了大容量的文件(主要是图片、视频、音频等小文件)存储和高并发访问的问题,并在文件存取时实现了负载均衡。与其它类GFS系统相比,FastDFS最大的特点在于它是一个轻量级的系统,体现在以下几个方面。

首先,FastDFS的结构比较简单,主要由Client、Tracker server和Storage server三部分组成。Client通过Tracker server得到Storage server的信息,然后直接与Storage server通信访问文件,避免了Tracker server成为瓶颈。

   第二,FastDFS不对文件进行分块存储,与支持文件分块存储的DFS相比,更加简洁高效。

   第三,FastDFS中的文件ID是由Storage server生成后返回给客户端的。文件ID中包含了组号、文件相对路径和文件名等(文件ID中还包含文件大小、时间戳、源Storage server IP地址、文件内容校验码、随机数等),client可以根据文件ID直接定位到文件所在的组(但具体通过哪个Storage server下载需要询问Tracker server根据负载均衡原则指定)。因此FastDFS不需要存储文件索引信息。而其他文件系统则通常需要由NameServer存储文件索引信息,如mogileFS采用MySQL数据库来存储文件索引以及系统相关的信息,而MySQL很容易成为系统瓶颈。

 

FastDFS特性:

 

文件不分块存储,上传的文件和OS文件系统中的文件一一对应

支持相同内容的文件只保存一份,节约磁盘空间

下载文件支持HTTP协议,可以使用内置Web Server,也可以和其他Web Server配合使用

支持在线扩容

支持主从文件

存储服务器上可以保存文件属性(meta-data)V2.0网络通信采用libevent,支持大并发访问,整体性能更好

 

FastDFS架构示意图:

FastDFS+nginx+php的完整应用[转储]

 

文件上传流程:

FastDFS+nginx+php的完整应用[转储]

 

 

1. Client询问Tracker server应上传到哪个Storage server;

2. Tracker server返回一台可用的Storage server,返回的数据为该Storage server的IP地址和端口;

3. Client直接和该Storage server建立连接,进行文件上传。

4. Storage server返回新生成的文件ID,文件上传结束。

5. 连接关闭。


文件下载流程:

FastDFS+nginx+php的完整应用[转储]

 

 

1. client询问tracker可以下载指定文件的storage,参数为文件ID(组名和文件名);

2. tracker返回一台可用的storage;

3. client直接和storage通信完成文件下载。

4. 连接关闭。

 

 

FastDFS论坛:http://bbs.chinaunix.net/forum-240-1.html

FastDFS google code:http://code.google.com/p/fastdfs/

 

关于tracker server 和 storage server之间是如何交互的,请看我在附件中的PPT、以及PDF格式的电子书,还有一个是关于配置文件的参数以及fastdfs各项参数是如何调优的,都有详细的说明,下面就让我们开始配置过程吧!
 

配置环境:

CentOS 5.8 x 64

tracker server: 192.168.25.204

storage server: 192.168.25.207

php 客户端    :192.168.25.205

 

一、安装部署

1、配置tracker server

 

解决依赖关系

 

安装fastdfs

注意我们这里使用的是最新版本的fastdfs,由于最新版的fastdfs取消了自带的http功能,所以这里我们就不对make.sh做修改。

 

配置文件解释

tracker.conf   //负责均衡调度服务器配置文件

client.conf      //客户端上传配置文件

http.conf     //http服务器配置文件

storage.conf//文件存储服务器配置文件

mime.types   //文件类型配置文件

 

修改tracker server的配置文件

 

创建/data/fastdfs,用于存放tracker日志、storage server等信息

 

 

FastDFS+nginx+php的完整应用[转储]

 

2、配置storage server

上述安装过程是一样的这里就不在进行演示,请大家见谅!

 

创建数据目录,并启动storage server(有刷屏的感觉)

FastDFS+nginx+php的完整应用[转储]

FastDFS+nginx+php的完整应用[转储]

查看tracker和storage的链接情况:

FastDFS+nginx+php的完整应用[转储]

 

3、测试上传文件

我们这里在tracker server上配置客户端上传文件

 

上传个文件,如果上传成功,会返回一个url,我们记住这个url,等下要用到

FastDFS+nginx+php的完整应用[转储]

 

http://192.168.25.207/group1/M00/00/00/wKgZz1IEYnSASqs2AAAGgpr6pLY3507236_big

 

二、在storage server上安装nginx

1、安装nginx关于fastdfs集合的扩展模块,注意这个模块nginx默认的编译模块中没有,需手动下载安装

 

只需解压开就可,这里我们再解释一下,好些朋友,在加载这个模块的时候,会报一些很莫名其妙的错,这个本人在编译的时候也是亲身体会,百思不得其解,后来经过点播才发现,版本不匹配,这里fastdfs官网给有详细说明,请看模块解压目录下的HISTORY、INSTALL问件,这里面很详细的安装和版本匹配说明(吃一堑一定要长一智)

 

安装nginx之前需要解决很多依赖关系的,这里不做说明,我这里是安装过得了,就不贴出来了,请大家按照网上的教程,解决依赖关系!

 

[root@web2 ~]# ln -s /data/fastdfs/data /data/fastdfs/data/M00

 

修改nginx的配置文件

 

然后我们在浏览器中输入上边上传的url,访问一下:

FastDFS+nginx+php的完整应用[转储]
 


我们可以很清楚的看到400,Bad Request,那么我们换种访问方式试试

 

然后我们把url中的group1手动去掉,访问一下:

 

FastDFS+nginx+php的完整应用[转储]

 

很明显可以访问,我在配置的时候也是百思不得其解,网上也有此类问题,无意间打开了一个相关的帖子,终于让我找到了答案。

 

修改fastdfs的模块配置文件

 

然后我们再来访问一下:

 

FastDFS+nginx+php的完整应用[转储]

 

如上图所示,ok了,加上组名可以访问,到这里基本上已经配置完成了

 

但是我在网上搜解决上述解决方法时,看到了一篇博文,结合了php,我觉得有必要分享一下,那好继续我们苦逼的配置吧!

 

三、PHP客户端配置

 

因为php的客户端安装也会依赖fastdfs本身的一些库文件,所以请保证已经安装了fastdfs

安装过程和上边一样,这里参考上边安装过程!

 

这个php客户端所在的测试机本来我就在上边搭建好了LNMP,所以只需参考上述过程安装fastdfs即可!

 

验证模块是否被正常加载

 


修改为如下配置:

 


然后我们写个小页面,写个php脚本上传

 

执行php脚本

[root@web1 ~]# /usr/local/php/bin/php test.php

结果如下图所示:

FastDFS+nginx+php的完整应用[转储]

 

我们来访问下试试;

FastDFS+nginx+php的完整应用[转储]

 

到此为止我们关于fastdfs的完整应用就介绍到此了,希望大家都动手做一下!还有关于fastdfs php插件的使用方法和函数调用方法,可以看/root/FastDFS/php_client/README,里面有详细介绍!此篇博文过程中如果有什么不对的地方,还请朋友们们指正,大家一起进步!

 

 

http://blog.chinaunix.net/uid-27003384-id-4059897.html

FastDFS+nginx+php的完整应用[转储],布布扣,bubuko.com

FastDFS+nginx+php的完整应用[转储]

上一篇:页面加载完成后执行的JS


下一篇:linux – 某些密钥通过锁屏