FastDFS
一、FastDFS入门
1.1 分布式文件系统
-
分布式文件系统 (
Distributed File System) 是一个软件/软件服务器,这个软件可以用来管理文件。但这个软件所管理的文件通常不是在一个服务器节点上,而是在多个服务器节点上,这些服务器节点通过网络相连构成一个庞大的文件存储服务器集群,这些服务器都用于存储文件资源,通过分布式文件系统来管理这些服务器上的文件。 -
常见的分布式文件系统有:
FastDFS、GFS、HDFS、Lustre、Ceph、GridFS、mogileFS、TFS等。 -
分布式文件系统与传统文件系统对比:

-
传统方式弊端:
- 如果用户数量多,
IO操作比较多,对磁盘访问压力很大。 - 如果磁盘发生故障,会造成数据丢失。
- 存储容量有限。
- 如果用户数量多,
1.2 FastDFS简介
FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单、灵活、高效,采用C语言开发,由阿里巴巴开发并开源。FastDFS对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量文件存储的问题,特别适合以文件为载体的在线服务,如相册网站、文档网站、图片网站、视频网站等等。FastDFS充分考虑了冗余备份、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
1.3 FastDFS发展历史
- 2008年4月项目启动,7月发布第一个版本
V1.00,两年时间内持续升级到V1.29 - 2010年8月推出
V2.00 - 2011年6月推出
V3.00 - 2012年10月推出
V4.0.0 - 2013年12月推出
V5.0.0 - 2019年10月推出
V6.0.0 FastDFS系统架构从第一个版本发布后一直没有大的调整,高版本完全兼容低版本的数据,可以做到平滑升级,推荐更新升级到最新版本。FastDFS代码托管在Gitee.- 开源软件.
1.4 FastDFS整体架构
FastDFS文件系统由两大部分构成,一个是客户端,一个是服务端,客户端通常指我们的程序,比如我们的Java程序去连接FastDFS、操作FastDFS,那我们的Java程序就是一个客户端,FastDFS提供专有API访问,目前提供了C、Java和PHP几种编程语言的API,用来访问FastDFS文件系统。- 服务端由两个部分构成:一个是跟踪器(
tracker),一个是存储节点(storage)。 - 跟踪器(
tracker)主要做调度工作,在内存中记录集群中存储节点storage的状态信息,是前端Client和后端存储节点storage的枢纽。因为相关信息全部在内存中,Tracker server的性能非常高,一个较大的集群(比如上百个group)中有3台就足够了。 - 存储节点(
storage)用于存储文件,包括文件和文件属性(meta data)都保存到存储服务器磁盘上,完成文件管理的所有功能:文件存储、文件同步和提供文件访问等。
二、FastDFS环境搭建
2.1 FastDFS安装
2.1.1 安装前的准备
-
检查
Linux上是否安装了gcc、libevent、libevent-devel:yum list installed | grep gcc yum list installed | grep libevent yum list installed | grep libevent-devel -
如果没有安装,则需进行安装:
yum install gcc libevent libevent-devel -y
2.1.2 安装libfastcommon库
-
libfastcommon库是FastDFS文件系统运行需要的公共C语言函数库。 -
下载:
wget https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.48.tar.gz -
解压下载下来的
tar.gz压缩包到当前目录:tar -zxvf libfastcommon-1.0.48.tar.gz -
切换到解压后的
libfastcommon目录:cd libfastcommon-1.0.48 -
执行
make脚本进行编译:./make.sh注意: make编译的时候如果报错,需解决错误后再次进行make,通常发生错误是由于Linux缺少某些依赖库导致,根据错误提示解决错误。
-
执行
make install进行安装:./make.sh install至此
libfastcommon库安装完毕。
2.1.3 安装FastDFS
-
FastDFS没有Windows版本,不能在Windows下使用。 -
FastDFS需要安装部署在Linux环境。 -
下载.
wget https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.07.tar.gz -
解压下载下来的
tar.gz压缩包到当前目录:tar -zxvf fastdfs-6.07.tar.gz -
切换到解压后
FastDFS的目录:cd fastdfs-6.07 -
执行
make脚本进行编译:./make.sh -
执行
make install进行安装:./make.sh install至此
FastDFS安装完成.
所有编译出来的文件存放在/usr/bin目录下.
所有配置文件存放在/etc/fdfs目录下. -
查看安装后的效果:
-
查看
FastDFS相关的可执行程序:ll /usr/bin/fdfs*/usr/bin是Linux的环境变量,可通过echo $PATH查看. -
查看
FastDFS的配置文件:ll /etc/fdfs/ -
注意需要把解压后的
fastdfs-6.0.7/conf目录下的两个文件拷贝到/etc/fdfs/,否则后续会有很多问题:cp http.conf /etc/fdfs/ cp mime.types /etc/fdfs/
-
2.2 FastDFS配置
-
去掉
/etc/fdfs/目录下FastDFS配置文件的后缀名:cp tracker.conf.sample tracker.conf cp storage.conf.sample storage.conf cp client.conf.sample client.conf cp storage_ids.conf.sample storage_ids.conf -
修改
tracker.conf文件:base_path=/opt/fastdfs/tracker #配置tracker存储数据的目录 -
修改
storage.conf文件:base_path=/opt/fastdfs/storage #storage存储数据目录 store_path0=/opt/fastdfs/storage/files #真正存放文件的目录 tracker_server=192.168.235.128:22122 #注册当前存储节点的跟踪器地址 -
在
Linux服务器上创建上面指定的目录:/opt/fastdfs/tracker /opt/fastdfs/storage /opt/fastdfs/storage/files
2.3 FastDFS启动
-
启动
FastDFS的tracker服务:fdfs_trackerd /etc/fdfs/tracker.conf -
启动
FastDFS的storage服务:fdfs_storaged /etc/fdfs/storage.conf -
查看启动进程:
ps -ef | grep fdfs -
查看
storage是否已经注册到了tracker:fdfs_monitor /etc/fdfs/storage.conf
-
首次启动
storage后,会在配置的路径下创建存储文件的目录:

2.4 FastDFS重启
-
重启
tracker:fdfs_trackerd /etc/fdfs/tracker.conf restart -
重启
storage:fdfs_storaged /etc/fdfs/storage.conf restart
2.5 FastDFS关闭
-
关闭
tracker执行命令:fdfs_trackerd /etc/fdfs/tracker.conf stop -
关闭
storage执行命令:fdfs_storaged /etc/fdfs/storage.conf stop -
或者
kill关闭fastdfs,但不建议在线上使用kill -9强制关闭,因为可能会导致文件信息不同步问题.
2.6 FastDFS测试
-
FastDFS安装完成之后,可以使用fdfs_test脚本测试文件上传。 -
测试之前,需要修改
client.conf配置文件,修改两个配置:base_path=/opt/fastdfs/client tracker_server=192.168.179.128:22122 -
在
/opt/fastdfs/目录下创建client. -
测试文件上传:
-
准备需要上传的文件
cd /root vim aa.txt #添加内容 -
执行上传命令
fdfs_test /etc/fdfs/client.conf upload /root/aa.txt
-
切换到存储目录查看文件上传情况:

-
-
FastDFS生成的文件目录结构及名称:

-
测试文件删除:
fdfs_delete_file /etc/fdfs/client.conf group1/要删除的文件路径
-
注意:
- 没有搭建集群默认只有一个组
group1. - 后缀名包含-m的为属性文件(
meta). - 在
Linux中并没有磁盘一说,是虚拟的.
- 没有搭建集群默认只有一个组
三、分布式文件系统FastDFS的HTTP访问
3.1 概述
- 在文件上传的时候,上传成功的信息中有提示我们可以通过某个路径去访问上传的文件,但是我们直接访问这个路径,却不可以,那么已经上传到
FastDFS文件系统中的文件,我们如何在浏览器中访问呢? FastDFS提供了一个Nginx扩展模块,利用该模块,我们可以通过Nginx访问已经上传到FastDFS上的文件。
3.2 Fastdfs的Nginx扩展模块
-
下载:
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz -
解压:
tar -zxvf fastdfs-nginx-1.22.tar.gz -
安装
Nginx并且添加fastDFS模块:- 因为这个模块必须在
Nginx的安装的过程中才能添加,所有我们需要重新安装一个nginx,为了和原来已安装的Nginx进行区分,我们把新安装的Nginx取名为nginx_fdfs. - 下载:
wget http://nginx.org/download/nginx-1.18.0.tar.gz - 解压:
tar -zxvf nginx-1.18.0.tar.gz - 切换至解压后的
Nginx主目录,执行配置操作:cd nginx_fdfs ./configure --prefix=/usr/tool/fastDFS/nginx_fdfs --add-module=/usr/tool/fastDFS/fastdfs-nginx-module-1.22/src - 执行命令进行编译:
make - 执行命令进行安装:
make install - 安装
Nginx的FastDFS扩展模块注意事项:# gcc编译器是否安装 yum list installed | grep gcc yum install gcc -y # openssl库是否安装 yum list installed | grep openssl yum install openssl openssl-devel -y # pcre库是否安装 yum list installed | grep pcre yum install pcre pcre-devel -y # zlib库是否安装 yum list installed | grep zlib yum install zlib zlib-devel -y yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel –y
- 因为这个模块必须在
-
FastDFS的Nginx访问配置:-
/usr/tool/fastDFS/fastdfs-nginx-module-1.22/src(自己实际存放Nginx扩展模块的目录)目录下的mod_fastdfs.conf文件拷贝到/etc/fdfs/目录下,这样才能正常启动Nginx:cp /usr/tool/fastDFS/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/ -
修改
mod_fastdfs.conf配置文件:base_path=/opt/fastdfs/nginx_mod tracker_server=192.168.235.128:22122 url_have_group_name = true store_path0=/opt/fastdfs/storage/files -
在
/opt/fastdfs/目录下创建nginx_mod目录.
-
-
配置
Nginx的配置文件:- 拦截请求路径中包含
/group[1-9]/M0[0-9]的请求,用fastdfs的Nginx模块进行转发.location ~ /group[1-9]/M0[0-9] { ngx_fastdfs_module; } ngx_fastdfs_module;这个指令不是Nginx本身提供的,是扩展模块提供的,根据这个指令找到FastDFS提供的Nginx模块配置文件,然后找到Tracker,最终找到Stroager.
- 拦截请求路径中包含
3.3 FastDFS的Nginx访问启动与测试
-
启动带有
Fastdfs模块的Nginx:# 测试 /usr/tool/fastDFS/nginx_fdfs/sbin/nginx -c /usr/tool/fastDFS/nginx_fdfs/conf/nginx.conf -t #启动 /usr/tool/fastDFS/nginx_fdfs/sbin/nginx -c /usr/tool/fastDFS/nginx_fdfs/conf/nginx.conf -
重启或启动
FastDFS服务进程:fdfs_trackerd /etc/fdfs/tracker.conf restart fdfs_storaged /etc/fdfs/storage.conf restart -
上传一个文件进行测试验证:
fdfs_test /etc/fdfs/client.conf upload /root/aa.txt -
在浏览器访问上传的文件:
- 当遇到
400错误,检查配置/etc/fdfs/mod_fastdfs.conf url_have_group_name=true
该配置表示访问路径中是否需要带有group1,改为true表示路径中需要有group1.
- 当遇到
7142

被折叠的 条评论
为什么被折叠?



