当前位置: 首页 > news >正文

FastDFS的安装及使用

分布式存储发展历程

前段时间 618 活动火热进行,正是购物的好时机。当我们访问这些电
商网站的时候,每一个商品都会有各式各样的图片展示介绍,这些图
片一张两张可以随便丢在服务器的某个文件夹中,可是电商网站如此
大体量的图片,得分门别类的进行管理。再比如我们平时浏览的各大
视频网站的视频,还有我们现在正在浏览的 CSDN 上的各类文章,都
需要在服务器上分门别类的管理好。
在文件管理早期的时候,由于文件本身的数量和占用空间都比较小,
往往在一台服务器上既有程序在运行,也有文件在存储。随着互联网
的不断发展,现在的程序越做越大,图片的内容和数量也越来越多,
不断的侵蚀服务器有限的资源,进而影响到程序本身运行的稳定性。
于是,越来越多的系统在最初设计,或者升级改造的时候,选择将文
件的存储单独拎出来放在一台专用的文件服务器上。和程序服务器相
互独立,相互不受影响。文件服务器的功能也相对比较单一,只需要
对文件进行管理即可。

随着图片的数量越来越多,单个图片自身占用的空间越来越大,单台
服务器对于图片的承载压力也越来越大,就需要拓宽服务器的数量,
通过更多的图片服务器存储文件。这样虽然解决了文件的存储问题,
但是却产生了一个新的问题:怎么从这么多的机器中快速的找寻到需
要的那张图片?于是便引申出了分布式存储的概念,在众多的机器之
中,如何讲文件放进去,如何讲文件取出来。


常见的分布式存储框架

什么是 FastDFS 

FastDFS 是前阿里的一位大神余庆开源的一个轻量级分布式文件系
统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问
(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。
特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性
扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭
建一套高性能的文件服务器集群提供文件上传、下载等服务。

 

FastDFS 服务端有两个角色:跟踪器( tracker )和存储服务器
storage )。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储服务器存储文件,完成文件管理的所有功能:就是这样的存储、
同步和提供存取接口, FastDFS 同时对文件的 metadata 进行管理。
所谓文件的 metadata 就是文件的相关属性,以键值对( key value
方式表示,如: width=1024 ,其中的 key width value 1024
文件 metadata 是文件属性列表,可以包含多个键值对。
很多人可能不太理解为什么要设计 tracker 这个角色,当存储服务器由
很多个物理机器组成时。客户端要上传 / 下载文件的时候,不知道文件
上传 / 下载到哪个具体的机器。于是客户端会先请求 tracker tracker
会返回具体的 group group 中的具体主机信息。客户端拿着这个具
体的主机信息去请求相应的主机进行文件的上传 / 下载。

 

 

跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节
点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪
器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加
或减少。
为了支持大容量,存储节点(服务器)采用了分组(或分卷)的组织
方式: group 。存储系统由一个或多个 group 组成, group group
间的文件是相互独立的,所有 group 的文件容量累加就是整个存储系
统中的文件容量。一个 group 可以由一台或多台存储服务器组成,一
group 下的存储服务器中的文件都是相同的, group 中的多台存储
服务器起到了冗余备份和负载均衡的作用。
group 中增加服务器时,同步已有的文件由系统自动完成,同步完
成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足
或即将耗尽时,可以动态添加 group 。只需要增加一台或多台服务器,
并将它们配置为一个新的卷,这样就扩大了存储系统的容量。 FastDFS
中的文件标识分为两个部分:组名和文件名,二者缺一不可。

 

FastDFS 的安装与部署 

FastDFS 开源的地址在 GitHub 上: https://github.com/happyfish10
0
源码安装要将对应的源码下载后编译运行安装,当然图省事的话可以
直接使用 docker 快速安装。先看使用 docker 的情况下如何快速安
装,毕竟很多人应该对源码编译安装没啥兴趣。
docker 安装
首先,查询 docker 中关于 FastDFS 有哪些可用的镜像: docker
search fastdfs

选择需要的镜像,拉取到本地:docker pull delron/fastdfs
 

镜像文件并不大,本身只有 400+M
 

通过 Docker 命令来创建 Tracker 服务:
docker run -d --name tracker --network=host -v
/mydata/fastdfs/tracker:/var/fdfs delron/fastdfs tracker
tracker 服务默认的端口为 22122 -v 实现了 docker 中的容器和本地
目录之间的挂载。所以在执行 docker 命令前应手动先将本地的
/mydata/fastdfs/tracker 目录创建好。

 

Tracker 服务创建成功之后,继续通过 docker 的命令创建 Storage
务:
docker run -d --name storage --network=host -e
TRACKER_SERVER=192.168.29.128:22122 -v
/mydata/fastdfs/storage:/var/fdfs -e GROUP_NAME=group1
delron/fastdfs storage
在执行上面命令的时候要注意对应的修改下,其中
TRACKER_SERVER 中的 IP 要修改为你的 Tracker 服务所在的服务
IP 地址。并且同样的,先手动将 / mydata/fastdfs/storage 目录创建
好。
默认情况下在 Storage 服务中是已经预装了 Nginx 服务的,相关的端
口为 8888 Storage 自身的端口默认是 23000 。当然如果你发现这些
相关的端口被占用了,或者想要对应的修改端口信息也可以,需要进

入容器中查看下相关的配置文件信息。

进入 Storage 服务的容器中: docker exec -it d4926e8325e3 bash
在容器中的 /etc/fdfs/ 目录下找到 storage.conf 配置文件

 

可以看到在配置文件的最后一行指定了 http 的端口:

 

除此之外,还得再来到容器中的 /usr/local/nginx/conf 目录下,将
nginx.conf 配置文件中的 8888 端口一并更改:
Tracker Storage 服务安装完成之后,在服务器的 Storage 本地目录
中放几张用于测试上传的图片。因为之前在启动的时候,已经将本地
目录和 docker 目录进行了一个挂载,所以当进入到 docker 中的
Storage 服务中,依然可以看到本地目录中的测试图片:
 

 

使用服务原生的 / usr/bin/fdfs_upload_file 命令进行文件上传:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf face2face1.jpg
上传成功之后,返回已上传成功的图片信息。这张图片存于 group1
中, /M00/00/00 / 目录下,重命名为
wKgggGSD2feAXsv4AER92Sd_dzk072.jpg 。然后拿着这串图片地
址,使用浏览器访问: http://192.168.29.128:8888/group1/M00/00/0
0/wKgggGSD2feAXsv4AER92Sd_dzk072.jpg

 

可以成功拿到这张上传的图片则说明 FastDFS 服务安装成功。因为
Storage 服务中已经安装了 Nginx 服务,所以访问图片的端口就是
Nginx 监听的 8888 端口,经过 Nginx 的代理拿到上传的那张图片。
注意: 如果无法访问照片的路径,可能是 linux 防火墙的问题,把
Nginx storage tracker 的端口打开,再重启镜像服务就好

springboot整合fastdfs 

 

 

 

 

 

2.4 测试文件上传
 

从上图中可以,实现了文件的上传和缩略图的生成。
2.5 文件下载

 

 

相关文章:

FastDFS的安装及使用

分布式存储发展历程 前段时间 618 活动火热进行,正是购物的好时机。当我们访问这些电 商网站的时候,每一个商品都会有各式各样的图片展示介绍,这些图 片一张两张可以随便丢在服务器的某个文件夹中,可是电商网站如此 大体量的…...

C++ lambda表达式

目录 1.lambda表达式 1.1什么是Lambda表达式? 1.2Lambda表达式的语法 1.3捕捉列表 1.4函数对象与lambda表达式 1.lambda表达式 1.1什么是Lambda表达式? Lambda表达式是C11标准引入的一种匿名函数,它允许你在需要函数的地方直接编写代码…...

react页面定时器调用一组多个接口,如果接口请求返回令牌失效,清除定时器不再触发这一组请求

为了实现一个React页面使用定时器调用一组多个接口,并在任意一个接口请求返回令牌失效时清除定时器且不再触发这一组请求,可以遵循以下步骤: 1. 定义API调用函数:创建一个函数来处理一组API调用。每个API调用都应该检查响应状态以…...

Python的泛型(Generic)与协变(Covariant)

今天咱们聊聊Python类型标注中的泛型(Generic),与协变(Covariant)。 不了解类型标注的小伙伴,可以先看一看我的上一篇文章 “Python类型检查” Python 类型检查-CSDN博客 例子 这次我开个宠物商店。看下面代码。 class Animal:passclass Dog(Animal):passclass Cat(A…...

Python Typing: 实战应用指南

文章目录 1. 什么是 Python Typing?2. 实战案例:构建一个用户管理系统2.1 项目描述2.2 代码实现 3. 类型检查工具:MyPy4. 常见的 typing 用法5. 总结 在 Python 中,静态类型检查越来越受到开发者的重视。typing 模块提供了一种方式…...

OpenEuler学习笔记(六):OpenEuler与其他Linux服务器的区别是什么?

OpenEuler是一款基于Linux内核的开源服务器操作系统,与其他Linux服务器操作系统(如CentOS、Ubuntu Server等)存在多方面的区别,主要体现在以下几个方面: 一、社区与支持 OpenEuler:由华为发起并开源&…...

如何使用CRM数据分析和洞察来支持业务决策和市场营销?

如何使用CRM数据分析和洞察来支持业务决策和市场营销? 大家好!今天咱们聊聊一个特别重要的话题——如何利用客户关系管理(CRM)系统中的数据进行分析与洞察能够帮助我们做出更好的业务决策以及提升市场营销效果。其实啊&#xff0…...

MyBatis和JPA区别详解

文章目录 MyBatis和JPA区别详解一、引言二、设计理念与使用方式1、MyBatis:半自动化的ORM框架1.1、代码示例 2、JPA:全自动的ORM框架2.1、代码示例 三、性能优化与适用场景1、MyBatis:灵活的SQL控制1.1、适用场景 2、JPA:开发效率…...

SVN客户端使用手册

目录 一、简介 二、SVN的安装与卸载 1. 安装(公司内部一般会提供安装包和汉化包,直接到公司内部网盘下载即可,如果找不到可以看下面的教程) 2. 查看SVN版本 ​编辑 3. SVN卸载 三、SVN的基本操作 1. 检出 2. 清除认证数据 3. 提交…...

VsCode安装文档

一、下载 进入VS Code官网:Visual Studio Code - Code Editing. Redefined,点击 DownLoad for Windows下载windows版本 当然也可以点击旁边的箭头,下载Windows版本 或 Mac OS 版本 备注: Stable:稳定版Insiders&#…...

豆包MarsCode 蛇年编程大作战 | 高效开发“蛇年运势预测系统”

🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 豆包MarsCode 蛇年编程大作战 | 🐍 蛇年运势预测 在线体验地址:蛇年…...

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 🏠 第N个泰波那契数模型 📌 题目解析 第N个泰波那契数 题目要求的是泰波那契数,并非斐波那契数。 &…...

生信软件管家——conda vs pip

pip vs conda: 安装过python包的人自然两种管理软件都用过, Pip install和Conda install在Python环境中用于安装第三方库和软件包,但它们在多个方面存在显著的区别 总的来说: pip是包管理软件,conda既是包管理软件&…...

代码随想录——串

文章目录 反转字符串反转字符串Ⅱ路径加密反转字符串中的单词动态口令字符串匹配重复的子字符串 反转字符串 344. 反转字符串 //前后对应交换 //0<->sSize-1 //1<->sSize-2 //... //i<->sSize-1-i,i0,1,...,(sSize-1)/2 void reverseString(char* s, int s…...

詳細講一下RN(React Native)中的列表組件FlatList和SectionList

1. FlatList 基礎使用 import React from react; import { View, Text, FlatList, StyleSheet } from react-native;export const SimpleListDemo: React.FC () > {// 1. 準備數據const data [{ id: 1, title: 項目 1 },{ id: 2, title: 項目 2 },{ id: 3, title: 項目 3…...

TDengine 与上海电气工业互联网平台完成兼容性认证

在工业数字化转型和智能化升级的浪潮中&#xff0c;企业对高效、可靠的数据管理解决方案的需求日益增长。特别是在风电智能运维、火电远程运维、机床售后服务等复杂多样的工业场景下&#xff0c;如何实现海量设备和时序数据的高效管理&#xff0c;已经成为推动行业升级的关键。…...

随机矩阵投影长度保持引理及其证明

原论文中的引理 2 \textbf{2} 2 1. \textbf{1. } 1. 引理 1 \textbf{1} 1(前提之一) 1.1. \textbf{1.1. } 1.1. 引理 1 \textbf{1} 1的内容 &#x1f449;前提&#xff1a; X ∼ N ( 0 , σ ) X\sim{}N(0,\sigma) X∼N(0,σ)即 f ( x ) 1 2 π σ e – x 2 2 σ 2 f(x)\text{}…...

深度学习利用数据加载、预处理和增强数据提高模型的性能

深度学习数据预处理是一个关键步骤&#xff0c;旨在提高模型的性能和准确性。 通过数据加载、预处理和增强&#xff0c;可以显著提高深度学习模型的性能和准确性。在实际应用中&#xff0c;需要根据具体的数据和任务来选择合适的预处理和增强技术。 以下将详细论述并举例说明如…...

ESP32服务器和PC客户端的Wi-Fi通信

ESP32客户端-服务器Wi-Fi通信 本指南将向您展示如何设置ESP32板作为服务端&#xff0c;PC作为客户端&#xff0c;通过HTTP通信&#xff0c;以通过Wi-Fi&#xff08;无需路由器或互联网连接&#xff09;交换数据。简而言之&#xff0c;您将学习如何使用HTTP请求将一个板的数据发…...

新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战

生成式人工智能的发展既带来了有益的生产力转型机会&#xff0c;也提供了被恶意利用的机会。 最近&#xff0c;Abnormal Security的研究人员发现了一个专门为网络犯罪创建的无审查AI聊天机器人——GhostGPT&#xff0c;是人工智能用于非法活动的新前沿&#xff0c;可以被用于网…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...