FastDFS安装与测试

news2024/12/26 13:50:54

目录

目标

版本

环境

官方文档

相关概念

安装FastDFS

启动FastDFS

关闭FastDFS

重启FastDFS

用命令测试上传文件

用命令测试下载文件

用命令测试删除文件

用HTTP的方式访问FastDFS中的文件

用HTTP的方式访问FastDFS中的文件整体流程


目标

  • 在Linux服务器上搭建单机版FastDFS系统。(考虑到Linux服务器访问GitHub受限,这里我将依赖包下载到本地,再将本地的依赖包上传到Linux服务器上。所以我的操作与Wiki上的操作略有不同,但本质一样)。
  • 在Linux服务器上,使用命令行实现文件上传、下载、删除等功能。
  • 熟悉FastDFS系统架构。

版本

6.11.0


环境

CentOS 7


官方文档

FastDFS 6.11.0版本官网文档icon-default.png?t=N7T8https://github.com/happyfish100/fastdfs/tree/V6.11.0

安装手册icon-default.png?t=N7T8https://github.com/happyfish100/fastdfs/wiki


相关概念

DFS(分布式文件系统)

        分布式文件系统(DistributedFileSystem,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。DFS为分布在网络上任意位置的资源提供一个逻辑上的树形文件系统结构,从而使用户访问分布在网络上的共享文件更加简便。单独的DFS共享文件夹的作用是相对于通过网络上的其他共享文件夹的访问点


FastDFS(Fast分布式文件系统)

FastDFS is an open source high performance distributed file system. Its major functions include: file storing, file syncing and file accessing (file uploading and file downloading), and it can resolve the high capacity and load balancing problem. FastDFS should meet the requirement of the website whose service based on files such as photo sharing site and video sharing site.

        FastDFS(Fast Distributed File System)是一个开源的高性能分布式文件系统。其主要功能包括:文件存储、文件同步和文件访问(文件上传和文件下载),可以解决大容量和负载均衡问题。FastDFS应满足照片共享网站、视频共享网站等基于文件服务的网站的要求。
        FastDFS由淘宝网的余庆使用C语言实现。支持Linux、FreeBSD、MacOS等类UNIX系统。FastDFS类似google FS,属于应用级文件系统,不是通用的文件系统,只能通过专有API访问,目前提供了C客户端和Java SDK,以及PHP扩展SDK。
        FastDFS为互联网应用量身定做,解决大容量文件存储问题,实现高性能和高扩展性。FastDFS可以看做是基于文件的key value存储系统,key为文件ID,value为文件本身,因此称作分布式文件存储服务更为合适。下图为FastDFS的架构图(来源于官网):

        Tracker(跟踪器)和Storage(存储器)是服务端的概念,我们开发的程序是客户端(使用API调用FastDFS的功能)。


Tracker(跟踪器)

FastDFS has two roles: tracker and storage. The tracker takes charge of scheduling and load balancing for file access.

        Tracker是FastDFS的两个角色之一。Tracker负责调度和负载均衡以进行文件访问


Storage(存储器)

The storage store files and it's function is file management including: file storing, file syncing, providing file access interface. It also manage the meta data which are attributes representing as key value pair of the file. For example: width=1024, the key is "width" and the value is "1024".

        Storage是FastDFS的两个角色之一。Storage用于存储文件,其功能包括文件管理、文件存储、文件同步和提供文件访问接口。它还管理元数据,这些元数据是文件的属性,表示为键值对


安装FastDFS

第一步:编译CentOS环境。

yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y

第二步:下载好相关依赖包(这里和Wiki上的操作略有不同,但本质一样。如果大家一定要按照Wiki上的操作去安装FastDFS,前提条件是服务器对GitHub访问不受限)。

https://github.com/happyfish100/libfastcommon/archive/V1.0.71.tar.gz
https://github.com/happyfish100/libserverframe/archive/V1.2.1.tar.gz
https://github.com/happyfish100/fastdfs/archive/V6.11.0.tar.gz
https://codeload.github.com/happyfish100/fastdfs-client-java/zip/refs/heads/master
https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/refs/heads/master

第三步:将依赖包上传至Linux服务器上,我将它们上传到/usr/local目录。

第四步:解压依赖包,并执行编译和安装命令(按照顺序编译安装)。

tar -zxvf libfastcommon-1.0.71
cd /usr/local/libfastcommon-1.0.71
./make.sh && ./make.sh install

tar -zxvf libserverframe-1.2.1.tar.gz
cd /usr/local/libserverframe-1.2.1
./make.sh && ./make.sh install

tar -zxvf fastdfs-6.11.0.tar.gz 
cd /usr/local/fastdfs-6.11.0
./make.sh && ./make.sh install

第五步:复制相关配置文件到/etc/fds目录下,供Nginx访问用。

cp /usr/local/fastdfs-6.11.0/conf/http.conf /etc/fdfs
cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/

第六步:进入/etc/fdfs目录,编译tracker.conf文件,设置存储数据和日志文件的基本路径。我设置的路径是/opt/fastdfs/tracker

#在tracker.conf文件内设置基础路径。
base_path = /opt/fastdfs/tracker
#创建目录。-p表示一次创建多级目录。
mkdir -p /opt/fastdfs/tracker

 第七步:进入/etc/fdfs目录,编译storage.conf文件,设置存储数据和日志文件的基本路径。我设置的路径是/opt/fastdfs/storage

#在storage.conf文件内设置基础路径。
base_path = /opt/fastdfs/storage
#设置存放文件的目录
store_path0 = /opt/fastdfs/storage/files
#配置tracker_server地址。
tracker_server = 192.168.157.101:22122
#创建目录。
mkdir -p /opt/fastdfs/storage/files

启动FastDFS

前言

        在/etc/fdfs目录下执行fdfs_trackerd和fdfs_storaged命令,会弹出该命令的相关参数。

第一步:用/etc/fdfs目录下的配置文件,启动tracker服务。

fdfs_trackerd /etc/fdfs/tracker.conf

第二步:用/etc/fdfs目录下的配置文件,启动storage服务。

fdfs_storaged /etc/fdfs/storage.conf

第三步:去storage.conf文件所设置的store_path0目录,查看该路径下的内容。可以发现在/opt/fastdfs/storage/files下有个data目录,这个目录是FastDFS第一次启动后创建的。data目录下有256个文件夹,这里每个文件里面又有256个文件夹(也就是说data下有65536个文件夹,即2的16次方数量)


关闭FastDFS

第一步:用/etc/fdfs目录下的配置文件执行关闭命令。

fdfs_trackerd tracker.conf stop
fdfs_storaged /etc/fdfs/storage.conf stop


重启FastDFS

第一步:用/etc/fdfs目录下的配置文件执行重启命令。

fdfs_trackerd tracker.conf restart
fdfs_storaged /etc/fdfs/storage.conf restart


用命令测试上传文件

第一步:编辑/etc/fdfs/client.conf文件,有些版本的FastDFS的/etc/fdfs下没有client.conf,而有一个client.conf.sample文件,如果是这种情况需要修改client.conf.sample文件名称为client.conf

vi /etc/fdfs/client.conf
base_path = /opt/fastdfs/client
tracker_server = 192.168.157.101:22122

第二步:编辑好/etc/fdfs/client.conf文件文件后,创建刚才设置的base_path文件夹。

mkdir -p /opt/fastdfs/client

第三步:创建一个文件并添加测试内容用于测试。

vi a.txt

第四步:可以选择使用/usr/bin或者/usr/local/fastdfs-6.11.0/client的fdfs_test命令做测试。根据执行fdfs_test命令后返回的信息来看,最后一行介绍了操作选项有很多,比如:upload、download、delete等。

cd /usr/local/fastdfs-6.11.0/client
fdfs_test

第五步:上传我们刚才创建的a.txt文件。这里我在/usr/bin和/usr/local/fastdfs-6.11.0/client两个目录下执行了上传命令,都能正常上传文件。

#或者进入到/usr/bin目录下,也有fdfs_test命令。
cd /usr/local/fastdfs-6.11.0/client
fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/a.txt

 信息解读

  • 从返回的结果来看,我们可以看到有storage_upload_by_filename和storage_upload_slave_by_filename两个大类。其中storage_upload_by_filename用于上传文件,storage_upload_slave_by_filename用于上传与主文件相关的从文件,以支持更复杂的文件关系,如备份、缩略图等。
  • remote_filename的值开头是M00,这和/etc/fdfs/storage.conf文件的store_path_count配置有关。假如store_path_count = 3,则remote_filename的值开头是M00、M01、M02,我们配置文件中的store_path_count = 1,所以remote_filename的值开头是M00,后续我们学FastDFS集群时再来详细分析store_path_count的意义和作用。
  • 进入到/opt/fastdfs/storage/files/data/00/00文件夹,我们可以下面多了4个文件,这4个文件的作用如图3所述。检查wKidZWWUHRKAa6g0AAAAGcc2DgA732.txt和wKidZWWUHRKAa6g0AAAAGcc2DgA732_big.txt文件发现内容确实和我们定义的a.txt内容一致。
  • url给出的链接暂时不能访问,后续我们安装好Nginx才能访问。


用命令测试下载文件

第一步:可以选择使用/usr/bin或者/usr/local/fastdfs-6.11.0/client的fdfs_test命令做测试。下载我们刚才上传的文件,执行如下命令:

fdfs_test /etc/fdfs/client.conf download group1 M00/00/00/wKidZWWZZ1qAOKS-AAAADCApozA963.txt


用命令测试删除文件

第一步:可以选择使用/usr/bin或者/usr/local/fastdfs-6.11.0/client的fdfs_test命令做测试。删除我们刚才上传的文件,执行如下命令:

fdfs_test /etc/fdfs/client.conf delete group1 M00/00/00/wKidZWWUHRKAa6g0AAAAGcc2DgA732.txt

第二步:查看目标文件,发现该文件已经被删除了。


用HTTP的方式访问FastDFS中的文件

前言

        向FastDFS上传文件成功后,FastDFS提供了http链接,但是该链接并不能直接在浏览器打开,而需要Nginx的支持才能实现(本文不讲述Linux安装Nginx的步骤,需要大家提前安装好)。
        FastDFS提供了Nginx的扩展模块,也就是我们之前下载的fastdfs-nginx-module-master.zip压缩包。

第一步:上传fastdfs-nginx-module-master.zip压缩包到Linux服务器,我将它上传到/usr/local目录。

第二步:解压fastdfs-nginx-module-master.zip压缩包。

unzip fastdfs-nginx-module-master.zip 

第三步:下载/usr/local/fastdfs-nginx-module-master/src/mod_fastdfs.conf配置文件到桌面,并修改相关属性:

#tracker服务器IP和端口。
tracker_server=192.168.157.101:22122  
#url是否包含组名称。
url_have_group_name=true
#和storage.conf配置文件中的store_path0一致。
store_path0=/opt/fastdfs/storage/files
base_path=/opt/fastdfs/nginx_mod
mkdir /opt/fastdfs/nginx_mod

第四步:编译 Nginx 时包含 fastdfs-nginx-module模块。需要在Nginx的解压目录下执行以下命令:

#在Nginx的解压目录下执行如下命令:
./configure --prefix=/usr/local/nginx_fdfs --add-module=/usr/local/fastdfs-nginx-module-master/src
make
make install

第五步:Nginx重新编译后,会生成/usr/local/nginx_fdfs目录。修改/usr/local/nginx_fdfs/conf/nginx.conf文件内容如下:

server {
    listen       8888;    ## 该端口为storage.conf中的http.server_port相同
    server_name  localhost;
    location ~/group[0-9]/ {
        ngx_fastdfs_module;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }
}

第六步:把刚才下载到桌面上并修改好属性的mod_fastdfs.conf文件上传到/etc/fdfs目录下,并复制Nginx的mime.types文件到/etc/fdfs目录下。

cp /usr/local/nginx_fdfs/conf/mime.types /etc/fdfs/mime.types

第七步:启动Nginx,命令如下:

/usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf

第八步:在浏览器上输入http链接查看我们刚才上传的文件。

http://192.168.157.101:8888/group1/M00/00/00/wKidZWWZZ1qAOKS-AAAADCApozA963.txt


用HTTP的方式访问FastDFS中的文件整体流程

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

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

相关文章

brpc之接口Protocol

简介 brpc主要是通过Protocol这个接口来支持多协议的。其提供了解析,序列化,处理请求与响应的函数指针,通过函数指针以达到多态的效果 Protocol 结构体定义如下 struct Protocol {typedef ParseResult (*Parse)(butil::IOBuf* source, So…

Django(六)

员工管理系统(用户管理&#xff09; {% extends layout.html %}{% block content %}<div class"container"><div style"margin-bottom: 10px"><a class"btn btn-success" href"#"><span class"glyphicon gl…

【Unity美术】如何用3DsMax做一个水桶模型

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

《GreenPlum系列》GreenPlum详细入门教程01-GreenPlum介绍

文章目录 第一章 GreenPlum介绍1.MPP架构介绍2.GreenPlum介绍3.GreenPlum数据库架构4.GreenPlum数据库优缺点 GreenPlum&#xff1a;https://cn.greenplum.org/ 第一章 GreenPlum介绍 1.MPP架构介绍 MPP是Massively Parallel Processing的缩写&#xff0c;也就是大规模并行处…

大数据 - Doris系列《一》- Doris简介

目录 &#x1f436;1.1 Doris 概述 &#x1f436;1.2 OLAP和OLTP&#xff08;面试&#xff09; 1. 应用场景 &#x1f959;联机事务处理OLTP(On-Line Transaction Processing) &#x1f959;联机分析处理OLAP(On-Line Analytical Processing) 2. OLAP和OLTP比较--“用户行…

WEB 3D技术 three.js 元素居中与获取元素中心点

本文 我们来说让物体居中 以及获取它的中心点 我们上文留下的这个代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; import { RGBELoader } from "three/e…

跑腿配送系统技术探析

概述 跑腿配送系统是一种基于现代科技的服务平台&#xff0c;通过智能化的技术手段&#xff0c;实现用户需求的快速响应和高效配送。本文将探讨该系统的核心技术原理&#xff0c;以及在实际开发中的一些代码示例。 技术原理 1. 用户请求与任务分配 跑腿配送系统的第一步是…

5 个最适合SEI 网络空投交易等操作的钱包(Bitget Wallet,Coin98等)

​大家好&#xff01;Sei 网络比 SOL 快 5 倍&#xff0c;手续费低&#xff0c;还能防止前台交易。好了&#xff0c;我不会占用大家太多时间&#xff0c;让我们直奔主题吧。 Sei 官方&#xff1a;推特&#xff08;twitter.com/SeiNetwork&#xff09; 如上图所示&#xff0c;目…

【Java集合篇】HashMap 是如何扩容的

HashMap 是如何扩容的 ✔️ 为什么需要扩容?✔️ 桶元素重新映射✔️链表重新链接✔️ 取消树化✔️拓展知识仓✔️除了rehash之外&#xff0c;哪些操作也会将树会退化成链表? ✔️ 为什么需要扩容? HashMap在Java等编程语言中被广泛使用&#xff0c;用于存储键值对数据。Ha…

MySQL5.7 InnoDB 内存结构

官网地址&#xff1a;MySQL :: MySQL 5.7 Reference Manual :: 14.5 InnoDB In-Memory Structures 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. MySQL 5.7 参考手册 / ... / 缓冲池 14.5.1 缓冲池 缓冲池是…

从零开始搭建企业级前端项目模板(vue3+vite+ts)

文章目录 主要内容一、vite脚手架工具初始化项目二、项目代码加入eslint校验和自动格式化2.1安装对应依赖插件2.2 配置script脚本&#xff0c;项目安装eslint配置2.3 安装完成后&#xff0c;后面启动项目还缺少一些依赖&#xff0c;提前按需安装好 三&#xff0c;修改eslintrc.…

Vue3+Pinia实现持久化动态主题切换

PC端主题切换大家都用过&#xff0c;下面用Vue3Pinia实现一下这个过程; 【源码地址】 1、准备工作 npm install pinia npm install pinia-plugin-persist2、基础配置 // main.js import { createApp } from vue import App from ./App.vue import bootstrap from "../bo…

关于无人机上层控制的PID算法的思考

一、前言 背景介绍&#xff1a;PID虽然出现了很多年&#xff0c;但是目前工业界还是把PID作为主流的控制算法&#xff08;尽管学术界有很多非常时尚的控制算法&#xff0c;包括鲁邦控制&#xff0c;神经网络控制等等&#xff09;&#xff0c;PID的算法在于其不需要对系统进行复…

跟着小德学C++之安全模块

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

Spring Security 6.x 系列(15)—— 会话管理之源码分析

一、前言 在上篇 Spring Security 6.x 系列(13)—— 会话管理之会话概念及常用配置 Spring Security 6.x 系列(14)—— 会话管理之会话固定攻击防护及Session共享 中了清晰了协议和会话的概念、对 Spring Security 中的常用会话配置进行了说明,并了解会话固定攻击防护…

WorkPlus完备的企业级功能堆栈,打造高效的企业移动平台

在如今的数字化时代&#xff0c;企业需要一个完备的功能堆栈来满足复杂的业务需求。WorkPlus作为一个完整的企业级移动平台&#xff0c;拥有完备的企业级功能&#xff0c;如IM、通讯录、内部群、模板群、工作台、权限管控、应用中心、日程管理、邮箱、同事圈、服务号、智能表单…

【Docker-Dev】Mac M2 搭建docker的redis环境

Redis的dev环境docker搭建 1、前言2、官方文档重点信息提取2.1、创建redis实例2.2、使用自己的redis.conf文件。 3、单机版redis搭建4、redis集群版4.1、一些验证4.2、一些问题 结语 1、前言 本文主要针对M2下&#xff0c;相应进行开发环境搭建&#xff0c;然后做一个文档记录…

FreeRTOS学习第6篇–任务状态挂起恢复删除等操作

目录 FreeRTOS学习第6篇--任务状态挂起恢复删除等操作任务的状态设计实验IRReceiver_Task任务相关代码片段实验现象本文中使用的测试工程 FreeRTOS学习第6篇–任务状态挂起恢复删除等操作 本文目标&#xff1a;学习与使用FreeRTOS中的几项操作&#xff0c;有挂起恢复删除等操作…

自动驾驶apollo9.0 Dreamview Debug方法

Apollo 9.0 安装&编译方法 # 拉取源码 git clone gitgithub.com:ApolloAuto/apollo.git git checkout v9.0.0# 启动docker bash docker/scripts/dev_start.sh bash docker/scripts/dev_into.sh# 编译project ./apollo.sh build默认启动方式 default mode wget https:…

MybatisPlus—自定义SQL

目录 1. 自定义SQL介绍 2. 自定义SQL使用步骤 3. 自定义SQL实例 4.总结 1. 自定义SQL介绍 介绍&#xff1a;自定义SQL并不是由我们来编写全部SQL语句&#xff0c;而是通过利用MyBatisPlus的Wrapper来构建复杂的Where条件&#xff0c;然后自己定义SQL语句中剩下的部分。 使…