FastDFS 环境搭建及使用详解

文章目录

      • 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=23000group_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_fdfscd /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.mzph.cn/news/626911.shtml

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

相关文章

Android APP开发集成微信登陆流程(手把手新手版)

本文比较适合新手玩家,老玩家就不要看了 昨天整了下微信登陆,乍一看官方文档还有点难懂!遂自己整理了下流程,给大家参考参考。 官方文档链接:准备工作 | 微信开放文档微信开发者平台文档https://developers.weixin.q…

晶圆表面缺陷检测现状概述

背景: 晶圆表面缺陷检测设备主要检测晶圆外观呈现出来的缺陷,损伤、毛刺等缺陷,主要设备供应商KLA,AMAT,日立等,其中KLA在晶圆表面检测设备占有市场52%左右。 检测设备分类: 电子束设备和光学…

浅谈安科瑞电流表和频率表在冰岛某木制品工厂的的应用

摘要:用户侧配电系统的智能化、精细化、可视化是当下配电管理的必然趋势。针对用户侧的配电进线回路,设计安装智能仪表,再通过设置仪表参数来实时监控各负载回路的工作状态;提高用能安全、提升设备维护效率、降低维护的人工成本、…

分类预测 | Matlab实现CS-SVM布谷鸟算法优化支持向量机的数据分类预测

分类预测 | Matlab实现CS-SVM布谷鸟算法优化支持向量机的数据分类预测 目录 分类预测 | Matlab实现CS-SVM布谷鸟算法优化支持向量机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现CS-SVM布谷鸟算法优化支持向量机的数据分类预测。 2.自带数据…

Matlab 使用 DH table 建立的 robot 和实际不符

机器人仿真 想借助 matlab robotics toolbox 来仿真机器人,但是直接输入自己的 DH table 显示出来的 robot 和实际不情况不符。 DH table 建立 robot Build Manipulator Robot Using Kinematic DH Parameters 主要使用 setFixedTransform,DH table 中…

【松叶漫话】来聊聊ChatGPT 和文心一言吧

两大AI助手的较量 在当今信息技术飞速发展的时代,人工智能助手成为我们生活中不可或缺的一部分。ChatGPT和文心一言作为两大代表性的AI助手,在智能回复、语言准确性、知识库丰富度等方面各有千秋。本文将就这两位AI助手的特点进行深入比较,为…

OLAP引擎也能实现高性能向量检索,据说QPS高于milvus!

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着 LLM 技术应用及落地,数据库需要提高向量分析以及 AI 支持能力,向量数据库及向量检索等能力“异军突起”,迎来业界持续不断关…

深入解析阻塞队列BlockingQueue及源码(超详细)

一、基础概念 1.1 BlockingQueue BlockingQueue 是 java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类。 1.1.1 队列类型: 无限队列 (unbounded queue ) - 几乎可以无限增长 有限队列 ( bounded qu…

自创C++题目——风扇

预估难度 简单 题目描述 有一个风扇,它有个旋转叶片,每个旋转叶片的编号是,请输出它旋转后,中心点与地面的直线距离哪个叶片最近,输出此旋转叶片的编号。默认以“”的形式。 当时: 当或时,…

海康visionmaster-VM 嵌入:嵌入用户软件界面的方法

描述 环境:VM4.0.0 VS2015 及以上 现象:将 VM 整体嵌入到客户软件界面中? 解答 将 VM 软件整体嵌入到客户软件中,需要利用 Panel 控件,并且需要先启动 VM 软件,具 体代码如下: C# [DllImport(“…

linux NTP服务器配置

需求场景:局域网内多台服务器时间同步,保持一致 前提条件: 1,各服务器已正确安装NTP服务,查询命令如下: rpm -qa | grep ntp,若回显信息中包含ntp-4.2之类的,表示服务器上存在ntp…

电脑监控软件有哪些,那个好用?

在当今信息化时代,电脑已经成为企业和个人工作、生活中不可或缺的工具。 然而,随着网络的普及和电脑使用频率的增加,也带来了一些安全隐患和管理上的挑战。 为了更好地保护电脑安全、规范员工工作纪律,越来越多的企业和个人开始使…

day18 找树左下角的值 路径总和 路径总和Ⅱ 从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树

题目1:513 找树左下角的值 题目链接:513 找树左下角的值 题意 找出二叉树的最底层 最左边节点的值 (假设二叉树中至少有1个节点) 最底层节点确保是深度最大的叶子节点,最左边的节点却不一定是左孩子 递归遍历 深度最大的叶子节点最…

docker使用nginx部署vue刷新页面404

docker使用nginx部署vue刷新页面404 从docker内部复制出来的配置文件是这样的,但是刷新页面之后就显示404,关键是我两个前端项目都是用的这一个配置文件,但是只有一个项目出现刷新浏览器显示404的问题,这给我搞懵了!&…

【dayjs】类型“Dayjs”上不存在属性“isSameOrAfter”

dayjs中有一些方法是需要使用插件后才能使用,默认情况下,Day.js只提供核心代码,没有安装插件。 解决方法: import dayjs from dayjs;import isSameOrAfter from dayjs/plugin/isSameOrAfter;dayjs.extend(isSameOrAfter);再次使…

AI嵌入式K210项目(5)-串口通讯

文章目录 前言一、什么是UART?二、K210的UART三、实验过程总结 前言 串口通讯是平时大家进行调试最常用的方法,嵌入式应用通常要求一个简单的并且占用系统资源少的方法来传输数据。通用异步收发传输器 (UART)即可以满足这些要求,它能够灵活地…

odoo16 权限继承修改字段显示2

odoo16 权限继承修改字段显示2 上次文章写道:最近在搭建的一个服装批发中心使用的进销存一体化项目,由于客户文化水平低,不想在发货界面显示 好多无用功能,有些是有用的,有些是他不关心的。占在用户角度考虑,用不到的功能都是垃圾。有他们的道理。在隐藏的过程中,出现了…

2011 年考研数二真题解析

一、选择题 【01】【02】【03】【04】【05】【06】【07】【08】 二、填空题 【09】【10】【11】【12】【13】【14】 三、解答题 【15】【16】【17】【18】【19】【20】【21】【22】【23】

运筹说 第90期 | 网络计划-图解评审法

前述章节的网络计划方法主要研究以时间为主要参数的确定型网络模型,其中的概率型网络模型也只讨论工作公式的不确定性,并没有对事项或工作的不确定性进行讨论。由于这类网络模型的建立有严格的规则,大量研究与开发类计划尚无法表达。因从本期…

vue中el-radio无法默认选中

页面上不生效&#xff0c;默认什么都不选中 <el-radio-group v-model"queryParams.videoUrlType"><el-radio :label"1">本地上传</el-radio><el-radio :label"2">外部链接</el-radio> </el-radio-group>da…