保姆级教程-分布式文件系统FastDFS(高效存储,有效解决大量资源上传下载)(一)

简介: 保姆级教程-分布式文件系统FastDFS(高效存储,有效解决大量资源上传下载)

b804338b7ca142e480f8ebc749b177ce.png

官方网站:https://github.com/happyfish100/


配置文档:https://github.com/happyfish100/fastdfs/wiki/


参考资料:https://www.oschina.net/question/tag/fastdfs


Java客户端:https://github.com/happyfish100/fastdfs-client-java


为什么要学习分布式文件系统


在我们的web开发中,很多的时候都需要把本机的一些文件上传到web服务器上面去。

举一个简单的例子,按照一个传统的上传方式,前端使用form表单,提交按钮直接submit到后台,其关键的代码就是文件的接收,至于后面的存储操做,基本上都是对IO流的操做。而文件也只是保存到本地磁盘或对应的服务器。这样就会有一些致命的缺点。


3c93cd6815b94067a0d7df384a09522c.png


如果这台计算机宕机了,那么会导致整个服务不可用,文件不能上传和下载了,如果这台计算机磁盘损坏了那么会丢失所有的文件。并且这台计算机的磁盘空间非常有限,很容易达到磁盘的上线导致无法上传文件。


了解完传统的文件上传系统的一些弊端后,我们针对下方的一个需求带大家进一步了解分布式文件系统的一些好处。


  • 需求案例:假设现在需要做一个类似抖音b站的,视频分享网站,会拥有大量的视频教程资源供用户观看以及上传下载,文件太多如果高效存储?用户访问量大如何保证下载速度呢?
  • :分布式文件系统是解决这些问题的有效方法之一


什么是分布式文件系统?


百度百科是这样说的!


分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。


另外,对等特性允许一些系统扮演客户机和服务器的双重角色。例如,用户可以“发表”一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就像使用本地驱动器一样。


这里讲的可能会有些官方,没关系!下面我将结合上方的需求给大家做了一个简单的总结。


image.png

之前我们将上传的视频文件放在一台宿主机内,如果一个盘符内存不够,就增加硬盘个数,但是单纯的增加硬盘个数已经无法满足当代的需求,毕竟硬盘访问速度有限。


分布式文件系统将视频分别放在不同计算机内,通过网络将一个一个计算机的文件系统连接起来组成一个网络文件系统,形成一个分布式网络,一台计算机的文件系统处理能力扩充到多台计算机内同时处理,就算某一台计算机挂了,还有另外副本(备份)计算提供数据。每台计算机也可以放在不同的地域,这样用户就可以就近访问,提高访问速度。有效的解决单点故障文件丢失等一系列问题,特别适合我们高并发,常扩容的这么一个业务场景下。


FastDFS


FastDFS纯C语言实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性FastDFS可以看做是基于文件的key value pair存储系统,称作分布式文件存储服务更为合适。


FastDFS是什么?


FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载) 等,解决了大容量存储和负载均衡的问题。

特别适合以文件为载体的在线服务,如相册网站、视频网站、图片网站、文档网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。


FastDFS整体架构

FastDFS文件系统主要由两大部分构成,一个是客户端,一个是服务端。


f3ac5521ca0d492a9364597076152a81.png

客户端(Client)通常指我们的程序


比如我们的Java程序去连接FastDFS,操作FastDFS,那我们的Java程序就是一个客户端,FastDFS提供有API用来访问FastDFS文件系统,控制文件上传下载层( 如果你是 java 开发,你只需要关心着一层)。


服务端有两个部分构成


1.跟踪器(Tracker):跟踪器主要做调度工作,在内存中记录集群中存储节点storage的状态信息,是前端 Client 和后端存储节点storage的枢纽。因为相关信息全部在内存中,Tracker server 的性能非常高,一个较大的集群(比如上百个group)中有3台就足够了。

2.存储节点(Storage):存储节点(storage)用于存储文件,包括文件和文件属性(meta data)都保存到存储服务器磁盘上,完成文件管理的所有功能:文件存储,文件同步和提供文件访问等。


下载安装

  • 下载安装分以下三个步骤,请按照顺序进行操作。

一.安装前置依赖包

检查Linux上是否安装了 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


9393d0e89f4b4590abeab63020191f74.png


二.安装libfastcommon


前置依赖包安装成功后,我们紧接着需要安装公共函数库 libfastcommon


  1. 获取libfastcommon安装包


wget https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz

3b2b01958577418da06488fc26895059.png

  1. 解压安装包
tar -zxvf V1.0.36.tar.gz


d6099c220e594662b897eeb2b8086b40.png

  1. 安装完成后进入 libfastcommon 目录
cd libfastcommon-1.0.36


c68baf23d89a4b5386648ff2d8df0aeb.png

  1. 在 libfastcommon 目录执行编译
./make.sh


8cf58d3c5e824afba050ebed0f67a937.png

  1. 安装 libfastcommon
./make.sh install


d81bada09c594c888c504cac7d790612.png


三.安装FastDFS

  1. 获取fast安装包,这里采用的版本为5.11
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz

ec95fcb18e724322a6cac0a1d9ba2a7a.png


  1. 解压安装包
tar -zxvf V5.11.tar.gz

c074a499e71348188db19adf1ab25374.png

  1. 安装成功后进入目录
cd fastdfs-5.11

1339ae6788274440a12eab8d72181c58.png

  1. 执行编译 make.sh 文件
./make.sh


939f04b25ede4c7084a10b2abfea0bf6.png

  1. 安装 fastdfs
./make.sh install


258fbdc72b5841fca142350687099c6f.png

  1. 安装成功后,查看可执行命令,这些命令放在usr/bin目录下表示不用去配置环境变量就可以直接使用我们fastdfs的命令
ls -la /usr/bin/fdfs*


26fb27cc8d07414c974bd0f3a96a145b.png

  1. 拷贝 http.conf 文件到 /etc/fdfs 目录下
cp http.conf /etc/fdfs/


169b3137bd444ff8a023302039c6ebe9.png

  1. 拷贝 mime.types 文件到 /etc/fdfs 目录下
cp mime.types /etc/fdfs/

7c60dbddd7584347a24d23ecec0513c2.png

拷贝这两个文件后续会用到,为了避免报错大家拷贝完记得进入目录查看一下

fc9460937098443c9d7552e3904afc16.png


想要成功启动我们还需要进行修改以下两个配置


配置Tracker服务


修改 tracker 文件后缀,该文件在 /etc/fdfs 目录下,进入目录后发现有三个.sample后缀的文件(自动生成的fdfs模板配置文件),通过cp命令拷贝tracker.conf.sample,删除.sample后缀作为正式文件。


cd /etc/fdfs/

cd938c64b27c47cb968266c8873444b8.png

cp tracker.conf.sample tracker.conf

820dab24f9ad4ad38e545fc49001fe7a.png

  1. 编辑 tracker.conf 文件,修改相关参数
vim tracker.conf


d1131d2b297c43a7b40ed86f2638165f.png


base_path 指定存放日志的路径,要求该路径必须存在。port 默认端口号。http.server_port 为http端口,需要和nginx相同

base_path=/home/fastdfs/tracker 
port=22122
http.server_port=80

39fca288166d42a98e01cfc869a6bd48.png

40679e1b335d43e2a1c510f88cb052bc.png

修改完成后输入wq保存并退出,紧接着在配置的目录下创建该文件夹

mkdir /home/fastdfs/tracker


033b5f1b964e4ef1b655b3a01fb3dbb6.png

  1. 启动并测试
fdfs_trackerd


d48c2ac87c2e4515bce42c4630df3086.png

通过上方说明命令产生的结果fdfs_trackerd  [start | stop | restart] 可以告诉我们怎么去用


代表配置文件是必选项,start为启动,stop为停止,restart为重启他们都是可选项,默认为start


我们想要运行trackerd.conf文件就可以通过下方命令去执行

fdfs_trackerd /etc/fdfs/tracker.conf


45fd641942894df881095205831d06b0.png

配置Storage服务

  1. 修改文件后缀
cd /etc/fdfs/


cd938c64b27c47cb968266c8873444b8.png

cp storage.conf.sample storage.conf

3f994f7a4e194bdfb6b282e41cea4a23.png


  1. 编辑 storage.conf 文件,修改相关参数
vim storage.conf

9936ccf51e7e4841bec64cd70c06ea55.png

#storage存储data和log的跟路径,必须提前创建好
base_path=/home/fastdfs/storage
#storge默认23000,同一个组的storage端口号必须
port=23000
#默认组名,根据实际情况修改
group_name=group1
#存储路径个数,需要和store_path个数匹配
store_path_count=1
#真正存放文件的目录,如果为空,则使用base_path
store_path0=/home/fastdfs/storage/files
#配置该storage监听的tracker的ip和port
tracker_server=xx.xxx.xxx.xxx:22122 

b63f0875c2ad4696921e1f0e3a564c31.png

c6e62f582fff4d99a35500d12e3fac9e.png

7ac333be57fe4cfba2308cd516c43327.png


配置完成后不要忘记创建对应的文件夹

mkdir /home/fastdfs/storage
mkdir /home/fastdfs/storage/files


  1. 启动并测试
fdfs_storaged /etc/fdfs/storage.conf

91d874f683fb40aba7d2211423a7994a.png

查看我们两个服务是否启动成功

ps -ef|grep fdfs


043085818ceb4ac4bf8c1a43843d350e.png



相关文章
|
2月前
|
分布式计算 Hadoop 网络安全
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
41 1
|
2月前
|
存储 机器学习/深度学习 缓存
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
54 1
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
Hadoop-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看
56 1
|
2月前
|
SQL NoSQL MongoDB
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
51 0
|
4月前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
145 2
|
4月前
|
机器学习/深度学习 资源调度 PyTorch
面向大规模分布式训练的资源调度与优化策略
【8月更文第15天】随着深度学习模型的复杂度不断提高,对计算资源的需求也日益增长。为了加速训练过程并降低运行成本,高效的资源调度和优化策略变得至关重要。本文将探讨在大规模分布式训练场景下如何有效地进行资源调度,并通过具体的代码示例来展示这些策略的实际应用。
496 1
|
4月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
116 1
|
4月前
|
Oracle Java 关系型数据库
分布式锁设计问题之由于GC导致的Client同时操作共享资源的问题如何解决
分布式锁设计问题之由于GC导致的Client同时操作共享资源的问题如何解决
|
5月前
|
存储 关系型数据库 分布式数据库
PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题
【7月更文挑战第3天】PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题。此架构让存储层专注数据可靠性,计算层专注处理SQL,提升性能并降低运维复杂度。通过RDMA加速通信,多副本确保高可用性。资源可独立扩展,便于成本控制。动态添加计算节点以应对流量高峰,展示了其灵活性。PolarDB的开源促进了数据库技术的持续创新和发展。
313 2
|
6月前
|
存储 搜索推荐 Java
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
86 2