【转载】CentOS 6.x系统下安装配置及测试分布式文件服务器FastDFS+Nginx+cache+PHP集群详细教程

FastDFS简介

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

  FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

  存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。

  FastDFS系统结构如下图所示:

1

  跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

  为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

  在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

  当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

  FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

2

FastDFS file upload

上传文件交互过程:

1. client询问tracker上传到的storage,不需要附加参数;

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

3. client直接和storage通讯完成文件上传。

3

FastDFS file download

下载文件交互过程:

1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);

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

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

  需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。

系统环境

测试环境:最小化安装的CentOS 6.5 x86_64版操作系统
实验拓扑图:

4

系统操作环境的设置

#软件安装包存储
/usr/local/src
#libevent安装目录
/usr/local/libevent
#fastdfs安装目录
/usr/local/fastdfs
#nginx安装目录
/usr/local/nginx

环境准备

所有服务器上操作

为了速度,配置使用sohu的源

1 cd /etc/yum.repo.d/
3 安装EPEL源
5 因为系统是最小化安装,所以需要安装开发工具和编译nginx所需的开发包
6 yum -y install gcc gcc-c++ perl
7 或执行以下命令
8 yum groupinstall "Development Tools"
9 yum install libevent-devel.x86_64 pcre-devel.x86_64  zlib-devel.x86_64

安装FastDFS

首先安装libevent

官方推荐稳定的1.4.14b版本的,2.x的可能有不稳定性

01 获取下载
03  解压并编译安装
04 tar zvxf libevent-1.4.14b-stable.tar.gz
05 ./configure –prefix=/usr
06 make clean;
07 make
08 make install
09       
10 测试libevent是否安装成功
11 ls -al /usr/lib | grep libevent
12 出来一大列东西,就说明安装成功了。
13  
14 如果libevent的安装目录为/usr/local/lib下,则还需要建立 libevent- 2.0 .so. 5 到 /usr/lib 的软连接,这样其他程序运行时才能找到libevent库:
15 ln -s /usr/local/lib/libevent- 2.0 .so. 5  /usr/lib/libevent- 2.0 .so. 5 
16 否则会出现
17 ./tracker/fdfs_trackerd: error while loading shared libraries:
18 libevent-2.0.so.5: cannot open shared object file: No such file or directory)

下载FastDFS安装包

注意:tracker、storage、php端需要安装FastDFS(即所有机器)
FastDFS官方论坛:http://www.csource.org
下载1:http://sourceforge.net/projects/fastdfs/files/
下载2:https://code.google.com/p/fastdfs/downloads/list (目前这上面基本已停止更新)

所需要下载的压缩包有:
注:以下括号中的地址为下载的列表地址,在下载列表中可以选择当前最新的开发版本或最新的稳定版本
FastDFS源代码:FastDFS_v5.01.tar.gz(http://sourceforge.net/projects/fastdfs/files/FastDFS%20Server%20Source%20Code/)
nginx模块源代码:fastdfs-nginx-module_v1.15.tar.gz(http://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/)
nginx服务器源代码:nginx-1.4.7.tar.gz(http://nginx.org/en/download.html)
nginx cache purge插件源代码:ngx_cache_purge-2.1.tar.gz(http://wiki.nginx.org/CachePurgeChs)
nginx依赖的pcre库源代码:pcre-8.34.tar.gz(http://ftp.exim.llorien.org/pcre/)
nginx依赖的zlib库源代码:zlib-1.2.8.tar.gz(http://pkgs.fedoraproject.org/repo/pkgs/mingw-zlib/)

安装tracker

安装

首先在172.16.1.202上安装FastDFS tracker,使用FastDFS_v5.01.tar.gz源代码包。

02  
03 首先将代码包复制到系统的/usr/local/src内(这一步可选),然后使用tar命令解压
04  
05 [root@tracker opt]# cp FastDFS_v5.01.tar.gz /usr/local/src/
06 [root@tracker opt]# cd /usr/local/src/
07 [root@tracker src]# tar zxf FastDFS_v5.01.tar.gz
08 [root@tracker src]# cd FastDFS
09 [root@tracker FastDFS]# ll
10 总用量 128
11 drwxrwxr-x. 3 500 500  4096 2月   6 18:07 client
12 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 common
13 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 conf
14 -rw-rw-r--. 1 500 500 35067 7月  28 2008 COPYING-3_0.txt
15 -rw-rw-r--. 1 500 500 29691 2月   2 13:17 HISTORY
16 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 init.d
17 -rw-rw-r--. 1 500 500  7639 1月   5 14:08 INSTALL
18 -rwxrwxr-x. 1 500 500  5531 12月  7 15:19 make.sh
19 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 php_client
20 -rw-rw-r--. 1 500 500  2380 7月  28 2008 README
21 -rwxrwxr-x. 1 500 500  1768 4月  12 2010 restart.sh
22 -rwxrwxr-x. 1 500 500  1680 4月  10 2010 stop.sh
23 drwxrwxr-x. 4 500 500  4096 2月   6 18:07 storage
24 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 test
25 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 tracker
26  
27 运行make.sh,确认make成功。期间如果有错误,可能会是缺少依赖的软件包,需安装后再次make。
28  
29 [root@tracker FastDFS]# ./make.sh
30 注意:我们这里使用的是最新版本的fastdfs,由于最新版的fastdfs取消了自带的http功能,所以这里我们就不对make.sh做修改。
31 运行make.sh install,确认install成功。
32  
33 [root@tracker FastDFS]# ./make.sh install
34  
35 安装完成后,所有可执行文件在/usr/local/bin下,以fdfs开头:
36   
37 [root@tracker FastDFS]# ll /usr/local/bin/fdfs*
38 -rwxr-xr-x. 1 root root  522918 3月  25 14:57 /usr/local/bin/fdfs_appender_test
39 -rwxr-xr-x. 1 root root  522871 3月  25 14:57 /usr/local/bin/fdfs_appender_test1
40 -rwxr-xr-x. 1 root root  514023 3月  25 14:57 /usr/local/bin/fdfs_append_file
41 -rwxr-xr-x. 1 root root  513433 3月  25 14:57 /usr/local/bin/fdfs_crc32
42 -rwxr-xr-x. 1 root root  513967 3月  25 14:57 /usr/local/bin/fdfs_delete_file
43 -rwxr-xr-x. 1 root root  514377 3月  25 14:57 /usr/local/bin/fdfs_download_file
44 -rwxr-xr-x. 1 root root  514133 3月  25 14:57 /usr/local/bin/fdfs_file_info
45 -rwxr-xr-x. 1 root root  525064 3月  25 14:57 /usr/local/bin/fdfs_monitor
46 -rwxr-xr-x. 1 root root 1179682 3月  25 14:57 /usr/local/bin/fdfs_storaged
47 -rwxr-xr-x. 1 root root  529845 3月  25 14:57 /usr/local/bin/fdfs_test
48 -rwxr-xr-x. 1 root root  527774 3月  25 14:57 /usr/local/bin/fdfs_test1
49 -rwxr-xr-x. 1 root root  655809 3月  25 14:57 /usr/local/bin/fdfs_trackerd
50 -rwxr-xr-x. 1 root root  514213 3月  25 14:57 /usr/local/bin/fdfs_upload_appender
51 -rwxr-xr-x. 1 root root  514999 3月  25 14:57 /usr/local/bin/fdfs_upload_file
52  
53 所有配置文件在/etc/fdfs下:
54  
55 [root@tracker FastDFS]# ll /etc/fdfs/
56 总用量 60
57 -rw-r--r--. 1 root root  1461 3月  13 15:15 client.conf
58 -rw-r--r--. 1 root root   858 3月  13 15:15 http.conf
59 -rw-r--r--. 1 root root 31172 3月  13 15:15 mime.types
60 -rw-r--r--. 1 root root  3837 3月  25 10:03 mod_fastdfs.conf
61 -rw-r--r--. 1 root root  7515 3月  24 10:36 storage.conf
62 -rw-r--r--. 1 root root  6989 3月  13 15:15 tracker.conf

至此tracker安装完成。

配置

编辑配置文件目录下的tracker.conf,设置相关信息并保存。
创建tracker目录保存运行日志

1 [root@tracker FastDFS]# mkdir -m 777 -p /fdfs/tracker
2 [root@tracker FastDFS]# vim /etc/fdfs/tracker.conf
3  
4 一般只需改动以下几个参数即可:
5 disabled=false            #启用配置文件
6 port=22122                #设置tracker的端口号
7 base_path=/fdfs/tracker   #设置tracker的数据文件和日志目录(需预先创建)
8 http.server_port=8080     #设置http端口号

如需要进行性能调优,可以参照《FastDFS 配置文件详解(修订版1)》:http://bbs.chinaunix.net/thread-1941456-1-1.html

运行

运行tracker之前,先要把防火墙中对应的端口打开(本例中为22122)。

01 [root@tracker FastDFS]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 22122 -j ACCEPT
02 [root@tracker FastDFS]# /etc/init.d/iptables save
03 iptables:将防火墙规则保存到 /etc/sysconfig/iptables:[确定]
04  
05 启动tracker,确认启动是否成功。(查看是否对应端口22122是否开始监听)
06  
07 [root@tracker FastDFS]# /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
08 telnet 看是否启动成功
09 [root@tracker FastDFS]# telent 172.16.1.202 22122
10 也可以netstat看是否启动成功
11 [root@tracker FastDFS]# netstat -unltp | grep fdfs
12 tcp    0    0.0.0.0:22122       0.0.0.0:*           LISTEN      1766/fdfs_trackerd
13  
14 也可查看tracker的日志是否启动成功或是否有错误。
15  
16 [root@tracker FastDFS]# cat /fdfs/tracker/logs/trackerd.log
17  
18 tracker server 运行时目录结构
19  ${base_path}                                 
20     |__data                                     
21     |     |__storage_groups.dat:存储分组信息     
22     |     |__storage_servers.dat:存储服务器列表  
23     |__logs                                       
24           |__trackerd.log:tracker server日志文件 
25            
26 关于目录结构的更详细内容,请参考:http://www.cnblogs.com/chinacloud/archive/2011/01/19/1939066.html
27  
28 设置开机自动启动。
29  
30 [root@tracker FastDFS]# vim /etc/rc.d/rc.local

将运行命令行添加进文件:/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

安装storage

安装

首先在172.16.1.203上安装FastDFS storage,使用FastDFS_v5.01.tar.gz源代码包。

02 首先将代码包复制到系统的/usr/local/src内(这一步可选),然后使用tar命令解压
03  
04 [root@storage1 opt]# cp FastDFS_v5.01.tar.gz /usr/local/src/
05 [root@storage1 opt]# cd /usr/local/src/
06 [root@storage1 src]# tar zxf FastDFS_v5.01.tar.gz
07 [root@storage1 src]# cd FastDFS
08 [root@storage1 FastDFS]# ll
09 总用量 128
10 drwxrwxr-x. 3 500 500  4096 2月   6 18:07 client
11 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 common
12 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 conf
13 -rw-rw-r--. 1 500 500 35067 7月  28 2008 COPYING-3_0.txt
14 -rw-rw-r--. 1 500 500 29691 2月   2 13:17 HISTORY
15 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 init.d
16 -rw-rw-r--. 1 500 500  7639 1月   5 14:08 INSTALL
17 -rwxrwxr-x. 1 500 500  5531 12月  7 15:19 make.sh
18 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 php_client
19 -rw-rw-r--. 1 500 500  2380 7月  28 2008 README
20 -rwxrwxr-x. 1 500 500  1768 4月  12 2010 restart.sh
21 -rwxrwxr-x. 1 500 500  1680 4月  10 2010 stop.sh
22 drwxrwxr-x. 4 500 500  4096 2月   6 18:07 storage
23 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 test
24 drwxrwxr-x. 2 500 500  4096 2月   6 18:07 tracker
25  
26 运行make.sh,确认make成功。期间如果有错误,可能会是缺少依赖的软件包,需安装后再次make。
27  
28 [root@storage1 FastDFS]# ./make.sh
29  
30 运行make.sh install,确认install成功。
31  
32 [root@storage1 FastDFS]# ./make.sh install
33  
34 安装完成后,所有可执行文件在/usr/local/bin下,以fdfs开头:
35   
36 [root@storage1 FastDFS]# ll /usr/local/bin/fdfs*
37 -rwxr-xr-x. 1 root root  522918 3月  25 14:57 /usr/local/bin/fdfs_appender_test
38 -rwxr-xr-x. 1 root root  522871 3月  25 14:57 /usr/local/bin/fdfs_appender_test1
39 -rwxr-xr-x. 1 root root  514023 3月  25 14:57 /usr/local/bin/fdfs_append_file
40 -rwxr-xr-x. 1 root root  513433 3月  25 14:57 /usr/local/bin/fdfs_crc32
41 -rwxr-xr-x. 1 root root  513967 3月  25 14:57 /usr/local/bin/fdfs_delete_file
42 -rwxr-xr-x. 1 root root  514377 3月  25 14:57 /usr/local/bin/fdfs_download_file
43 -rwxr-xr-x. 1 root root  514133 3月  25 14:57 /usr/local/bin/fdfs_file_info
44 -rwxr-xr-x. 1 root root  525064 3月  25 14:57 /usr/local/bin/fdfs_monitor
45 -rwxr-xr-x. 1 root root 1179682 3月  25 14:57 /usr/local/bin/fdfs_storaged
46 -rwxr-xr-x. 1 root root  529845 3月  25 14:57 /usr/local/bin/fdfs_test
47 -rwxr-xr-x. 1 root root  527774 3月  25 14:57 /usr/local/bin/fdfs_test1
48 -rwxr-xr-x. 1 root root  655809 3月  25 14:57 /usr/local/bin/fdfs_trackerd
49 -rwxr-xr-x. 1 root root  514213 3月  25 14:57 /usr/local/bin/fdfs_upload_appender
50 -rwxr-xr-x. 1 root root  514999 3月  25 14:57 /usr/local/bin/fdfs_upload_file
51  
52 所有配置文件在/etc/fdfs下:
53  
54 [root@storage1 FastDFS]# ll /etc/fdfs/
55 总用量 60
56 -rw-r--r--. 1 root root  1461 3月  13 15:15 client.conf
57 -rw-r--r--. 1 root root   858 3月  13 15:15 http.conf
58 -rw-r--r--. 1 root root 31172 3月  13 15:15 mime.types
59 -rw-r--r--. 1 root root  3837 3月  25 10:03 mod_fastdfs.conf
60 -rw-r--r--. 1 root root  7515 3月  24 10:36 storage.conf
61 -rw-r--r--. 1 root root  6989 3月  13 15:15 tracker.conf

至此storage安装完成。

配置

#创建Storage目录保存运行日志及其data数据

01 [root@storage1 FastDFS]# mkdir -m 777 -p /fdfs/storage
02  
03 编辑配置文件目录下的storage.conf,设置相关信息并保存。
04  
05 [root@storage1 FastDFS]# vim /etc/fdfs/storage.conf
06  
07 一般只需改动以下几个参数即可:
08 disabled=false                    #启用配置文件
09 group_name=group1                 #组名,根据实际情况修改
10 port=23000                        #设置storage的端口号
11 base_path=/fdfs/storage           #设置storage的日志目录(需预先创建)
12 store_path_count=1                #存储路径个数,需要和store_path个数匹配
13 store_path0=/fdfs/storage         #存储路径
14 tracker_server=172.16.1.202:22122 #tracker服务器的IP地址和端口号
15 http.server_port=8080     #设置http端口号

如需要进行性能调优,可以参照《FastDFS 配置文件详解(修订版1)》:http://bbs.chinaunix.net/thread-1941456-1-1.html

运行

运行storage之前,先要把防火墙中对应的端口打开(本例中为23000)。

001 [root@storage1 FastDFS]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 23000 -j ACCEPT
002 [root@storage1 FastDFS]# /etc/init.d/iptables save
003 iptables:将防火墙规则保存到 /etc/sysconfig/iptables:[确定]
004  
005 启动storage,会根据配置文件的设置自动创建多级存储目录,确认启动是否成功。(查看是否对应端口23000是否开始监听)
006  
007 [root@storage1 FastDFS]# /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf restart
008 data path: /fdfs/storage/data, mkdir sub dir...
009 mkdir data path: 00 ...
010 mkdir data path: 01 ...
011 mkdir data path: 02 ...
012 mkdir data path: 03 ...
013 ...
014 data path: /fdfs/storage/data, mkdir sub dir done.
015 [root@storage1 FastDFS]# netstat -unltp | grep fdfs
016 tcp    0    0.0.0.0:23000       0.0.0.0:*           LISTEN      1766/fdfs_storaged
017  
018 也可查看storage的日志是否启动成功或是否有错误。
019  
020 [root@storage1 FastDFS]# cat /fdfs/storage/logs/storaged.log
021  
022 确认启动成功后,可以运行fdfs_monitor查看storage服务器是否已经登记到tracker服务器。
023  
024 [root@storage1 FastDFS]# /usr/local/bin/fdfs_monitor /etc/fdfs/storage.conf
025 [2014-03-26 01:51:20] DEBUG - base_path=/fdfs/storage, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
026  
027 server_count=1, server_index=0
028  
029 tracker server is 172.16.1.202:22122
030  
031 group count: 1
032  
033 Group 1:
034 group name = group1
035 disk total space = 27789 MB
036 disk free space = 23920 MB
037 trunk free space = 0 MB
038 storage server count = 1
039 active server count = 1
040 storage server port = 23000
041 storage HTTP port = 8080
042 store path count = 1
043 subdir count per path = 256
044 current write server index = 0
045 current trunk file id = 0
046  
047     Storage 1:
048         id = 172.16.1.203
049         ip_addr = 172.16.1.203  ACTIVE
050         http domain =
051         version = 5.01
052         join time = 2014-03-26 01:48:19
053         up time = 2014-03-26 01:48:19
054         total storage = 27789 MB
055         free storage = 23920 MB
056         upload priority = 10
057         store_path_count = 1
058         subdir_count_per_path = 256
059         storage_port = 23000
060         storage_http_port = 8080
061         current_write_path = 0
062         source storage id=
063         if_trunk_server= 0
064         total_upload_count = 0
065         success_upload_count = 0
066         total_append_count = 0
067         success_append_count = 0
068         total_modify_count = 0
069         success_modify_count = 0
070         total_truncate_count = 0
071         success_truncate_count = 0
072         total_set_meta_count = 0
073         success_set_meta_count = 0
074         total_delete_count = 0
075         success_delete_count = 0
076         total_download_count = 0
077         success_download_count = 0
078         total_get_meta_count = 0
079         success_get_meta_count = 0
080         total_create_link_count = 0
081         success_create_link_count = 0
082         total_delete_link_count = 0
083         success_delete_link_count = 0
084         total_upload_bytes = 0
085         success_upload_bytes = 0
086         total_append_bytes = 0
087         success_append_bytes = 0
088         total_modify_bytes = 0
089         success_modify_bytes = 0
090         stotal_download_bytes = 0
091         success_download_bytes = 0
092         total_sync_in_bytes = 0
093         success_sync_in_bytes = 0
094         total_sync_out_bytes = 0
095         success_sync_out_bytes = 0
096         total_file_open_count = 0
097         success_file_open_count = 0
098         total_file_read_count = 0
099         success_file_read_count = 0
100         total_file_write_count = 0
101         success_file_write_count = 0
102         last_heart_beat_time = 2014-03-26 01:51:03
103         last_source_update = 1970-01-01 08:00:00
104         last_sync_update = 1970-01-01 08:00:00
105         last_synced_timestamp = 1970-01-01 08:00:00
106  
107 看到“172.16.1.203  ACTIVE”即可确认storage运行正常。
108  
109 storage server 运行时目录结构                                       
110  ${base_path}                                                          
111  |__data                                                              
112  |__.data_init_flag:当前storage server初始化信息                     
113  |  |__storage_stat.dat:当前storage server统计信息                   
114  |  |__sync:存放数据同步相关文件                                     
115  |  |  |__binlog.index:当前的binlog文件索引号                        
116  |  |  |__binlog.###:存放更新操作记录(日志)                        
117  |  |  |__${ip_addr}_${port}.mark:存放同步的完成情况                 
118  |                                                                    
119  |  | |__一级目录:256个存放数据文件的目录,如:00, 1F                
120  |  |__二级目录:256个存放数据文件的目录                              
121  |__logs                                                             
122     |__storaged.log:storage server日志文件    

关于目录结构的更详细内容,请参考:http://www.cnblogs.com/chinacloud/archive/2011/01/19/1939066.html

设置开机自动启动。

1 [root@storage1 FastDFS]# vim /etc/rc.d/rc.local
2  
3 将运行命令行添加进文件:/usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf restart

之后依次在172.16.1.204~208上全部安装上storage并确认运行正常。注意配置文件中group名参数需要根据实际情况调整,本例中group是这样分配的:
group1:172.16.1.203,172.16.1.204
group2:172.16.1.205,172.16.1.206
group3:172.16.1.207,172.16.1.208
另外每个group中所有storage的端口号必须一致。

在storage上安装nginx

曾经有过疑问,既然文件是直接被保持在storage服务器上,那直接用nginx就可以访问了,为什么还要添加这个模块?
答:Nginx服务器是安装在Storeage服务器上的,也就是说,一般情况下它只提供对本Storeage服务器上的资源提供服务。只有在本机并没有需要获取的资源的情况下,才会通过文件ID反解出源storage,直接请求源storage。
当同组内其他Storeage新上传的图片本机并没有及时同步的时候,Nginx会根据url寻找上传的Storeage源服务器,进行redirect或者proxy两种方式之一的转发,从而解决文件同步延迟问题。redirect和proxy,大家大概能猜到,不累述了。
在这里Nginx因为只是访问Storeage的本地资源,所以并没有充分的利用tracker进行读取信息的负载均衡,在下一节内容中我们也将配置tracker的负载均衡。

tracker server上不需要任何web server
在每台storage server上部署web server,直接对外提供HTTP服务
目前已提供apache和nginx扩展模块
FastDFS默认自带的http服务器性能不好,所以一般建议用外置的apache或者nginx来解决http下载,以应付大并发的情况
注意nginx扩展模块只支持GET和HEAD模式获取文件,需要开发那边配合修改程序

在storage上安装的nginx主要为了提供http的访问服务,同时解决group中storage服务器的同步延迟问题。这个模块nginx默认的编译模块中没有,需手动下载安装。

安装

首先在172.16.1.203上安装nginx,使用nginx-1.4.7.tar.gz源代码包以及FastDFS的nginx插件fastdfs-nginx-module_v1.15.tar.gz。
下载源代码包(如果下载失败,多重新偿试下载几次就可以了):

006 首先将代码包和插件复制到系统的/usr/local/src内(可选),然后使用tar命令解压
007  
008 [root@storage1 opt]# cp nginx-1.4.7.tar.gz /usr/local/src
009 [root@storage1 opt]# cp fastdfs-nginx-module_v1.15.tar.gz /usr/local/src
010 [root@storage1 opt]# cp pcre-8.34.tar.gz /usr/local/src
011 [root@storage1 opt]# cp zlib-1.2.8.tar.gz /usr/local/src
012 [root@storage1 opt]# cd /usr/local/src/
013 [root@storage1 src]# tar zxf nginx-1.4.7.tar.gz
014 [root@storage1 src]# tar zxf fastdfs-nginx-module_v1.15.tar.gz
015 只需解压开就可,这里我们再解释一下,好些朋友,在加载这个模块的时候,会报一些很莫名其妙的错,这个本人在编译的时候也是亲身体会,百思不得其解,后来经过点拨才发现,版本不匹配,这里fastdfs官网给有详细说明,请看模块解压目录下的HISTORY、INSTALL问件,这里面很详细的安装和版本匹配说明(吃一堑一定要长一智)
016 [root@storage1 src]# tar zxf pcre-8.34.tar.gz
017 [root@storage1 src]# tar zxf zlib-1.2.8.tar.gz
018 [root@storage1 src]# cd nginx-1.4.7
019 [root@storage1 nginx-1.4.7]# ll
020 总用量 592
021 drwxr-xr-x. 6 1001 1001   4096 3月  26 02:34 auto
022 -rw-r--r--. 1 1001 1001 225213 3月  18 21:17 CHANGES
023 -rw-r--r--. 1 1001 1001 343040 3月  18 21:17 CHANGES.ru
024 drwxr-xr-x. 2 1001 1001   4096 3月  26 02:34 conf
025 -rwxr-xr-x. 1 1001 1001   2369 3月  18 21:17 configure
026 drwxr-xr-x. 3 1001 1001   4096 3月  26 02:34 contrib
027 drwxr-xr-x. 2 1001 1001   4096 3月  26 02:34 html
028 -rw-r--r--. 1 1001 1001   1397 3月  18 21:17 LICENSE
029 drwxr-xr-x. 2 1001 1001   4096 3月  26 02:34 man
030 -rw-r--r--. 1 1001 1001     49 3月  18 21:17 README
031 drwxr-xr-x. 8 1001 1001   4096 3月  26 02:34 src
032  
033 运行./configure进行安装前的设置,主要设置安装路径、FastDFS插件模块目录、pcre库目录、zlib库目录。
034 如果提示错误,可能缺少依赖的软件包,需先安装依赖包,再次运行./configure
035  
036 [root@storage1 nginx-1.4.7]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src --with-pcre=/usr/local/src/pcre-8.34/ --with-zlib=/usr/local/src/zlib-1.2.8
037  
038 提示:假设nginx已经在系统被安装过,执行命令:/usr/local/nginx/sbin/nginx -V
039 后得到原来的编译参数,如:
040 --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-openssl=/root/openssl-1.0.0d
041 cd nginx-1.0.10
042 然后再重新编译安装一次就可以了。
043   
044 运行make进行编译,确保编译成功。
045  
046 [root@storage1 nginx-1.4.7]# make
047  
048 运行make install进行安装。
049  
050 [root@storage1 nginx-1.4.7]# make install
051  
052 将FastDFS的nginx插件模块的配置文件copy到FastDFS配置文件目录。
053  
054 [root@storage1 nginx-1.4.7]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
055  
056 安装完成后,nginx所有文件在/usr/local/nginx下:
057   
058 [root@storage1 nginx-1.4.7]# ll /usr/local/nginx/
059 总用量 16
060 drwxr-xr-x. 2 root root 4096 3月  26 03:11 conf
061 drwxr-xr-x. 2 root root 4096 3月  26 03:11 html
062 drwxr-xr-x. 2 root root 4096 3月  26 03:11 logs
063 drwxr-xr-x. 2 root root 4096 3月  26 03:11 sbin
064  
065 至此nginx以及FastDFS的nginx插件模块安装完成。
066 <h3>配置</h3>
067 编辑/usr/local/nginx/conf配置文件目录下的nginx.conf,设置添加storage信息并保存。
068  
069 [root@storage1 nginx-1.4.7]# vim /usr/local/nginx/conf/nginx.conf
070  
071 将server段中的listen端口号改为8080:
072 listen       8080;
073 在server段中添加:
074  
075 访问路径不带group名(storage只有一个group的情况),如/M00/00/00/xxx:
076 location /M00 {
077     root /fdfs/storage/data;
078     ngx_fastdfs_module;
079 }
080 访问路径带group名(storage对应有多个group的情况),如/group1/M00/00/00/xxx:
081 location ~ /group[0-9]/M00 {
082     root /fdfs/storage/data;
083     ngx_fastdfs_module;
084 }
085  
086 编辑/etc/fdfs配置文件目录下的mod_fastdfs.conf,设置storage信息并保存。
087  
088 [root@storage1 nginx-1.4.7]# vim /etc/fdfs/mod_fastdfs.conf
089  
090 一般只需改动以下几个参数即可:
091 base_path=/fdfs/storage           #保存日志目录
092 tracker_server=172.16.1.202:22122 #tracker服务器的IP地址以及端口号
093 storage_server_port=23000         #storage服务器的端口号
094 group_name=group1                 #当前服务器的group名
095 url_have_group_name = true        #文件url中是否有group名,访问路径带group时为true否则为false,多个group的情况下,必须为true,为false时,group_count必须为0
096 store_path_count=1                #存储路径个数,需要和store_path个数匹配
097 store_path0=/fdfs/storage         #存储路径
098 http.need_find_content_type=true  #从文件扩展名查找文件类型(nginx时为true)
099 group_count = 3                   #设置组的个数
100 在末尾增加3个组的具体信息:
101 [group1]
102 group_name=group1
103 storage_server_port=23000
104 store_path_count=1
105 store_path0=/fdfs/storage
106  
107  [group2]
108 group_name=group2
109 storage_server_port=23000
110 store_path_count=1
111 store_path0=/fdfs/storage
112  
113 [group3]
114 group_name=group3
115 storage_server_port=23000
116 store_path_count=1
117 store_path0=/fdfs/storage
118  
119 建立M00至存储目录的符号连接。
120  
121 [root@storage1 nginx-1.4.7]# ln -s /fdfs/storage/data /fdfs/storage/data/M00
122 [root@storage1 nginx-1.4.7]# ll /fdfs/storage/data/M00
123 lrwxrwxrwx. 1 root root 19 3月  26 03:44 /fdfs/storage/data/M00 -> /fdfs/storage/data/
124  
125 至此,nginx以及FastDFS插件模块设置完成。
126 <h3>运行</h3>
127 运行nginx之前,先要把防火墙中对应的端口打开(本例中为8080)。
128  
129 [root@storage1 nginx-1.4.7]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
130 [root@storage1 nginx-1.4.7]# /etc/init.d/iptables save
131 iptables:将防火墙规则保存到 /etc/sysconfig/iptables:[确定]
132  
133 启动nginx,确认启动是否成功。(查看是否对应端口8080是否开始监听)
134  
135 [root@storage1 nginx-1.4.7]# /usr/local/nginx/sbin/nginx
136 ngx_http_fastdfs_set pid=40638
137 [root@storage1 nginx-1.4.7]# netstat -unltp | grep nginx
138 tcp    0    0.0.0.0:8080            0.0.0.0:*              LISTEN      40639/nginx
139  
140 也可查看nginx的日志是否启动成功或是否有错误。
141  
142 [root@storage1 nginx-1.4.7]# cat /usr/local/nginx/logs/error.log
143 ngx_http_fastdfs_process_init pid=40640
144 [2014-03-26 03:47:17] INFO - local_host_ip_count: 2,  127.0.0.1  172.16.1.203
145 [2014-03-26 03:47:17] INFO - fastdfs apache / nginx module v1.15, response_mode=proxy, base_path=/tmp, url_have_group_name=1, group_count=3, connect_timeout=2, network_timeout=30, tracker_server_count=1, if_alias_prefix=, local_host_ip_count=2, need_find_content_type=1, default_content_type=application/octet-stream, anti_steal_token=0, token_ttl=0s, anti_steal_secret_key length=0, token_check_fail content_type=, token_check_fail buff length=0, load_fdfs_parameters_from_tracker=1, storage_sync_file_max_delay=86400s, use_storage_id=0, storage server id count=0, flv_support=1, flv_extension=flv
146 [2014-03-26 03:47:17] INFO - group 1. group_name=group1, storage_server_port=23000, path_count=1, store_path0=/fdfs/storage
147 [2014-03-26 03:47:17] INFO - group 2. group_name=group2, storage_server_port=23000, path_count=1, store_path0=/fdfs/storage
148 [2014-03-26 03:47:17] INFO - group 3. group_name=group3, storage_server_port=23000, path_count=1, store_path0=/fdfs/storage

在error.log中没有错误,既启动成功。可以打开浏览器,直接访问http://172.16.1.203:8080,查看是否弹出nginx欢迎页面。

5

之后依次在172.16.1.204~208上全部安装上nginx并确认运行正常。

设置开机自动启动。

1 [root@storage1 nginx-1.4.7]# vim /etc/rc.d/rc.local
2  
3 将运行命令行添加进文件:/usr/local/nginx/sbin/nginx

在tracker上安装nginx

在tracker上安装的nginx主要为了提供http访问的反向代理、负载均衡以及缓存服务。

安装

首先将代码包和插件复制到系统的/usr/local/src内(可选),然后使用tar命令解压

001 [root@tracker opt]# cp nginx-1.4.7.tar.gz /usr/local/src
002 [root@tracker opt]# cp ngx_cache_purge-2.1.tar.gz /usr/local/src
003 [root@tracker opt]# cp pcre-8.34.tar.gz /usr/local/src
004 [root@tracker opt]# cp zlib-1.2.8.tar.gz /usr/local/src
005 [root@tracker opt]# cd /usr/local/src/
006 [root@tracker src]# tar zxf nginx-1.4.7.tar.gz
007 [root@tracker src]# tar zxf ngx_cache_purge-2.1.tar.gz
008 [root@tracker src]# tar zxf pcre-8.34.tar.gz
009 [root@tracker src]# tar zxf zlib-1.2.8.tar.gz
010 [root@tracker src]# cd nginx-1.4.7
011 [root@tracker nginx-1.4.7]# ll
012 总用量 592
013 drwxr-xr-x. 6 1001 1001   4096 3月  26 02:34 auto
014 -rw-r--r--. 1 1001 1001 225213 3月  18 21:17 CHANGES
015 -rw-r--r--. 1 1001 1001 343040 3月  18 21:17 CHANGES.ru
016 drwxr-xr-x. 2 1001 1001   4096 3月  26 02:34 conf
017 -rwxr-xr-x. 1 1001 1001   2369 3月  18 21:17 configure
018 drwxr-xr-x. 3 1001 1001   4096 3月  26 02:34 contrib
019 drwxr-xr-x. 2 1001 1001   4096 3月  26 02:34 html
020 -rw-r--r--. 1 1001 1001   1397 3月  18 21:17 LICENSE
021 drwxr-xr-x. 2 1001 1001   4096 3月  26 02:34 man
022 -rw-r--r--. 1 1001 1001     49 3月  18 21:17 README
023 drwxr-xr-x. 8 1001 1001   4096 3月  26 02:34 src
024  
025 运行./configure进行安装前的设置,主要设置安装路径、nginx cache purge插件模块目录、pcre库目录、zlib库目录。
026 如果提示错误,可能缺少依赖的软件包,需先安装依赖包,再次运行./configure
027  
028 [root@storage1 nginx-1.4.7]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_cache_purge-2.1 --with-pcre=/usr/local/src/pcre-8.34/ --with-zlib=/usr/local/src/zlib-1.2.8
029  
030 运行make进行编译,确保编译成功。
031  
032 [root@storage1 nginx-1.4.7]# make
033  
034 运行make install进行安装。
035  
036 [root@storage1 nginx-1.4.7]# make install
037  
038 至此nginx以及nginx cache purge插件模块安装完成。
039 <h3>配置</h3>
040 编辑/usr/local/nginx/conf配置文件目录下的nginx.conf,设置负载均衡以及缓存。
041  
042 [root@storage1 nginx-1.4.7]# vim /usr/local/nginx/conf/nginx.conf
043  
044 worker_processes  4;                  #根据CPU核心数而定
045 events {
046     worker_connections  65535;        #最大链接数
047     use epoll;                        #新版本的Linux可使用epoll加快处理性能
048 }
049 http {
050 #设置缓存参数
051     server_names_hash_bucket_size 128;
052     client_header_buffer_size 32k;
053     large_client_header_buffers 4 32k;
054     client_max_body_size 300m;
055     sendfile        on;
056     tcp_nopush      on;
057     proxy_redirect off;
058     proxy_set_header Host $http_host;
059     proxy_set_header X-Real-IP $remote_addr;
060     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
061     proxy_connect_timeout 90;
062     proxy_send_timeout 90;
063     proxy_read_timeout 90;
064     proxy_buffer_size 16k;
065     proxy_buffers 4 64k;
066     proxy_busy_buffers_size 128k;
067     proxy_temp_file_write_size 128k;
068 #设置缓存存储路径、存储方式、分配内存大小、磁盘最大空间、缓存期限
069     proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=http-cache:500m max_size=10g inactive=30d;
070     proxy_temp_path /var/cache/nginx/proxy_cache/tmp;
071 #设置group1的服务器
072     upstream fdfs_group1 {
073         server 172.16.1.203:8080 weight=1 max_fails=2 fail_timeout=30s;
074         server 172.16.1.204:8080 weight=1 max_fails=2 fail_timeout=30s;
075     }
076 #设置group2的服务器
077     upstream fdfs_group2 {
078         server 172.16.1.205:8080 weight=1 max_fails=2 fail_timeout=30s;
079         server 172.16.1.206:8080 weight=1 max_fails=2 fail_timeout=30s;
080     }
081 #设置group3的服务器
082     upstream fdfs_group3 {
083         server 172.16.1.207:8080 weight=1 max_fails=2 fail_timeout=30s;
084         server 172.16.1.208:8080 weight=1 max_fails=2 fail_timeout=30s;
085     }
086  
087    server {
088 #设置服务器端口
089         listen       8080;
090 #设置group1的负载均衡参数
091         location /group1/M00 {
092             proxy_next_upstream http_502 http_504 error timeout invalid_header;
093             proxy_cache http-cache;
094             proxy_cache_valid  200 304 12h;
095             proxy_cache_key $uri$is_args$args;
096             proxy_pass http://fdfs_group1;
097             expires 30d;
098         }
099 #设置group2的负载均衡参数
100         location /group2/M00 {
101             proxy_next_upstream http_502 http_504 error timeout invalid_header;
102             proxy_cache http-cache;
103             proxy_cache_valid  200 304 12h;
104             proxy_cache_key $uri$is_args$args;
105             proxy_pass http://fdfs_group2;
106             expires 30d;
107         }
108 #设置group3的负载均衡参数
109         location /group3/M00 {
110             proxy_next_upstream http_502 http_504 error timeout invalid_header;
111             proxy_cache http-cache;
112             proxy_cache_valid  200 304 12h;
113             proxy_cache_key $uri$is_args$args;
114             proxy_pass http://fdfs_group3;
115             expires 30d;
116         }
117 #设置清除缓存的访问权限
118         location ~ /purge(/.*) {
119             allow 127.0.0.1;
120             allow 172.16.1.0/24;
121             deny all;
122             proxy_cache_purge http-cache  $1$is_args$args;
123         }  
124     }
125 }

至此,nginx以及nginx cache purge插件模块设置完成。

运行

运行nginx之前,先要把防火墙中对应的端口打开(本例中为8080)。

01 [root@tracker nginx-1.4.7]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
02 [root@tracker nginx-1.4.7]# /etc/init.d/iptables save
03 iptables:将防火墙规则保存到 /etc/sysconfig/iptables:[确定]
04  
05 启动nginx,确认启动是否成功。(查看是否对应端口8080是否开始监听)
06  
07 [root@tracker nginx-1.4.7]# /usr/local/nginx/sbin/nginx
08 ???ngx_http_fastdfs_set pid=40638
09 [root@tracker nginx-1.4.7]# netstat -unltp | grep nginx
10 tcp    0    0.0.0.0:8080            0.0.0.0:*              LISTEN      40639/nginx
11  
12 尝试上传一个文件到FastDFS,然后访问试试。先配置client.conf文件。
13  
14 [root@tracker nginx-1.4.7]# vim /etc/fdfs/client.conf
15  
16 修改以下参数:
17 base_path=/fdfs/tracker                    #日志存放路径
18 tracker_server=172.16.1.202:22122          #tracker服务器IP地址和端口号
19 http.tracker_server_port=8080              #tracker服务器的http端口号

使用/usr/local/bin/fdfs_upload_file上传一个文件,程序会自动返回文件的URL。

[root@tracker nginx-1.4.7]# /usr/local/bin/fdfs_upload_file /etc/fdfs/client.conf /mnt/monk.jpg
group3/M00/00/00/rBABz1MzKG6Ad_hBAACKLsUDM60560.jpg

然后使用浏览器访问:

6

可以看到文件被正确读取出来了。

查看nginx的access.log日志,可以看到访问返回200成功。

01 [root@tracker nginx-1.4.7]# tail -n 10 -f /usr/local/nginx/logs/access.log
02 172.16.1.201 - - [26/Mar/2014:13:15:00 +0800] "GET /group3/M00/00/00/rBABz1MzKG6Ad_hBAACKLsUDM60560.jpg HTTP/1.1" 200 35374 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
03  
04 查看nginx的cache目录,可以看到已经生成了缓存文件。
05  
06 [root@tracker nginx-1.4.7]# ll /var/cache/nginx/proxy_cache/ -R
07 /var/cache/nginx/proxy_cache/:
08 总用量 8
09 drwx------. 3 nobody nobody 4096 3月  26 12:57 6
10 drwxr-xr-x. 2 nobody root   4096 3月  26 13:14 tmp
11  
12 /var/cache/nginx/proxy_cache/6:
13 总用量 4
14 drwx------. 2 nobody nobody 4096 3月  26 13:08 11
15  
16 /var/cache/nginx/proxy_cache/6/11:
17 总用量 36
18 -rw-------. 1 nobody nobody 35686 3月  26 13:08 b1f6fb1f7266f796765b6d6965021116

如果要手动清除缓存,可以在文件URL之前加上purge:

7

设置开机自动启动。

1 [root@tracker nginx-1.4.7]# vim /etc/rc.d/rc.local
2  
3 将运行命令行添加进文件:/usr/local/nginx/sbin/nginx

至此,tracker服务器上的http反向代理+负载均衡+缓存已经安装完成。

测试及使用

上传文件

8

FastDFS提供了多种方式上传文件:
使用fdfs_upload_file上传(之前已经有演示)
使用C语言客户端接口上传
使用PHP客户端接口上传
使用Java客户端接口上传
使用Python客户端接口上传
使用.NET客户端接口上传

根据具体情况选择使用。上传均支持断点续传。

下载文件

9

使用fdfs_download_file通过tracker服务器下载
使用nginx通过http方式直接从storage下载(支持断点续传,作者推荐)

删除文件

监视服务器资源

使用fdfs_monitor查看tracker和所有group的运行情况。

001 [root@tracker tmp]# /usr/local/bin/fdfs_monitor /etc/fdfs/client.conf
002 2014-03-26 15:01:07] DEBUG - base_path=/fdfs/tracker, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
003  
004 server_count=1, server_index=0
005  
006 tracker server is 172.16.1.202:22122
007  
008 group count: 3
009  
010 Group 1:
011 group name = group1
012 disk total space = 27789 MB
013 disk free space = 23825 MB
014 trunk free space = 0 MB
015 storage server count = 2
016 active server count = 2
017 storage server port = 23000
018 storage HTTP port = 8080
019 store path count = 1
020 subdir count per path = 256
021 current write server index = 1
022 current trunk file id = 0
023  
024     Storage 1:
025         id = 172.16.1.203
026         ip_addr = 172.16.1.203  ACTIVE
027         http domain =
028         version = 5.01
029         join time = 2014-03-26 01:48:19
030         up time =
031         total storage = 27789 MB
032         free storage = 23844 MB
033         upload priority = 10
034         store_path_count = 1
035         subdir_count_per_path = 256
036         storage_port = 23000
037         storage_http_port = 8080
038         current_write_path = 0
039         source storage id=
040         if_trunk_server= 0
041         total_upload_count = 1
042         success_upload_count = 1
043         total_append_count = 0
044         success_append_count = 0
045         total_modify_count = 0
046         success_modify_count = 0
047         total_truncate_count = 0
048         success_truncate_count = 0
049         total_set_meta_count = 0
050         success_set_meta_count = 0
051         total_delete_count = 0
052         success_delete_count = 0
053         total_download_count = 0
054         success_download_count = 0
055         total_get_meta_count = 0
056         success_get_meta_count = 0
057         total_create_link_count = 0
058         success_create_link_count = 0
059         total_delete_link_count = 0
060         success_delete_link_count = 0
061         total_upload_bytes = 24
062         success_upload_bytes = 24
063         total_append_bytes = 0
064         success_append_bytes = 0
065         total_modify_bytes = 0
066         success_modify_bytes = 0
067         stotal_download_bytes = 0
068         success_download_bytes = 0
069         total_sync_in_bytes = 0
070         success_sync_in_bytes = 0
071         total_sync_out_bytes = 24
072         success_sync_out_bytes = 24
073         total_file_open_count = 1
074         success_file_open_count = 1
075         total_file_read_count = 0
076         success_file_read_count = 0
077         total_file_write_count = 1
078         success_file_write_count = 1
079         last_heart_beat_time = 2014-03-26 15:00:47
080         last_source_update = 2014-03-26 13:13:55
081         last_sync_update = 1970-01-01 08:00:00
082         last_synced_timestamp = 1970-01-01 08:00:00
083     Storage 2:
084         id = 172.16.1.204
085         ip_addr = 172.16.1.204  ACTIVE
086         http domain =
087         version = 5.01
088         join time = 2014-03-26 18:53:19
089         up time = 2014-03-26 18:53:19
090         total storage = 27789 MB
091         free storage = 23825 MB
092         upload priority = 10
093         store_path_count = 1
094         subdir_count_per_path = 256
095         storage_port = 23000
096         storage_http_port = 8080
097         current_write_path = 0
098         source storage id= 172.16.1.203
099         if_trunk_server= 0
100         total_upload_count = 0
101         success_upload_count = 0
102         total_append_count = 0
103         success_append_count = 0
104         total_modify_count = 0
105         success_modify_count = 0
106         total_truncate_count = 0
107         success_truncate_count = 0
108         total_set_meta_count = 0
109         success_set_meta_count = 0
110         total_delete_count = 0
111         success_delete_count = 0
112         total_download_count = 0
113         success_download_count = 0
114         total_get_meta_count = 0
115         success_get_meta_count = 0
116         total_create_link_count = 0
117         success_create_link_count = 0
118         total_delete_link_count = 0
119         success_delete_link_count = 0
120         total_upload_bytes = 0
121         success_upload_bytes = 0
122         total_append_bytes = 0
123         success_append_bytes = 0
124         total_modify_bytes = 0
125         success_modify_bytes = 0
126         stotal_download_bytes = 0
127         success_download_bytes = 0
128         total_sync_in_bytes = 24
129         success_sync_in_bytes = 24
130         total_sync_out_bytes = 0
131         success_sync_out_bytes = 0
132         total_file_open_count = 1
133         success_file_open_count = 1
134         total_file_read_count = 0
135         success_file_read_count = 0
136         total_file_write_count = 1
137         success_file_write_count = 1
138         last_heart_beat_time = 2014-03-26 15:00:40
139         last_source_update = 1970-01-01 08:00:00
140         last_sync_update = 2014-03-27 03:38:23
141         last_synced_timestamp = 2014-03-26 13:13:56 (-1s delay)
142  
143 Group 2:
144 group name = group2
145 disk total space = 27789 MB
146 disk free space = 23825 MB
147 trunk free space = 0 MB
148 storage server count = 2
149 active server count = 2
150 storage server port = 23000
151 storage HTTP port = 8080
152 store path count = 1
153 subdir count per path = 256
154 current write server index = 0
155 current trunk file id = 0
156  
157     Storage 1:
158         id = 172.16.1.205
159         ip_addr = 172.16.1.205  ACTIVE
160         http domain =
161         version = 5.01
162         join time = 2014-03-26 19:37:36
163         up time = 2014-03-26 19:37:36
164         total storage = 27789 MB
165         free storage = 23825 MB
166         upload priority = 10
167         store_path_count = 1
168         subdir_count_per_path = 256
169         storage_port = 23000
170         storage_http_port = 8080
171         current_write_path = 0
172         source storage id=
173         if_trunk_server= 0
174         total_upload_count = 0
175         success_upload_count = 0
176         total_append_count = 0
177         success_append_count = 0
178         total_modify_count = 0
179         success_modify_count = 0
180         total_truncate_count = 0
181         success_truncate_count = 0
182         total_set_meta_count = 0
183         success_set_meta_count = 0
184         total_delete_count = 0
185         success_delete_count = 0
186         total_download_count = 0
187         success_download_count = 0
188         total_get_meta_count = 0
189         success_get_meta_count = 0
190         total_create_link_count = 0
191         success_create_link_count = 0
192         total_delete_link_count = 0
193         success_delete_link_count = 0
194         total_upload_bytes = 0
195         success_upload_bytes = 0
196         total_append_bytes = 0
197         success_append_bytes = 0
198         total_modify_bytes = 0
199         success_modify_bytes = 0
200         stotal_download_bytes = 0
201         success_download_bytes = 0
202         total_sync_in_bytes = 0
203         success_sync_in_bytes = 0
204         total_sync_out_bytes = 0
205         success_sync_out_bytes = 0
206         total_file_open_count = 0
207         success_file_open_count = 0
208         total_file_read_count = 0
209         success_file_read_count = 0
210         total_file_write_count = 0
211         success_file_write_count = 0
212         last_heart_beat_time = 2014-03-26 15:01:02
213         last_source_update = 1970-01-01 08:00:00
214         last_sync_update = 1970-01-01 08:00:00
215         last_synced_timestamp = 1970-01-01 08:00:00
216     Storage 2:
217         id = 172.16.1.206
218         ip_addr = 172.16.1.206  ACTIVE
219         http domain =
220         version = 5.01
221         join time = 2014-03-26 22:38:04
222         up time = 2014-03-26 22:38:04
223         total storage = 27789 MB
224         free storage = 23825 MB
225         upload priority = 10
226         store_path_count = 1
227         subdir_count_per_path = 256
228         storage_port = 23000
229         storage_http_port = 8080
230         current_write_path = 0
231         source storage id= 172.16.1.205
232         if_trunk_server= 0
233         total_upload_count = 0
234         success_upload_count = 0
235         total_append_count = 0
236         success_append_count = 0
237         total_modify_count = 0
238         success_modify_count = 0
239         total_truncate_count = 0
240         success_truncate_count = 0
241         total_set_meta_count = 0
242         success_set_meta_count = 0
243         total_delete_count = 0
244         success_delete_count = 0
245         total_download_count = 0
246         success_download_count = 0
247         total_get_meta_count = 0
248         success_get_meta_count = 0
249         total_create_link_count = 0
250         success_create_link_count = 0
251         total_delete_link_count = 0
252         success_delete_link_count = 0
253         total_upload_bytes = 0
254         success_upload_bytes = 0
255         total_append_bytes = 0
256         success_append_bytes = 0
257         total_modify_bytes = 0
258         success_modify_bytes = 0
259         stotal_download_bytes = 0
260         success_download_bytes = 0
261         total_sync_in_bytes = 0
262         success_sync_in_bytes = 0
263         total_sync_out_bytes = 0
264         success_sync_out_bytes = 0
265         total_file_open_count = 0
266         success_file_open_count = 0
267         total_file_read_count = 0
268         success_file_read_count = 0
269         total_file_write_count = 0
270         success_file_write_count = 0
271         last_heart_beat_time = 2014-03-26 15:01:02
272         last_source_update = 1970-01-01 08:00:00
273         last_sync_update = 1970-01-01 08:00:00
274         last_synced_timestamp = 1970-01-01 08:00:00
275  
276 Group 3:
277 group name = group3
278 disk total space = 27789 MB
279 disk free space = 23825 MB
280 trunk free space = 0 MB
281 storage server count = 2
282 active server count = 2
283 storage server port = 23000
284 storage HTTP port = 8080
285 store path count = 1
286 subdir count per path = 256
287 current write server index = 1
288 current trunk file id = 0
289  
290     Storage 1:
291         id = 172.16.1.207
292         ip_addr = 172.16.1.207  ACTIVE
293         http domain =
294         version = 5.01
295         join time = 2014-03-26 22:50:28
296         up time = 2014-03-26 22:50:28
297         total storage = 27789 MB
298         free storage = 23825 MB
299         upload priority = 10
300         store_path_count = 1
301         subdir_count_per_path = 256
302         storage_port = 23000
303         storage_http_port = 8080
304         current_write_path = 0
305         source storage id= 172.16.1.208
306         if_trunk_server= 0
307         total_upload_count = 1
308         success_upload_count = 1
309         total_append_count = 0
310         success_append_count = 0
311         total_modify_count = 0
312         success_modify_count = 0
313         total_truncate_count = 0
314         success_truncate_count = 0
315         total_set_meta_count = 0
316         success_set_meta_count = 0
317         total_delete_count = 0
318         success_delete_count = 0
319         total_download_count = 0
320         success_download_count = 0
321         total_get_meta_count = 0
322         success_get_meta_count = 0
323         total_create_link_count = 0
324         success_create_link_count = 0
325         total_delete_link_count = 0
326         success_delete_link_count = 0
327         total_upload_bytes = 35374
328         success_upload_bytes = 35374
329         total_append_bytes = 0
330         success_append_bytes = 0
331         total_modify_bytes = 0
332         success_modify_bytes = 0
333         stotal_download_bytes = 0
334         success_download_bytes = 0
335         total_sync_in_bytes = 0
336         success_sync_in_bytes = 0
337         total_sync_out_bytes = 0
338         success_sync_out_bytes = 0
339         total_file_open_count = 1
340         success_file_open_count = 1
341         total_file_read_count = 0
342         success_file_read_count = 0
343         total_file_write_count = 1
344         success_file_write_count = 1
345         last_heart_beat_time = 2014-03-26 15:01:20
346         last_source_update = 2014-03-27 03:20:13
347         last_sync_update = 1970-01-01 08:00:00
348         last_synced_timestamp = 1970-01-01 08:00:00
349     Storage 2:
350         id = 172.16.1.208
351         ip_addr = 172.16.1.208  ACTIVE
352         http domain =
353         version = 5.01
354         join time = 2014-03-26 22:49:37
355         up time = 2014-03-26 22:49:37
356         total storage = 27789 MB
357         free storage = 23825 MB
358         upload priority = 10
359         store_path_count = 1
360         subdir_count_per_path = 256
361         storage_port = 23000
362         storage_http_port = 8080
363         current_write_path = 0
364         source storage id=
365         if_trunk_server= 0
366         total_upload_count = 0
367         success_upload_count = 0
368         total_append_count = 0
369         success_append_count = 0
370         total_modify_count = 0
371         success_modify_count = 0
372         total_truncate_count = 0
373         success_truncate_count = 0
374         total_set_meta_count = 0
375         success_set_meta_count = 0
376         total_delete_count = 0
377         success_delete_count = 0
378         total_download_count = 0
379         success_download_count = 0
380         total_get_meta_count = 0
381         success_get_meta_count = 0
382         total_create_link_count = 0
383         success_create_link_count = 0
384         total_delete_link_count = 0
385         success_delete_link_count = 0
386         total_upload_bytes = 0
387         success_upload_bytes = 0
388         total_append_bytes = 0
389         success_append_bytes = 0
390         total_modify_bytes = 0
391         success_modify_bytes = 0
392         stotal_download_bytes = 0
393         success_download_bytes = 0
394         total_sync_in_bytes = 35374
395         success_sync_in_bytes = 35374
396         total_sync_out_bytes = 0
397         success_sync_out_bytes = 0
398         total_file_open_count = 1
399         success_file_open_count = 1
400         total_file_read_count = 0
401         success_file_read_count = 0
402         total_file_write_count = 1
403         success_file_write_count = 1
404         last_heart_beat_time = 2014-03-26 15:01:32
405         last_source_update = 1970-01-01 08:00:00
406         last_sync_update = 2014-03-27 03:20:19
407         last_synced_timestamp = 2014-03-27 03:20:14 (-1s delay)

其他功能

使用fdfs_crc32获取文件CRC
使用fdfs_delete_file删除文件
使用fdfs_file_info查看文件属性信息

以上所有功能均可使用接口在代码中调用。

CentOS下安装PHP扩展

因为php的客户端安装也会依赖FastDFS本身的一些库文件,所以请保证已经安装了FastDFS
安装过程和上边一样,这里参考上边安装过程!
这个php客户端所在的测试机本来我就在上边搭建好了LNMP,所以只需参考上述过程安装FastDFS即可!

安装PHP扩展

01 [root@web1 ~]# cd /root/FastDFS/php_client
02 [root@web1 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 [root@web1 php_client]# ./configure --with-php-config=/usr/local/php/bin/php-config
08 [root@web1 php_client]# make && make install
09 [root@web1 php_client]# cat fastdfs_client.ini >> /usr/local/php/etc/php.ini
10 验证模块是否被正常加载
11 [root@web1 php_client]# /usr/local/php/bin/php -m | grep fastdfs_client
12 fastdfs_client              #说明模块已加载 www.it165.net
13  
14 重新加载php
15 [root@web1 php_client]# service php-fpm reload

配置PHP扩展

1 [root@web1 php_client]# vi fastdfs_client.ini

测试

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

1 [root@web1 ~]# echo "php client is here." > /opt/upload.txt
2 [root@web1 ~]# 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 ?>
8 执行php脚本
9 [root@web1 ~]# /usr/local/php/bin/php test.php

结果如下图所示:
11

我们来访问下试试;

12

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

参考资料:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4133106&page=2#pid24185011
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4134654
FastDFS分布式文件服务器安装,及配置,测试:http://www.linuxidc.com/Linux/2012-09/71458.htm
CentOS fastDFS结合nginx的配置以及php端的调用方法:http://blog.163.com/a12333a_li/blog/static/8759428520133189414521/
FastDFS分布式文件客户端安装,以及fastdfsapi:http://blog.51yip.com/server/219.html
FastDFS安装扩展篇——安装PHP、Apache及Nginx的FastDFS扩展:http://www.icultivator.com/p/4862.html

FastDFS集群扩展

1、扩展到多台tracker和storage的配置方法
2、按照以上安装tracker的方法配置所需数量的tracker,只需要ip地址不重复就可以。
3、按照以上安装storage的方法配置所需数量的storage,注意Group_name项,如果是同一组,那么group_name相同,端口号也相同,如果group_name不同,那么端口号也不同。
4、在storage的配置文件中修改tracker_server的地址和端口,可以指定多个,将新增的tracker也加进去就可以了。
原始文件名和FastDFS上的文件名对应关系都是保存在DB, 源文件只有client知道.
参考资料:
FastDFS部署总结:http://250688049.blog.51cto.com/643101/1067985
关于多个tracker的负载均衡问题:http://bbs.chinaunix.net/thread-2289651-1-1.html
多个Tracker之间有链接,相互交互吗?:http://bbs.chinaunix.net/thread-2287513-1-1.html
多个tracker的配置问题:http://bbs.chinaunix.net/thread-1929814-1-1.html

FastDFS配置文件

# cd /etc/fdfs/
下面一共有5个配置文件,分别为:client.conf、http.conf、mime.types、storage.conf、tracker.conf,fastdfs进程的启动是以加载的配置文件区分的

client.conf: 客户端上传配置文件
http.conf: http服务器配置文件
storage.conf: 文件存储服务器配置文件
tracker.conf: 负责均衡调度服务器配置文件
mime.types: 文件类型配置文件

FastDFS默认端口

FastDFS默认使用了以下端口,如果开启了防火墙,请保证以下端口可访问:

FastDFS Tracker端口:22122
FastDFS Storage端口:23000
FastDHT端口:11411

常用命令

01 #启动tracker、storaged
02 /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
03 /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
04  
05 #查看trackerd状态:
06 /etc/init.d/fdfs_trackerd status
07  
08 #查看trackerd监听的端口:
09 netstat -plantu | grep tracker
10  
11 #查看Storage进程:
12 ps -ef | grep storaged | grep -v gre
13  
14 #重启tracker、storaged
15 /usr/local/bin/restart.sh  /usr/local/bin/fdfs_trackerd  /etc/fdfs/tracker.conf
16 /usr/local/bin/restart.sh  /usr/local/bin/fdfs_storaged  /etc/fdfs/storage.conf
17 #重启tracker
18 可以kill掉server进程后,执行启动命令行。如:
19 killall fdfs_trackerd
20 fdfs_trackerd /etc/fdfs/tracker.conf
21  
22 #停止tracker、storaged
23 /usr/local/bin/stop.sh  /usr/local/bin/fdfs_trackerd  /etc/fdfs/tracker.conf
24 /usr/local/bin/stop.sh  /usr/local/bin/fdfs_storaged  /etc/fdfs/storage.conf
25  
26 #监控storage
27 /usr/local/bin/fdfs_monitor /etc/fdfs/storage.conf
28 #如果存在多个多个组,只需要监控其中一个组,就能调出所有组的状态
29  
30 #删除组内服务器storage和查看各个组内服务器状态
31 /usr/local/bin/fdfs_monitor /etc/fdfs/client.conf delete group2 192.168.127.13
32 /usr/local/bin/fdfs_monitor /etc/fdfs/client.conf
33 storage server有7个状态,如下(数值从1~7):
34 # FDFS_STORAGE_STATUS:INIT      :初始化,尚未得到同步已有数据的源服务器
35 # FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到同步已有数据的源服务器
36 # FDFS_STORAGE_STATUS:SYNCING   :同步中
37 # FDFS_STORAGE_STATUS:DELETED   :已删除,该服务器从本组中摘除
38 # FDFS_STORAGE_STATUS:OFFLINE   :离线
39 # FDFS_STORAGE_STATUS:ONLINE    :在线,尚不能提供服务
40 # FDFS_STORAGE_STATUS:ACTIVE    :在线,可以提供服务
41  
42 # 启动和停止Nginx
43 /usr/local/nginx/sbin/nginx # 启动
44 /usr/local/nginx/sbin/nginx -s stop # 停止
45  
46 # 调整防火墙的规则,开放端口:22122
47 iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 22122 -j ACCEPT
48 /etc/init.d/iptables save
49  
50 #调整防火墙的规则,开放端口:23000
51 iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 23000 -j ACCEPT
52 /etc/init.d/iptables save
posted @ 2017-02-21 16:14  敲一敲  阅读(358)  评论(0编辑  收藏  举报