FastDFS的安装及使用

news2025/1/28 1:13:01

分布式存储发展历程

前段时间 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 文件下载

 

 

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

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

相关文章

接上篇基于Alertmanager 配置钉钉告警

Alertmanager 是一个用于处理和管理 Prometheus 警报的开源工具。它负责接收来自 Prometheus 服务器的警报,进行去重、分组、静默、抑制等操作,并通过电子邮件、PagerDuty、Slack 等多种渠道发送通知。 主要功能 去重:合并相同或相似的警报&a…

社区版Dify + Ollama + DeepSeek-R1(14b)实现私有化LLM推理

社区版Dify Ollama DeepSeek-R1 (14b)实现私有化LLM推理 一 、LLM推理模型简介为什么要用推理模型?DeepSeek R1简介 二、具体实现过程三、Dify 安装和专栏的以往文章推荐 一 、LLM推理模型简介 为什么要用推理模型? 大模型本身…

【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)

本文项目编号 T 159 ,文末自助获取源码 \color{red}{T159,文末自助获取源码} T159,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

2025.1.20——一、[RCTF2015]EasySQL1 二次注入|报错注入|代码审计

题目来源:buuctf [RCTF2015]EasySQL1 目录 一、打开靶机,整理信息 二、解题思路 step 1:初步思路为二次注入,在页面进行操作 step 2:尝试二次注入 step 3:已知双引号类型的字符型注入,构造…

leetcode刷题记录(八十九)——35. 搜索插入位置

(一)问题描述 35. 搜索插入位置 - 力扣(LeetCode)35. 搜索插入位置 - 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位…

Python Typing: 实战应用指南

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

Linux之Tcp粘包笔记

目录 一.网络传输四层模型 二.数据传输中数据包传输的两个限制概念 三.数据传输的中粘包问题 四.数据组装的原因 Nagle算法原理: 五.关闭Nagle优化处理粘包问题吗? 六.粘包处理方法 a.设置消息边界: b.定义消息长度: 七.UDP是否会出…

22_解析XML配置文件_List列表

解析XML文件 需要先 1.【加载XML文件】 而 【加载XML】文件有两种方式 【第一种 —— 使用Unity资源系统加载文件】 TextAsset xml Resources.Load<TextAsset>(filePath); XmlDocument doc new XmlDocument(); doc.LoadXml(xml.text); 【第二种 —— 在C#文件IO…

数据结构 链表2

目录 前言&#xff1a; 一&#xff0c;反转一个链表(迭代) 二&#xff0c;打印一个链表&#xff08;递归&#xff09; 三&#xff0c;反转一个链表(递归) 四&#xff0c;双向链表 总结 前言&#xff1a; 我们根据 [文章 链表1] 可以知道链表相比较于数组的优缺点和计算机…

Linux查看服务器的内外网地址

目录&#xff1a; 1、内网地址2、外网地址3、ping时显示地址与真实不一致 1、内网地址 ifconfig2、外网地址 curl ifconfig.me3、ping时显示地址与真实不一致 原因是dns缓存导致的&#xff0c;ping这种方法也是不准确的&#xff0c;有弊端不建议使用&#xff0c;只适用于测试…

【kong gateway】5分钟快速上手kong gateway

kong gateway的请求响应示意图 安装 下载对应的docker 镜像 可以直接使用docker pull命令拉取&#xff0c;也可以从以下地址下载&#xff1a;kong gateway 3.9.0.0 docker 镜像 https://download.csdn.net/download/zhangshenglu1/90307400&#xff0c; postgres-13.tar http…

缓存商品、购物车(day07)

缓存菜品 问题说明 问题说明&#xff1a;用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大。 结果&#xff1a; 系统响应慢、用户体验差 实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询…

Langchain+讯飞星火大模型Spark Max调用

1、安装langchain #安装langchain环境 pip install langchain0.3.3 openai -i https://mirrors.aliyun.com/pypi/simple #灵积模型服务 pip install dashscope -i https://mirrors.aliyun.com/pypi/simple #安装第三方集成,就是各种大语言模型 pip install langchain-comm…

八股学习 微服务篇

微服务篇 常见面试内容Spring Cloud 常见组件注册中心Ribbon负载均衡策略服务雪崩 常见面试内容 Spring Cloud 常见组件 Spring Cloud有5个常见组件&#xff1a; Eureka/Nacos:注册中心&#xff1b;Ribbon:负载均衡&#xff1b;Feign:远程调用&#xff1b;Hystrix/Sentinel:服…

【xcode 16.2】升级xcode后mac端flutter版的sentry报错

sentry_flutter 7.11.0 报错 3 errors in SentryCrashMonitor_CPPException with the errors No type named terminate_handler in namespace std (line 60) and No member named set_terminate in namespace std 替换sentry_flutter版本为&#xff1a; 8.3.0 从而保证oc的…

electron打包客户端在rk3588上支持h265硬解

目录 前言 chromium是如何支持h265硬解 electron/chromium第一次编译 electron/chromium第二次编译 前言 我们的客户端程序是用electron打包的前端程序&#xff0c;其在rk3588主机上的linux环境运行。之前使用客户端查看h264编码的视频直播是没有问题的&#xff0c;但视频源…

基于物联网的风机故障检测装置的设计与实现

1 系统总体设计方案 通过对风机故障检测装置的设计与实现的需求、可行性进行分析&#xff0c;本设计风机故障检测装置的设计与实现的系统总体架构设计如图2-1所示&#xff0c;系统风机故障检测装置采用STM32F103单片机作为控制器&#xff0c;并通过DS18B20温度传感器、ACS712电…

为什么IDEA提示不推荐@Autowired❓️如果使用@Resource呢❓️

前言 在使用 Spring 框架时&#xff0c;依赖注入&#xff08;DI&#xff09;是一个非常重要的概念。通过注解&#xff0c;我们可以方便地将类的实例注入到其他类中&#xff0c;提升开发效率。Autowired又是被大家最为熟知的方式&#xff0c;但很多开发者在使用 IntelliJ IDEA …

软件工程的概论

软件的概念与特点 软件的定义 软件 程序 数据 文档 软件的特征 1。软件是人开发的 2。软件生产是简单的拷贝 3。软件会多次生产 4。软件开发环境对产品影响很大 5。 软件的双重作用 一方面是一种产品另一方面是开发其他软件产品的工具。 软件分类 按软件功能&…

1. 握手问题python解法——2024年省赛蓝桥杯真题

原题传送门&#xff1a;1.握手问题 - 蓝桥云课 问题描述 小蓝组织了一场算法交流会议&#xff0c;总共有 50人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。但有 7 个人&#xff0c;…