FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储,文件同步,文件访问(文件上传,文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站,视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份,负载均衡,线性扩容等机制,并注重高可用,高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传,下载等服务。FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用,存储节点存储文件,完成文件管理的所有功能。
1.安装环境装备
跟踪服务器:192.168.29.128
存储服务器:192.168.29.129
服务器环境:Centos7
数据目录:/opt/fastDFS/fastDFSDatadir
2.跟踪服务器和存储服务器均执行如下操作
2.1 编译安装所需依赖包
# yum install make cmake gcc gcc-c++
2.2 解压libfastcommon-master.zip(需提前上传或下载libfastcommon-master.zip到/usr/local/src目录)
# cd /usr/local/src/
# unzip libfastcommon-master.zip
# cd libfastcommon-master
2.3 编译安装
# ./make.sh
# ./make.sh install
libfastcommon 默认安装到了
/usr/lib64/libfastcommon.so
/usr/lib64/libfdfsclient.so
2.4 因为 FastDFS 主程序设置的lib目录是/usr/local/lib,所以需要创建软链接
# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
2.5 解压FastDFS(需提前上传或下载FastDFS_v5.05.tar.gz到/opt/fastDFS目录下)
# cd /opt/fastDFS
# tar -zxvf FastDFS_v5.05.tar.gz
# cd FastDFS
2.6 编译安装
# ./make.sh
# ./make.sh install
采用默认安装的方式安装,安装后的相应文件与目录:
A.服务脚本在:
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracker
B.配置文件在(样例配置文件)
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
C.命令工具在/usr/bin/目录下的:
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
stop.sh
restart.sh
2.7 因为FastDFS服务脚本设置的bin目录是/usr/local/bin,但实际命令安装在/usr/bin,可以进入/user/bin目录使用以下命令查看fastDFS的相关命令:
因此需要修改FastDFS服务脚本中相应的命令路径,也就是把/etc/init.d/fdfs_storaged和/etc/init.d/fdfs_tracker两个脚本中的/usr/local/bin修改成/usr/bin:
# vi /etc/init.d/fdfs_trackerd
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
# vi /etc/init.d/fdfs_storaged
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
3.配置 FastDFS 跟踪器(192.168.29.128)
3.1 复制FastDFS跟踪器样例配置文件,并重命名:
# cd /etc/fdfs/
# cp tracker.conf.sample tracker.conf
3.2 创建数据目录
# mkdir -p /opt/fastDFS/fastDFSDatadir/tracker
3.3 编辑跟踪器配置文件
# vi /etc/fdfs/tracker.conf
修改内容如下:
disabled=false
port=22122
base_path=/opt/fastDFS/fastDFSDatadir/tracker
其他配置信息保持默认,具体配置参数可以参考:FastDFS配置参数详解
3.4 防火墙中打开跟踪器端口
3.5 启动Tracker
# /etc/init.d/fdfs_trackerd start
(初次成功启动,会在/opt/fastDFS/fastDFSDatadir/tracker目录下创建data,logs两个目录)
4.配置FastDFS存储(192.168.29.129)
4.1 复制FastDFS存储器样例配置文件,并重命名
# cd /etc/fdfs/
# cp storage.conf.sample storage.conf
4.2 创建数据目录
# mkdir -p /opt/fastDFS/fastDFSDatadir/storage
4.3 编辑存储器样例配置文件
# vi /etc/fdfs/storage.conf
修改的内容如下:
disabled=false
port=23000
base_path=/opt/fastDFS/fastDFSDatadir/storage
store_path0=/opt/fastDFS/fastDFSDatadir/storage
tracker_server=192.168.29.128:22122
http.server_port=8888
其他配置信息保持默认,具体配置参数可以参考:FastDFS配置参数详解
4.4 防火墙中打开存储器端口
4.5 启动 Storage
# /etc/init.d/fdfs_storaged start
(初次成功启动,会在/opt/fastDFS/fastDFSDatadir/storage目录下创建data,logs两个目录)
5.文件上传测试(192.168.29.128)
5.1 复制FastDFS客户端样例配置文件,并重命名
# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
5.2 修改Tracker服务器中的客户端配置文件
# vi /etc/fdfs/client.conf
修改内容如下
base_path=/opt/fastDFS/fastDFSDatadir/tracker
tracker_server=192.168.29.128:22122
5.3 执行如下文件上传命令
# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/fastDFS/FastDFS_v5.05.tar.gz
返回ID号:group1/M00/00/00/wKgdgVkKT42AU1H4AAVFOL7FJU4.tar.gz
能返回以上文件ID,说明文件上传成功
6. 在每个存储节点上安装Nginx模块
6.1 fastdfs-nginx-module作用说明
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设Tracker服务器将文件上传到了192.168.29.128,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.29.129,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.29.129上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。(解压后的fastdfs-nginx-module在nginx安装时使用)
6.2 上传 fastdfs-nginx-module_v1.16.tar.gz 到/usr/local/src
6.3 解压
# cd /usr/local/src/
# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
6.4 修改fastdfs-nginx-module的config配置文件
# cd fastdfs-nginx-module/src
# vi config
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
修改为:CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
(注意:这个路径修改是很重要的,不然在Nginx编译的时候会报错)
6.5 编译安装Nginx的时候添加fastdfs-nginx-module
如果对Nginx编译安装不熟悉的话,可以参考我之前的博客:Nginx编译安装详细教程及常用命令介绍
这里只需在配置Nginx参数的时候 使用如下命令添加模块
# ./configure --prefix=/opt/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src
6.6 复制fastdfs-nginx-module源码中的配置文件到/etc/fdfs目录,并修改
# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# vi /etc/fdfs/mod_fastdfs.conf
修改以下配置:
connect_timeout=10
base_path=/tmp
tracker_server=192.168.29.128:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path0=/opt/fastDFS/fastDFSDatadir/storage
6.7 复制FastDFS的部分配置文件到/etc/fdfs目录
# cd /opt/fastDFS/FastDFS/conf
# cp http.conf mime.types /etc/fdfs/
6.8 在/fastdfs/storage文件存储目录下创建软连接,将其链接到实际存放数据的目录
ln -s /opt/fastDFS/fastDFSDatadir/storage/data /opt/fastDFS/fastDFSDatadir/storage/data/M00
6.9 配置Nginx
在http节点下添加以下server配置
server{
listen 8888;
server_name localhost;
location ~/group([0-9])/M00{
ngx_fastdfs_module;
}
}
A.8888端口值是要与/etc/fdfs/storage.conf中的http.server_port=8888相对应,因为http.server_port默认为 8888,如果想改成80,则要对应修改过来
B.Storage对应有多个group的情况下,访问路径带group名,如/group1/M00/00/00/xxx,对应的 Nginx 配置为:
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
C.如查下载时如发现老报404,将nginx.conf第一行user nobody修改为user root后重新启动
6.10 防火墙中打开Nginx的8888端口
6.11 重启Nginx
6.12 访问http://192.168.29.129:8888/group1/M00/00/00/wKgdgVkKT42AU1H4AAVFOL7FJU4.tar.gz下载刚刚上传的文件,如果成功下载,则说明配置都成功了
注意:千万不要使用kill -9命令强杀FastDFS进程,否则可能会导致binlog数据丢失
源码地址:https://github.com/happyfish100/
下载地址:http://sourceforge.net/projects/fastdfs/files/
官方论坛:http://bbs.chinaunix.net/forum-240-1.html