一、什么是FDFS
FastDFS(简称FDFS) 是一个开源的高性能分布式文件系统。它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。
我们项目存储的时候先调用管理端, 管理端会给我们分配一台存储端的IP地址和端口, 我们向存储端机器存储文件, 存储端会给我们返回存储后的地址以及文件名, 文件名会自动被存储端重命名, 防止文件重名。
二、FDFS搭建
1、部署环境
- Linux Centos7
- Xshell、Xft连接服务器
- ibfastcommonV1.07.tar.gz依赖包、FastDFS_v5.05.tar.gz、nginx-1.12.2.tar.gz
2、FDFS搭建
1、Xshell连接服务器,上传所需tar.gz文件到/opt目录;
2、依赖包安装及配置:1)解压缩ibfastcommonV1.07.tar.gz到/usr/local/src/;(cd /usr/local/src/ tar zxvf /opt/ibfastcommonV1.07.tar.gz)
2)进入libfastcommon-1.07文件,编译,安装; (cd ibfastcommonV1.07/ 后ls会有一个make.sh 执行./make.sh ./make.sh install)
3) 设置软连接;因为安装后libfastcommon默认安装在了/usr/lib64目录下,而FDFS主程序设置目录在/usr/local/lib目录
3、FastDFS安装及配置:1) 解压缩FastDFS_v5.05.tar.gz到/usr/local/src/;
2) 进入FastDFS文件,编译、安装;
3) 设置软链接;FDFS的脚本bin目录在/usr/local/bin,但实际安装在/usr/bin。
4、创建存储目录:mkdir /usr/local/fdfsdata//tracker(追踪的数据和日志) mkdir /usr/local/fdfsdata//storage(存储的数据和日志)
mkdir /usr/local/fdfsdata//client (监听的数据和日志) mkdir /usr/local/fdfsdata//temp (临时目录)
--嫌麻烦可以使用xftp连接到服务器右键新建也行0.0
5、配置跟踪服务器和存储服务器
6、启动tracker和stronge /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
7、检查与测试 ps -ahx | grep fdfs 查看进程是否成功
netstat -unltp | grep fdfs 查看端口是否正在被监听
3、Nginx环境搭建
Nginx环境搭建大家都很熟悉,网上教程也很多,这里简单介绍。
1、解压nginx-1.12.2.tar.gz到/usr/local/nginx(没有就新建目录);
进入nginx-1.12.2;使用默认设置 ./configure;编译、安装(make、make install)
启动nginx (目录在/usr/local/nginx/sbin/nginx);
修改配置文件nginx.conf。在80端口下添加
location /group1/M00 {alias /data/fastdfs/res/data;
}
重启nginx;
2、杀掉ngxin并上传fastdfs-nignx-module到/usr/lcoal/;进入nginx-1.12.2目录添加模块 .configure --add-module=/usr/lcoal/fastdfs-nginx-module/src;重新编译、安装;
/usr/lcoal/nginx/sbin/nginx -V查看Nginx版本以及模块,正常应有刚添加的模块;常见编译错误就是没有添加成功。
3、将fastdfs-nginx-module目录src的配置文件mod_fastdfs.conf添加到/etc/fdfs目录;
4、修改mod_fastdfs.conf配置
客户端访问文件连接超时时长(单位:秒)
connect_timeout=10
临时目录
base_path=/usr/lcoal/fdfsdata/temptracker服务IP和端口
tracker_server=ip:22122访问链接前缀加上组名group1
url_have_group_name=true文件存储路径
store_path0=/usr/lcoal/fdfsdata/res
5、复制FastDFS/conf的配置文件(http.conf、mime.types 、anti-steal.jpg)到/etc/fdfs/目录;
6、配置nginx允许访问storage文件;
在80端口下添加fastdfs-nginx模块
location ~/group([0-9])/M00 {ngx_fastdfs_module;
}
7、重新启动nginx 。
Nginx添加fastdfs-nignx-module可以重定向文件连接到源服务器取文件,避免客户在访问时因文件复制延迟而导致访问失败的问题:由于FDFS是通过Travker服务器将文件存储在Storage服务器,但是同步存储服务器之间需要文件复制,有同步延迟的问题。假设Tracker服务器将一个文件上传到192.168.0.1,文件上传成功后将ID已经返回给客户端,但是同步存储到192.168.0.2的过程还没完成,如果这个时候用户访问或读取这个文件就会出现无法访问的问题。
三、测试文件上传
首先我向服务器上传一个图片,保存在桌面/ju/1.jpg
fdfs文件上传命令/usr/bin/fdfs_upload_file 监听配置文件/etc/fdfs/client.conf 文件路径/home/ju/1.jpg
可见返回了group1/M00/00/00/rBEAD2B_0VeAZqKcAAAoAfAfFDk204.jpg
去存储管理中查看stroage/data/
文件上传成功!
如果是在本地启动django127.0.0.1。在127.0.0.1后面加上group1/M00/00/00/rBEAD2B_0VeAZqKcAAAoAfAfFDk204.jpg便可看到刚刚上传的图片。