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
.
- 当遇到