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架构示意图:

文件上传流程:

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

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

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

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

5. 连接关闭。

文件下载流程:

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

解决依赖关系

view
source
print?

1.[[email protected] ~]# tar xf libevent-2.0.21-stable.tar.gz

2.[[email protected] ~]# cd libevent-2.0.21-stable

3.[[email protected] libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent

4.[[email protected] libevent-2.0.21-stable]# make

5.[[email protected] libevent-2.0.21-stable]# make install

6.[[email protected] libevent-2.0.21-stable]# echo ‘/usr/local/libevent/include/‘ >> /etc/ld.so.conf

7.[[email protected] libevent-2.0.21-stable]# echo ‘/usr/local/libevent/lib/‘ >> /etc/ld.so.conf

8.[[email protected] libevent-2.0.21-stable]# ldconfig

安装fastdfs

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

view
source
print?

1.[[email protected] ~]# tar xf FastDFS_v4.07.tar.gz

2.[[email protected] ~]# cd FastDFS

3.[[email protected] FastDFS]# ./make.sh C_INCLUDE_PATH=/usr/local/libevent/include/ LIBRARY_PATH=/usr/local/libevent/lib/

4.[[email protected] FastDFS]# ./make.sh install

5.[[email protected] FastDFS]# ls /etc/fdfs/

6.client.conf  http.conf  mime.types  storage.conf  tracker.conf

配置文件解释:

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

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

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

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

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

修改tracker
server的配置文件

view
source
print?

1.[[email protected] ~]# vim /etc/fdfs/tracker.conf

2.bind_addr= 改为 bind_addr=192.168.25.204

3.base_path=/home/yuqing/fastdfs 改为  base_path=/data/fastdfs

4.http.server_port=8080 改为 http.server_port=80

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

view
source
print?

1.[[email protected] ~]# mkdir -p /data/fastdfs

2.启动tracker server

3.[[email protected] ~]# /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf

2、配置storage server

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

view
source
print?

1.修改storage server的配置文件:

2.[[email protected] ~]# vim /etc/fdfs/storage.conf

3.bind_addr= 改为 bind_addr=192.168.25.207

4.base_path=/home/yuqing/fastdfs 改为 base_path=/data/fastdfs

5.store_path0=/home/yuqing/fastdfs 改为 store_path0=/data/fastdfs

6.tracker_server=192.168.209.121:22122 改为 tracker_server=192.168.25.204:22122

7.http.server_port=8888 改为 http.server_port=80

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

查看tracker和storage的链接情况:

3、测试上传文件

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

view
source
print?

1.[[email protected] ~]# vim /etc/fdfs/client.conf

2.base_path=/home/yuqing/fastdfs 改为 base_path=/data/fastdfs

3.tracker_server=192.168.0.197:22122

4.改为

5.tracker_server=192.168.25.204:22122

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

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

二、在storage
server上安装nginx

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

view
source
print?

1.[[email protected] ~]# tar xf fastdfs-nginx-module_v1.15.tar.gz

2.[[email protected] ~]# cd fastdfs-nginx-module

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

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

view
source
print?

01.[[email protected] ~]# tar xf nginx-1.4.1.tar.gz

02.[[email protected] ~]# cd nginx-1.4.1

03.[[email protected] nginx-1.4.1]# ./configure \

04.>   --prefix=/usr \

05.>   --sbin-path=/usr/sbin/nginx \

06.>   --conf-path=/etc/nginx/nginx.conf \

07.>   --error-log-path=/var/log/nginx/error.log \

08.>   --http-log-path=/var/log/nginx/access.log \

09.>   --pid-path=/var/run/nginx/nginx.pid  \

10.>   --lock-path=/var/lock/nginx.lock \

11.>   --user=nginx \

12.>   --group=nginx \

13.>   --with-http_ssl_module \

14.>   --with-http_flv_module \

15.>   --with-http_stub_status_module \

16.>   --with-http_gzip_static_module \

17.>   --http-client-body-temp-path=/var/tmp/nginx/client/ \

18.>   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \

19.>   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

20.>   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \

21.>   --http-scgi-temp-path=/var/tmp/nginx/scgi \

22.>   --with-pcre \

23.>   --add-module=/root/fastdfs-nginx-module/src

24.[[email protected] nginx-1.4.1]# make

25.[[email protected] nginx-1.4.1]# make install

view
source
print?

1.[[email protected] ~]# cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

2.[[email protected] ~]# vim /etc/fdfs/mod_fastdfs.conf

3.base_path=/tmp 改为 base_path=/data/fastdfs

4.tracker_server=tracker:22122 改为 tracker_server=192.168.25.204:22122

5.store_path0=/home/yuqing/fastdfs 改为 store_path0=/data/fastdfs

[[email protected]eb2 ~]# ln -s
/data/fastdfs/data /data/fastdfs/data/M00

修改nginx的配置文件

view
source
print?

01.[[email protected] ~]# vim /etc/nginx/nginx.conf

02.在server段添加如下内容:

03.location /group1/M00{

04.alias   /data/fastdfs/data;

05.ngx_fastdfs_module;

06.}

07.[[email protected] ~]# /usr/sbin/nginx -t

08.ngx_http_fastdfs_set pid=28145

09.nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

10.nginx: configuration file /etc/nginx/nginx.conf test is successful

11.[[email protected] ~]# /usr/sbin/nginx

12.ngx_http_fastdfs_set pid=28148

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

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

view
source
print?

1.修改nginx的配置文件

2.[[email protected] ~]# vim /etc/nginx/nginx.conf

3.location /M00{

4.alias   /data/fastdfs/data;

5.ngx_fastdfs_module;

6.}

view
source
print?

1.之后重启服务

2.[[email protected] ~]# /usr/sbin/nginx -s stop

3.ngx_http_fastdfs_set pid=28947

4.[[email protected] ~]# /usr/sbin/nginx

5.ngx_http_fastdfs_set pid=28948

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

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

view
source
print?

1.我们把nginx的配置文件修改回来

2.location /group1/M00{

3.alias   /data/fastdfs/data;

4.ngx_fastdfs_module;

5.}

修改fastdfs的模块配置文件

view
source
print?

1.[[email protected] ~]# vim /etc/fdfs/mod_fastdfs.conf

2.url_have_group_name = false 改为 true      #关于啥意思,配置文件中有解释

然后我们再来访问一下:

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

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

三、PHP客户端配置

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

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

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

view
source
print?

01.[[email protected] ~]# cd /root/FastDFS/php_client

02.[[email protected] php_client]# /usr/local/php/bin/phpize

03.Configuring for:

04.PHP Api Version:         20090626

05.Zend Module Api No:      20090626

06.Zend Extension Api No:   220090626

07.[[email protected] php_client]# ./configure --with-php-config=/usr/local/php/bin/php-config

08.[[email protected] php_client]# make && make install

09.[[email protected] php_client]# cat fastdfs_client.ini >> /usr/local/php/etc/p

10.pear.conf             php-fpm.conf          php-fpm.conf.default

11.[[email protected] php_client]# cat fastdfs_client.ini >> /etc/php.ini

验证模块是否被正常加载

view
source
print?

1.[[email protected] php_client]# /usr/local/php/bin/php -m | grep fastdfs_client

2.fastdfs_client              #说明模块已加载 www.it165.net

3.

4.重新加载php

5.[[email protected] php_client]# service php-fpm reload

修改为如下配置:

view
source
print?

1.tracker_server=192.168.25.204:22122

2.http.tracker_server_port=80

3.

4.重新加载php

5.[[email protected] php_client]# service php-fpm reload

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

view
source
print?

1.[[email protected] ~]# echo "php client is here." > /opt/upload.txt

2.[[email protected] ~]# vim test.php

3.<?php

4.var_dump(function_exists(‘fastdfs_storage_upload_by_filename‘));

5.$ret = fastdfs_storage_upload_by_filename(‘/opt/upload.txt‘);

6.var_dump($ret);

7.?>

执行php脚本

[[email protected] ~]#
/usr/local/php/bin/php test.php

结果如下图所示:

我们来访问下试试;

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

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

时间: 2024-10-31 13:02:02

FastDFS+nginx+php的完整应用[转储]的相关文章

Ansible + shell 实现部署fastdfs+nginx 实现图片服务器并提供动态缩放功能;

因为公司阿里服务器变动几次,手动部署了好几次fastdfs+nginx,于是就想到了自动化部署,以下为脚本内容,由于只是想把着功能实现,并未有完完整的判断逻辑: 以下为ansible-playbook及shell及模板nginx-fastdfs及动态缩略图配置; 如有错误,请不吝赐教: --- - hosts: apollo # vars: # filedest: /usr/local/ tasks: - name: prepare fastdfs-nginx-module copy: src=

FastDFS + Nginx 反向代理缓存 安装与配置

FastDFS + Nginx 反向代理缓存 安装与配置 作者:斯巴达克斯 时间:March 26, 2015 分类:存储 操作系统 CentOS release 6.5 (Final) 64 nginx相关软件 nginx-1.4.7 下载地址: http://nginx.org/en/download.html#nginx清除缓存模块 ngx_cache_purge-2.1 http://labs.frickle.com/nginx_ngx_cache_purge/pcre-8.36 ftp

FastDFS+Nginx问题及修复

FastDFS+nginx问题及修复:     1.[error] 30000#0: *1 open() "/usr/local/nginx/html/group1/M00/00 /00/wKgAA1cLh12AI0kfAAAADzbdjmQ50_big.html           "failed (2: No such file or directory), client: 192.168.0.181, server:localhost, request:            &

FastDFS + Nginx module

前言 新项目使用FastDFS 已经有一段时间了,最近又与Nginx 做了结合.趁有时间,做下整理. 需求 使用FastDFS 存储资源(图片.文档.音频.视频...)文件,使用Nginx 提供资源请求服务. PS:FastDFS特别适合大中型网站使用,所以这里选型时一定要注意.不是说小型不适用,而是一定要想清楚,是否一上来就有必要使用DFS这类应用.对于中小型网站,使用本地文件系统.NFS或Samba,就可以很好的解决此类需求. 网站的架构是随着业务增长而演变的,而非一蹴而就. 具体还是需要根

Centos7单台服务器搭建FastDFS+Nginx

Fastdfs+Nginx配置操作 单台配置 安装包下载: wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz wget https://github

虚拟机上图片服务器搭建(FastDFS+nginx)

文件服务器 0.提前建好需要的文件夹(/home/fastdfs) /home/fastdfs/tracker /home/fastdfs/storage /home/fastdfs/storage/path0 /home/fastdfs/ /home/fastdfs/mod 1.图片服务器搭建,上传所需要的jar包并解压到指定目录(/usr/local/) 2.安装gcc yum -y install gcc-c++ 3.安装libevent工具包(解压,进入解压文件/usr/local/)

FastDFS+Nginx安装配置

FastDFS+Nginx安装配置 1.系统环境 最小化安装的RedHat 6.4 fastdfs版本:FastDFS_v3.06.tar.gz nginx版本:nginx-1.0.11.tar.gz fastdfs-nginx-module版本:fastdfs-nginx-module_v1.10.tar.gz tracker1:192.168.199.126 tracker2:192.168.199.127 storage1:192.168.199.128 storage2: 192.168

SpringBoot集成FastDFS+Nginx整合基于Token的防盗链

为什么要用SpringBoot? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 创建独立的Spring应用程序 嵌入的Tomcat,无需部署WAR文件 简化Maven配置 自动配置Spring 提供生产就绪

一、CentOS7下搭建FastDFS+Nginx实现静态图片服务器

在集群环境下,图片存放在本地存在诸多限制,一般采用单独的图片服务器进行管理.FastDFS就是这样一个图片管理服务器. 环境需求,CentOS7下 一.先下载三件套,并上传到服务器中(Nginx自行下载),地址如下 1:libfastcommon https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz 2:fastdfs https://github.com/happyfish100/fastdfs/archive/