FastDFS 环境搭建及使用详解

news2024/11/27 20:37:37

文章目录

      • 1、简介
        • 1.1 分布式文件系统
        • 1.2 FastDFS
        • 1.3 FastDFS架构
      • 2、环境搭建
        • 2.1 FastDFS安装
          • 2.1.1 安装前准备
          • 2.1.2 安装包下载
          • 2.1.3 安装 libfastcommon
          • 2.1.4 安装 libserverframe
          • 2.1.5 安装 FastDFS
        • 2.2 FastDFS配置
          • 2.2.1 配置tracker
            • 2.2.1.1 创建 tracker 工作目录
            • 2.2.1.2 修改 tracker 配置文件
          • 2.2.2 配置storage
            • 2.2.2.1 创建 storage 工作目录
            • 2.2.2.2 修改 storage 配置文件
        • 2.3 FastDFS启动
          • 2.3.1 启动 tracker
          • 2.3.2 启动 storage
          • 2.3.3 验证
        • 2.4 FastDFS关闭
        • 2.5 FastDFS测试
          • 2.5.1 配置client
          • 2.5.2 上传测试
          • 2.5.3 下载测试
          • 2.5.4 删除测试
        • 2.6 HTTP访问
          • 2.6.1 安装nginx 和 fastdfs-nginx-module
          • 2.6.2 访问配置
          • 2.6.3 启动nginx
          • 2.6.4 访问测试
        • 2.7 防火墙设置
        • 2.8 设置开机自启动
      • 3、爬坑之路

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

在这里插入图片描述


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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1399447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于gltf模型格式文件的学习

目录 glTF模型 小黄鸭的gltf模型 字段分析 scene nodes meshes primitives attributes indices mode material accessors bufferView byteOffset count componentType type materials textures images samplers magFilter与minFilter wrapS与wrapT 进行…

好物周刊#37:元气桌面

https://github.com/cunyu1943/JavaPark https://yuque.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. MallChat 一个既能购物又能聊天的电商系统。以互联网企业级开发规范的…

canvas能压缩图片?

之前写过一篇使用命令行工具压缩图片的博文:使用yx-tiny命令行工具进行图片压缩,大家感兴趣可以去瞅一眼。 这篇简单说一下使用canvas压缩图片 其实思路很简单,我们选择了图片之后,会获取到对应的文件流对象,然后我们…

计算机组成原理 第一弹

ps:本文章的图片来源都是来自于湖科大教书匠高老师的视频,声明:仅供自己复习,里面加上了自己的理解 这里附上视频链接地址:1-2 计算机的发展_哔哩哔哩_bilibili ​​ 目录 🚀计算机系统 🚀计…

中小企业如何快速融资-----股权融资的四种方式(上)

’在企业融资的多种手段中,股权质押融资、股权交易增值融资、股权增资扩股融资和股权的私募融资,逐渐成为中小企业利用股权实现融资的有效方式。随着市场体系和监管制度的完善,产权市场为投融资者搭建的交易平台日益成熟,越来越多…

【linux驱动】详细剖析第一个hello word驱动程序

文章目录 驱动程序的框架驱动程序的使用示例 驱动程序的框架 Linux 驱动的基本框架主要由模块加载函数,模块卸载函数,模块许可证声明,模块参数,模块导出符号,模块作者信息等几部分组成,其中模块参数&#…

钉钉副总裁李智勇:AI超级助理,提升大模型时代生产力

微软比尔盖茨此前曾预言:“五年内,每个人都将拥有AI私人助理Agent,Agent将颠覆软件行业 。” 近日以来,在GPT store正式上线点爆情绪之后,无论国内外,Agent都是创业圈里炙手可热的新贵。一场关于Agent创业比拼大赛&am…

探索JAVA神秘运行机制:揭秘JVM内存区域

目录 1. 前文回顾 2.内存区域的划分 2.1 存放类的方法区 2.2 程序计数器 2.3 Java虚拟机栈 2.4 Java堆内存 2.5 其他内存区域 3. 核心内存区域运行流程 4. 总结 1. 前文回顾 上一篇我们一起探索了Java的整体运行流程,类加载器以及类的加载机制&#xff0…

手把手教你使用 VS Code 运行和调试 Python 程序

本文以 Ubuntu 系统为例,介绍如何在 VS Code 上配置 Python 的编程环境,并把 Python 程序运行、调试起来。由于 Python 是解释型语言,并且 VS Code 中提供了内置的调试器可用于调试 Python 代码,因此配置和操作流程比调试 C/C 代码…

【 Qt 快速上手】-①- Qt 背景介绍与发展前景

文章目录 1.1 什么是 Qt1.2 Qt 的发展史1.3 Qt 支持的平台1.4 Qt 版本1.5 Qt 的优点1.6 Qt的应用场景1.7 Qt的成功案例1.8 Qt的发展前景及就业分析行业发展方向就业方面的发展前景 1.1 什么是 Qt Qt 是一个跨平台的 C 图形用户界面应用程序框架。它为应用程序开发者提供了建立…

8 python快速上手

总结 总结1. 代码规范1.1 名称1.2 注释1.3 todo1.4 条件嵌套1.5 简单逻辑先处理1.6 循环1.7 变量和值 2.知识补充2.1 pass2.2 is 比较2.3 位运算 3.阶段总结 各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料! 总结 1. 代码规范 …

线性规划案例分享

今天想写一个最优传输的简单实现,结果学歪了,学到线性规划去了,这里我发现了一个宝藏网站 虽然是讲计量经济的,但是里面提供的公式和代码我很喜欢,有时间可以好好读一下 https://python.quantecon.org/lp_intro.html …

Civil 3D安装教程,免费使用,带安装包和工具,一分钟轻松搞的安装

前言 Civil 3D是一款面向基础设施行业的建筑信息模型(BIM)解决方案。它为基础设施行业的各类技术人员提供了强大的设计、分析以及文档编制功能,广泛适用于勘察测绘、岩土工程、交通运输、水利水电、市政给排水、城市规划和总图设计等众多领域…

什么是比特币?

比特币 比特币 (英语:Bitcoin,缩写:BTC )是一种基于 去中心化,采用 点对点网络,开放源代码,以 区块链 作为底层技术的 加密货币。比特币由 中本聪(Satoshi Nakamoto&…

vscode配置web开发环境(WampServer)

这里直接去下载了集成的服务器组件wampserver,集成了php,MySQL,Apache 可能会出现安装问题,这里说只有图上这些VC包都安装了才能继续安装,进入报错里提供的链接 在页面内搜索相关信息 github上不去可以去镜像站 下载…

机器视觉技术与应用实战(平均、高斯、水平prewitt、垂直prewitt、水平Sobel、垂直Sobel、拉普拉斯算子、锐化、中值滤波)

扯一点题外话,这一个月经历了太多,接连感染了甲流、乙流,人都快烧没了,乙流最为严重,烧了一个星期的38-39度,咳嗽咳到虚脱。还是需要保护好身体,感觉身体扛不住几次连续发烧!&#x…

Redis 持久化之 RDB AOF

1、简介 Redis 是一个基于内存的 key-value 类型的 Nosql 数据库,经常用来做缓存操作,但是一旦Redis 宕机,重启之后数据会丢失,因此,需要将内存数据进行持久化,保证服务重启后数据能够恢复之前的状态。Redi…

淘金城镇新人赚钱攻略(定制开发·源码定制智创开发)

​ 在淘金城镇中,玩家可以通过完成任务、升级角色、参与活动等方式获得丰厚的奖励和经验值,这不仅可以提升角色的能力, 还可以让玩家在游戏中获得更多的乐趣。最重要的是,淘金城镇的玩法非常精致,玩家可以通过游戏中…

C++——vector的使用及其模拟实现

vector的使用及其模拟实现 文章目录 vector的使用及其模拟实现1. vector的使用1.1 构造函数construct1.2 获取当前存储的数据个数size()和最大容量capacity()1.3 访问1.3.1 operator[]运算符重载1.3.2 迭代器访问1.3.3 范围for 1.4 容量相关reserve()和resize()1.5 增&#xff…

软件测试的工作描述

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…