FastDFS 环境搭建及使用详解

发布时间:2024年01月16日

1、简介

1.1 分布式文件系统

分布式文件系统(Distributed File System)是一个软件/软件服务器,可以用来管理文件。这个软件所管理的文件通常在多个服务器节点上,这些服务器节点通过网络相连构成一个庞大的文件存储服务器集群,这些服务器都用于存储文件资源,通过分布式文件系统来管理这些服务器上的文件。

分布式文件系统与传统文件系统对比

在这里插入图片描述


1.2 FastDFS

FastDFS 就是常见的分布式文件系统之一,它是基于 C 语言开发的,一个轻量级开源的高性能分布式文件系统。主要功能有:文件存储、文件同步、文件访问(文件上传/下载),解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。FastDFS 特别适合中大型网站以文件为载体的在线服务。开源地址:https://github.com/happyfish100/fastdfs,只有Linux版,没有Window版。


1.3 FastDFS架构

FastDFS主要由两部分构成:客户端、服务端。
客户端(client):用于连接操作FastDFS的java程序,提供基本文件访问接口,比如 upload、download、append、delete 等。
服务端(Server):由两部分构成,跟踪器(tracker)、存储节点(storage)。
跟踪器(tracker):负责文件访问的调度和负载均衡,负责管理所有的 Storage Server 和 group 组/卷。
存储节点(storage):负责文件存储,文件同步/备份,提供文件访问接口,文件元数据管理。以 group 为单位,每个 group 内可以有多台 Storage Server,数据互为备份,达到容灾的目的。每个 Storage 在启动以后会主动连接 Tracker,告知自己所属 group 等存储相关信息,并保持周期性心跳。


2、环境搭建

2.1 FastDFS安装
2.1.1 安装前准备

检查是否安装了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 安装包下载

下载地址:https://github.com/happyfish100 ,需要下载以下几个包,需要注意的是最后一个libserverframe包是新引入的网络框架库,目前安装FastDFS除了libfastcommon还需另外编译安装它,否则编译不通过。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.1.3 安装 libfastcommon

安装 FastDFS 前首先需要安装 libfastcommon 。

解压

cd  /usr/local/fastdfs/
unzip libfastcommon-master.zip

进入解压后的目录,编译

cd libfastcommon-master/
./make.sh

然后安装

./make.sh install

在这里插入图片描述


2.1.4 安装 libserverframe

安装 FastDFS 前首先需要安装 libserverframe。

解压

cd  /usr/local/fastdfs/
unzip libserverframe-master.zip

进入解压后的目录,编译

cd libserverframe-master/
./make.sh

然后安装

./make.sh install

在这里插入图片描述


2.1.5 安装 FastDFS

解压

cd  /usr/local/fastdfs/
unzip fastdfs-master.zip

进入解压后的目录,编译

cd fastdfs-master/
./make.sh

然后安装

./make.sh install

在这里插入图片描述

安装成功后,可以看到配置文件已经在/etc/fdfs/目录下

在这里插入图片描述

并且在/usr/bin/目录下已经有 fdfs 开头的文件,都是启动Server的一些命令文件。

在这里插入图片描述

为了方便,我们先将FastDFS解压目录conf里的 http.conf 和 mime.types 文件拷贝到 /etc/fdfs/ 目录下,后续程序里使用会用到

cd /usr/local/fastdfs/fastdfs-master/conf/
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/

2.2 FastDFS配置

主要配置 tracker.conf 和 storage.conf 两个文件。

2.2.1 配置tracker
2.2.1.1 创建 tracker 工作目录

在配置Tracker之前,需要先创建Tracker服务器的文件路径,用于存储Tracker的数据文件和日志文件等。

mkdir -p /opt/fastdfs/tracker
2.2.1.2 修改 tracker 配置文件
vi /etc/fdfs/tracker.conf
#启用配置文件,默认启用配置文件(默认值)
disabled=false 
#设置tracker的端口号,通常采用22122这个默认端口 (默认值)
port=22122 
#设置tracker的数据文件和日志目录
base_path=/opt/fastdfs/tracker
#设置http端口号,(默认值)
http.server_port=8080

2.2.2 配置storage
2.2.2.1 创建 storage 工作目录

步骤基本与配置Tracker一致,创建Storage服务器的文件目录。

# 创建数据文件和日志目录
mkdir -p /opt/fastdfs/storage
# 创建实际文件存储目录
mkdir -p /opt/fastdfs/storage/files
2.2.2.2 修改 storage 配置文件
vi /etc/fdfs/storage.conf
#启用配置文件(默认值)
disabled=false
#组名,根据实际情况修改 (默认值)
group_name=group1
#设置storage的端口号,默认是23000,同一个组的storage端口号必须一致 (默认值)
port=23000
#设置storage数据文件和日志目录
base_path=/opt/fastdfs/storage
#存储路径个数,需要和store_path个数匹配 (默认值)
store_path_count=1  
#实际文件存储路径
store_path0=/opt/fastdfs/storage/files
#tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功
tracker_server=192.168.157.140:22122
#设置 http 端口号  (默认值)
http.server_port=8888

2.3 FastDFS启动
2.3.1 启动 tracker
fdfs_trackerd /etc/fdfs/tracker.conf

在这里插入图片描述


2.3.2 启动 storage
fdfs_storaged /etc/fdfs/storage.conf

在这里插入图片描述


2.3.3 验证

启动成功后,查看进程

ps -ef | grep fdfs

在这里插入图片描述

监测storage是否注册到了tracker中

fdfs_monitor /etc/fdfs/storage.conf

在这里插入图片描述

查看端口监听情况,22122和23000被正常监听。

#查看端口监听情况
netstat -unltp|grep fdfs

在这里插入图片描述

查看新生成的data和logs目录

cd /opt/fastdfs/storage

在这里插入图片描述

查看数据实际存储目录,里面存放了 255*255 个文件夹

cd /opt/fastdfs/storage/files

在这里插入图片描述

查看日志

tail -f /opt/fastdfs/storage/logs/storaged.log

在这里插入图片描述


2.4 FastDFS关闭
# 停止tracker服务
fdfs_trackerd /etc/fdfs/tracker.conf stop
# 停止storage服务
fdfs_storaged /etc/fdfs/storage.conf stop

2.5 FastDFS测试
2.5.1 配置client

测试主要使用client,所以修改 client.conf 配置文件

vi /etc/fdfs/client.conf
#配置数据存储路径
base_path = /opt/fastdfs/storage
#配置tracker_server部署的访问地址
tracker_server = 192.168.157.140:22122

2.5.2 上传测试
fdfs_test /etc/fdfs/client.conf upload /data/test.txt

在这里插入图片描述

成功。

tracker_query_storage_store_list_without_group: 
        server 1. group_name=, ip_addr=192.168.157.140, port=23000

group_name=group1, ip_addr=192.168.157.140, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKidjGWem4KAMz_DAAAAIxX_-fc253.txt
source ip address: 192.168.157.140
file timestamp=2024-01-10 21:28:34
file size=35
file crc32=369097207
example file url: http://192.168.157.140/group1/M00/00/00/wKidjGWem4KAMz_DAAAAIxX_-fc253.txt
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKidjGWem4KAMz_DAAAAIxX_-fc253_big.txt
source ip address: 192.168.157.140
file timestamp=2024-01-10 21:28:34
file size=35
file crc32=369097207
example file url: http://192.168.157.140/group1/M00/00/00/wKidjGWem4KAMz_DAAAAIxX_-fc253_big.txt

这里返回的文件目录结构如下

/group1/M00/00/00/wKidjGWem4KAMz_DAAAAIxX_-fc253.txt
/组名(group1)/磁盘(M00)/目录(00/00)/文件名

在这里插入图片描述

注:没有搭建集群默认只有一个组group1,后缀名包含-m的为属性文件(meta)。


2.5.3 下载测试
# 需要指定group_name和remote_filename,下载默认下载到当前目录
fdfs_test /etc/fdfs/client.conf download group1 M00/00/00/wKidjGWem4KAMz_DAAAAIxX_-fc253.txt

在这里插入图片描述


2.5.4 删除测试
# 需要指定group_name和remote_filename,下载默认下载到当前目录
fdfs_test /etc/fdfs/client.conf delete group1 M00/00/00/wKidjGWem4KAMz_DAAAAIxX_-fc253.txt

在这里插入图片描述


2.6 HTTP访问

在文件上传的时候,上传成功的信息中有提示我们可以通过某个路径去访问上传的文件,但是我们不能直接访问这个路径。 FastDFS提供了一个Nginx扩展模块fastdfs-nginx-module,利用该模块,我们可以通过Nginx来对外访问查看FastDFS上的文件,所以需要安装 nginx 和 fastdfs-nginx-module。

在这里插入图片描述

注:如果是已经有nginx了,只需要增加 fastdfs-nginx-module 模块就行,也就是最后nginx只执行make ,不执行install ,因为不需要重新安装,只需要生成新的nginx启动项即可。


2.6.1 安装nginx 和 fastdfs-nginx-module

安装nginx所需依赖

#安装nginx所需依赖
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel

解压 nginx 和 fastdfs-nginx-module

cd /usr/local/fastdfs
tar -zxvf nginx-1.19.10.tar.gz 
unzip fastdfs-nginx-module-master.zip

解压后进入 nginx 目录编译安装 nginx,并添加 fastdfs-nginx-module,我这里为了和原有Nginx进行区分,新安装的Nginx取名为nginx_fdfs

# 创建nginx安装目录
mkdir -p /usr/local/nginx_fdfs

cd /usr/local/fastdfs/nginx-1.19.10
# 配置,指定安装路径,添加模块
./configure --prefix=/usr/local/nginx_fdfs --add-module=/usr/local/fastdfs/fastdfs-nginx-module-master/src
# 编译
make
# 安装
make install

安装完成后

在这里插入图片描述


2.6.2 访问配置

把 fastdfs-nginx-module-master/src 目录下的 mod_fastdfs.conf 拷贝到 /etc/fdfs 目录下,这样才能正常启动 Nginx

cp /usr/local/fastdfs/fastdfs-nginx-module-master/src/mod_fastdfs.conf  /etc/fdfs/

在这里插入图片描述

在 /opt/fastdfs/ 目录下创建 nginx_mod 目录

mkdir -p /opt/fastdfs/nginx_mod

修改 mod_fastdfs.conf 配置文件

vi /etc/fdfs/mod_fastdfs.conf
#日志目录
base_path=/opt/fastdfs/nginx_mod  
#tracker服务器的IP地址以及端口号
tracker_server=192.168.157.140:22122
#storage服务器的端口号(默认值)
storage_server_port=23000 
#文件url中是否有 group 名
url_have_group_name = true 
#存储路径
store_path0=/opt/fastdfs/storage/files

修改 nginx.conf 配置文件,添加一个 location

vi /usr/local/nginx_fdfs/conf/nginx.conf
  server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
	    # 拦截请求路径中包含 /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,最终找到Storage。


2.6.3 启动nginx
# 测试
/usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf -t
# 启动
/usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf

# 停止
/usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf -s stop
# 重载
/usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf -s reload

在这里插入图片描述

检查

/usr/local/nginx_fdfs/sbin/nginx -V

在这里插入图片描述


2.6.4 访问测试

上传一张图片

fdfs_test /etc/fdfs/client.conf upload /data/1440.jpg

在这里插入图片描述

访问http://192.168.157.140/group1/M00/00/00/wKidjGWfcrqASjDvAArtUI6z-8w526.jpg

在这里插入图片描述


2.7 防火墙设置

根据自己服务器情况开放端口

#开放端口22122、23000、80、8080、8888
firewall-cmd --add-port=22122/tcp --permanent --zone=public
firewall-cmd --add-port=23000/tcp --permanent --zone=public
firewall-cmd --add-port=80/tcp --permanent --zone=public
firewall-cmd --add-port=8080/tcp --permanent --zone=public
firewall-cmd --add-port=8888/tcp --permanent --zone=public
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

2.8 设置开机自启动
vi /etc/rc.d/rc.local

在底部增加如下

fdfs_trackerd /etc/fdfs/tracker.conf
fdfs_storaged /etc/fdfs/storage.conf
/usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf

修改文件权限

chmod +x /etc/rc.d/rc.local

3、爬坑之路

编译 FastDFS 时,报错如下

gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c  -I../common -I/usr/local/include
In file included from ../common/fdfs_global.c:21:0:
../common/fdfs_global.h:17:26: fatal error: sf/sf_global.h: No such file or directory
 #include "sf/sf_global.h"

在这里插入图片描述

原因:

需要先编译和安装 libserverframe,新引入的网络框架库,下载地址:https://github.com/happyfish100

在这里插入图片描述

unzip libserverframe-master.zip
cd libserverframe-master/
./make.sh
./make.sh install

编译安装完后即可正常编译安装 FastDFS

在这里插入图片描述


熬夜写的,觉得有帮助来个赞吧!!!


更多技术干货,请持续关注程序员大佬超。
原创不易,转载请务必注明出处。

文章来源:https://blog.csdn.net/xch_yang/article/details/135541438
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。