保姆级教程-分布式文件系统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月前
|
存储 Oracle 关系型数据库
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
45 0
|
1月前
|
存储 监控 容灾
TiDB存储层深入:分布式存储架构与数据一致性保障
【2月更文挑战第26天】本文将深入探讨TiDB的存储层,详细解析其分布式存储架构、数据复制机制以及数据一致性保障措施。通过了解存储层的核心组件和工作原理,我们可以更好地理解TiDB如何确保数据的可靠性、高可用性和可扩展性。本文将从存储层的架构、数据分布、容错机制等方面展开介绍,帮助读者全面掌握TiDB存储层的关键技术和优势。
|
1月前
|
算法 数据处理 异构计算
CatBoost高级教程:分布式训练与大规模数据处理
CatBoost高级教程:分布式训练与大规模数据处理【2月更文挑战第15天】
244 14
|
2月前
|
存储 缓存 固态存储
云计算基础-存储虚拟化(深信服aSAN分布式存储)
每秒钟的IOPS数,该指标主要用于评价小块IO性能,体现存储系统的IO延时能力和并发能力。业界一般默认IOPS指的是4K块大小的IO性能,该值越大说明性能越好。
56 1
|
2月前
|
机器学习/深度学习 分布式计算 Python
OpenAI Gym 高级教程——分布式训练与并行化
OpenAI Gym 高级教程——分布式训练与并行化
198 1
|
3月前
|
存储 NoSQL 算法
redis存储什么类型的数据?redis分布式锁怎么实现的?
redis存储什么类型的数据?redis分布式锁怎么实现的?
|
Java 数据库连接 mybatis
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)(下)
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
37 0
|
存储 Oracle 关系型数据库
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)(上)
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
34 0
|
3月前
|
数据库 OceanBase
OceanBase数据库是一个分布式集群产品,在部署时对硬件资源有特定的需求
OceanBase数据库是一个分布式集群产品,在部署时对硬件资源有特定的需求【1月更文挑战第12天】【1月更文挑战第56篇】
29 2
|
4月前
|
编译器 定位技术 开发工具
分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法
分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法

热门文章

最新文章