一、前言

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

二、FastDFS基础知识

FastDFS 架构包括 Tracker Server 和 Storage Server。客户端请求 Tracker Server 进行文件上传、下载,通过 Tracker Server 调度最终由 Storage Server 完成文件上传和下载。

Tracker Server 作用是负载均衡和调度,通过 Tracker Server 在文件上传时可以根据一些策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。

Storage Server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storage Server 没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将 storage 称为存储服务器。

三、FastDFS搭建

3.1 软件下载

我们需要下载安装
libfastcommon: https://github.com/happyfish100/libfastcommon
fastdfs: https://github.com/happyfish100/fastdfs

3.2 基础环境安装

由于安装libfastcommon、fastdfs需要进行编译,所以需要安装gcc等工具,执行以下命令:

yum install gcc -y

3.3 安装libfatscommon

解压libfatscommon

unzip libfastcommon-master.zip

编译、安装

./make.sh
./make.sh install

安装成功后如下所示:

3.4 安装fastdfs

解压fastdfs

unzip fastdfs-master.zip

编译、安装

./make.sh
./make.sh install

安装成功后如下所示:

安装验证

安装成功后,/usr/bin包含以下执行命令

/etc/fdfs包含以下文件

3.5 配置

将安装文件夹下的配置文件拷贝到/etc/fdfs目录下

cp ./conf/* /etc/fdfs/

这里我们tracker和storage存放目录分别如下:

类别目录
tracker/opt/fastdfs/tracker
storage/opt/fastdfs/storage
client/opt/fastdfs/client

配置tracker

编辑/etc/fdfs/tracker.conf,修改如下信息:

1
base_path=/opt/fastdfs/tracker

启动与关闭tracker

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start #启动
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop #关闭

检查进程如下:

ps -ef|grep tracker

配置storage

编辑/etc/fdfs/storage.conf,修改如下信息:

1
2
3
4
5
6
7
8
# 修改storage的工作空间
base_path=/opt/fastdfs/storage

# 修改storage的存储空间
store_path0=/opt/fastdfs/storage

# 修改tracker的地址和端口号,用于心跳,我本地IP为:192.168.33.10
tracker_server=192.168.33.10:22122

启动与关闭storage

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start #启动
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop #关闭

检查进程如下:

ps -ef|grep storage

3.6 测试上传

修改client.conf

修改客户端配置文件/etc/fdfs/client.conf,修改如下信息:

1
2
3
4
base_path=/opt/fastdfs/client

#tracker的ip根据实际tracker的ip地址配置
tracker_server=192.168.33.10:22122

这里以上传/etc/fdfs目录下的anti-steal.jpg文件进行测试

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg

上传成功!这里remote_filename显示了上传后存储目录(在前面配置的storage的store_path0=/opt/fastdfs/storage下),url为远程访问地址,这里还不能远程访问,配置了nginx模块后才能访问。

四、与nginx集成

fastdfs安装好以后是无法通过http访问的,这个时候就需要借助nginx了,所以需要安装fastdfs的第三方模块到nginx中,就能使用了。

注意:nginx需要和storage在同一个节点。

4.1 配置 fastdfs-nginx-module

下载fastdfs-nginx-module

fastdfs-nginx-module: https://github.com/happyfish100/fastdfs-nginx-module

解压fastdfs-nginx-module

unzip fastdfs-nginx-module-master.zip

进入解压后文件夹下,复制src下配置文件到fdfs目录下

cp ./src/mod_fastdfs.conf /etc/fdfs/

修改src/config

vi ./src/config

主要是修改路径,把local删除,因为fastdfs安装的时候我们没有修改路径,原路径是/usr。

4.2 安装nginx

安装nginx可以参考 《nginx反向代理设置ssl,支持https》 ,如果在现有的nginx做升级,可以参考 《如何对在用的nginx添加新模块》

注意:配置命令与该文章中略有不同,需要增加一个fastdfs-nginx-module模块,即下面的最后一行,以实际路径为准,我本地使用

./configure --prefix=/opt/nginx --add-module=/opt/fastdfs/fastdfs-nginx-module-master/src
make && make install

4.3 修改mod_fastdfs.conf

修改/etc/fdfs/mod_fastdfs.conf,修改如下:

1
2
3
4
5
base_path=/opt/fastdfs/tmp
#tracker地址
tracker_server=192.168.33.10:22122
url_have_group_name = true
store_path0=/opt/fastdfs/storage

4.4 配置nginx

修改nginx.conf,添加如下虚拟主机

vi /opt/nginx/conf/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
server {

listen 10005;

server_name localhost;

location /group1/M00 {
ngx_fastdfs_module;
}

}

4.5 启动nginx

/opt/nginx/sbin/nginx

4.6 测试

上传文件

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /opt/fastdfs/photo.jpg

浏览器访问

在浏览器中输入http:ip:nginx端口/fastFDS返回的字符串

http://192.168.33.10:10005/group1/M00/00/00/wKghCmMUgoqAUM_KAABD4k7DNRw226.jpg
或者
http://192.168.33.10:10005/group1/M00/00/00/wKghCmMUgoqAUM_KAABD4k7DNRw226_big.jpg