首页 > 其他分享 >fastDFS分布式文件系统

fastDFS分布式文件系统

时间:2023-12-29 16:32:27浏览次数:37  
标签:文件 fastdfs storage fastDFS usr 分布式文件系统 fdfs root

一、分布式文件系统的背景


1.1 技术应用场景

当一个网站中存在大量的图片,视频,文档等文件时,往往会碰见很多问题,比如大量文件如何高效存储,用户量太大如何保证下载速度?

分布式文件系统解决了海量文件存储及传输访问的瓶颈问题,对海量视频、图片的管理等。


1.2 文件系统

文件系统是负责管理和存储文件的系统软件,操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件。

常见的文件系统:FAT16/FAT32、NTFS、HSF、UFS、APFS、XFS、Ext4等。


1.3 分布式文件系统

为什么会有分布式文件系统?

分布式文件系统是面对互联网的需求而产生,互联网时代对海量数据如何存储?靠简单的增加硬盘个数已经满足不了我们的要求,因为硬盘传输速度有限但是数据在急剧增长,另外我们还要做好数据备份、数据安全等。

采用分布式文件系统可以将多个地点的文件系统通过网络连接起来,组成一个文件系统网络,节点之间通过网络进行通信,一台文件系统的存储和传输能力有限,我们让文件在多台计算机上存储,通过多台计算机共同传输。

fastDFS分布式文件系统_客户端

好处:

  1. 一台计算机的文件系统处理能力扩充到多台计算机同时处理
  2. 一台计算机挂了还有另外副本计算机提供数据
  3. 每台计算机可以放在不同的区域,这样用户就可以就近访问,提高访问速度


1.4 主流的分布式文件系统

  • NFS

NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

fastDFS分布式文件系统_文件系统_02

  1. 在客户端上映射NFS服务器的驱动器
  2. 客户端通过网络访问NFS服务器的硬盘完全透明
  • GFS

GFS(googleFs)是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。

  1. GFS采用主从结构,一个GFS集群由一个master和大量的chunkserver组成
  2. master存储了数据文件的元数据,一个文件被分成了若干块存储在多个chunkserver中
  3. 用户从master中获取数据元信息,从chunkserver存储数据

fastDFS分布式文件系统_客户端_03

  • HDFS

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。

  1. HDFS采用主从结构,一个HDFS集群由一个名称节点和若干数据节点组成。名称节点存储数据的元信息,一个完整的数据文件分成若干块存储在数据节点。
  2. 客户端从名称节点获取数据的元信息及数据分块的信息,得到信息客户端即可从数据块来存取数据。

fastDFS分布式文件系统_服务器_04

1.5 分布式文件服务提供商

  • 阿里的OSS
  • 七牛云存储
  • 百度云存储

二、fastDFS原理


2.1 fastDFS介绍

FastDFS是用c语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。FastDFS专为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标。使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

为什么要使用fastDFS呢?

上边介绍的NFS、GFS都是通用的分布式文件系统。通用的分布式文件系统的优点的是开发体验好,但是系统复杂性高、性能一般,而专用的分布式文件系统虽然开发体验性差,但是系统复杂性低并且性能高。fastDFS非常适合存储图片等那些小文件fastDFS不对文件进行分块,所以它就没有分块合并的开销,fastDFS网络通信采用socket,通信速度很快。


2.2 fastDFS工作原理

2.2.1 fastDFS架构

fastDFS架构包括Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

fastDFS分布式文件系统_服务器_05


2.2.2 文件上传流程


fastDFS分布式文件系统_客户端_06

客户端上传文件后存储服务盟将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

fastDFS分布式文件系统_客户端_07

  • 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
  • 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01 , 以此类推。
  • 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
  • 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。


2.2.3 文件下载流程

fastDFS分布式文件系统_客户端_08

tracker根据请求的文件路径即文件ID来快速定义文件。

比如请求下面的文件:

fastDFS分布式文件系统_服务器_09

  1. 通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。
  2. 存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。


三、fastDFS安装与配置


3.1 安装libfastcommon

  1. 获取libfastcommon安装包
    地址:https://github.com/happyfish100/libfastcommon/releases
  2. 解压安装包:tar -zxvf libfastcommon-1.0.48.tar.gz
  3. 进入目录:cd libfastcommon-1.0.48
  4. 执行编译:./make.sh
  5. 安装:./make.sh install
[root@localhost fastdfs]# ls
libfastcommon-1.0.48.tar.gz
[root@localhost fastdfs]# tar -zxvf libfastcommon-1.0.48.tar.gz
[root@localhost fastdfs]# cd libfastcommon-1.0.48
[root@localhost libfastcommon-1.0.48]# ls
doc  HISTORY  INSTALL  libfastcommon.spec  LICENSE  make.sh  php-fastcommon  README  src
[root@localhost libfastcommon-1.0.48]# ./make.sh 
[root@localhost libfastcommon-1.0.48]# ./make.sh install

3.2 安装FastDFS

  1. 获取fastDFS安装包
    地址:https://github.com/happyfish100/fastdfs/releases
  2. 解压安装包:tar -zxvf fastdfs-6.07.tar.gz
  3. 进入目录:cd fastdfs-6.07
  4. 执行编译:./make.sh
  5. 安装:./make.sh install
[root@localhost fastdfs]# ls
fastdfs-6.07.tar.gz
[root@localhost fastdfs]# tar -zxvf fastdfs-6.07.tar.gz
[root@localhost fastdfs]# cd fastdfs-6.07
[root@localhost fastdfs-6.07]# ./make.sh 
[root@localhost fastdfs-6.07]# ./make.sh install
[root@localhost fastdfs-6.07]# ls -la /usr/bin/fdfs*
-rwxr-xr-x. 1 root root  369344 Mar 11 16:19 /usr/bin/fdfs_appender_test
-rwxr-xr-x. 1 root root  369120 Mar 11 16:19 /usr/bin/fdfs_appender_test1
-rwxr-xr-x. 1 root root  356040 Mar 11 16:19 /usr/bin/fdfs_append_file
-rwxr-xr-x. 1 root root  355464 Mar 11 16:19 /usr/bin/fdfs_crc32
-rwxr-xr-x. 1 root root  356096 Mar 11 16:19 /usr/bin/fdfs_delete_file
-rwxr-xr-x. 1 root root  356832 Mar 11 16:19 /usr/bin/fdfs_download_file
-rwxr-xr-x. 1 root root  356760 Mar 11 16:19 /usr/bin/fdfs_file_info
-rwxr-xr-x. 1 root root  376448 Mar 11 16:19 /usr/bin/fdfs_monitor
-rwxr-xr-x. 1 root root  356320 Mar 11 16:19 /usr/bin/fdfs_regenerate_filename
-rwxr-xr-x. 1 root root 1297488 Mar 11 16:19 /usr/bin/fdfs_storaged
-rwxr-xr-x. 1 root root  379248 Mar 11 16:19 /usr/bin/fdfs_test
-rwxr-xr-x. 1 root root  378464 Mar 11 16:19 /usr/bin/fdfs_test1
-rwxr-xr-x. 1 root root  522464 Mar 11 16:19 /usr/bin/fdfs_trackerd
-rwxr-xr-x. 1 root root  357024 Mar 11 16:19 /usr/bin/fdfs_upload_appender
-rwxr-xr-x. 1 root root  358048 Mar 11 16:19 /usr/bin/fdfs_upload_file

3.3 配置Tracker服务

  1. 进入/etc/fdfs目录,有四个.sample后缀的文件,拷贝tracker.conf.sample并删除后缀
[root@localhost fastdfs-6.07]# cd /etc/fdfs/
[root@localhost fdfs]# ls
client.conf.sample  storage.conf.sample  storage_ids.conf.sample  tracker.conf.sample
[root@localhost fdfs]# cp tracker.conf.sample tracker.conf
  1. 编辑tracker.conf:vi tracker.conf,修改相关参数
# tracker存储data和log的根路径,必须提前创建好
base_path = /home/wangyg/fastdfs/tracker
  1. 启动tracker(支持start|stop|restart)
[root@localhost fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

3.4 配置Storage服务

  1. 进入/etc/fdfs目录,拷贝storage.conf.sample并删除后缀
  2. 编辑storage.conf:vi storage.conf,修改相关参数:
# storage存储data和log的根路径,必须提前创建好
base_path = /home/wangyg/fastdfs/storage
group_name=group1  #默认组名,根据实际情况修改
store_path_count=1  #存储路径个数,需要和store_path个数匹配
store_path0=/home/wangyg/fastdfs/storage  #如果为空,则使用base_path
tracker_server=172.16.11.109:22122 #配置该storage监听的tracker的ip和port
  1. 启动storage(支持start|stop|restart)
[root@localhost fdfs]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

3.5 在Storage上安装Nginx

在storage server上安装nginx的目的是对外通过http访问storage server上的文件。

使用nginx的模块FastDFS-nginx-module的作用是通过http方式访问storage中的文件,当storage本机没有要找的文件时向源storage主机代理请求文件

所以说,nginx这块的安装和fastDFS本身没有关系,不要混淆。

地址:https://github.com/happyfish100/fastdfs-nginx-module

四、 测试环境搭建


4.1 文件上传

  1. 新建一个maven工程,导入fastDFS依赖
<dependency>
  <groupId>net.oschina.zcx7878</groupId>
  <artifactId>fastdfs-client-java</artifactId>
  <version>1.27.0.0</version>
</dependency>
  1. 新建配置文件fastdfs-client.properties
# http连接超时时间
fastdfs.connect_timeout_in_seconds=5
# tracker与stroage网络通信超时时间
fastdfs.network_timeout_in_seconds=30
fastdfs.charset=UTF-8
fastdfs.tracker_servers=172.16.11.109:22122

详细配置可参考官方文档:

https://github.com/happyfish100/fastdfs-client-java/blob/master/README.md

  1. 新建一个测试类
public static void main(String[] args) throws Exception{
  // 加载配置文件
  ClientGlobal.initByProperties("fastdfs-client.properties");
  // 定义trackerClient,用于请求TrackerServer
  TrackerClient trackerClient = new TrackerClient();
  // 连接tracker
  TrackerServer trackerServer = trackerClient.getConnection();
  // 获取storage
  StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
  // 创建storageClient
  StorageClient1 storageClient1 = new StorageClient1(trackerServer, storeStorage);
  // 上传文件路径
  String uploadFilePath = "/Users/wangyg/file/test.docx";
  // 上传成功后拿到文件id
  String fileId = storageClient1.upload_file1(uploadFilePath, "docx", null);
  System.out.println(fileId);
}

执行成功后可以在控制台看到打印的文件ID:

group1/M00/00/00/rBALbWBK3oeAXQK8ACtcP-PRzzY66.docx

根据上面store_path0配置的路径下可以找到上传的文件。

标签:文件,fastdfs,storage,fastDFS,usr,分布式文件系统,fdfs,root
From: https://blog.51cto.com/u_16483988/9028894

相关文章

  • FastDFS 单机版linux部署笔记
    参考文章:https://blog.csdn.net/qq_20409407/article/details/134201386备忘:fastdfs三部分路径为:/home/fastdfs/tracker/home/fastdfs/storage/home/fastdfs/client#fastdfs命令工具所在路径usr/└──bin/├──fdfs_appender_test├──fdfs_appender_test1├......
  • centos升级nginx,增加fastdfs插件
    解决nginx漏洞,需要升级到指定1.22.1版本nginx缓冲区错误漏洞(CVE-2022-41741)nginx越界写入漏洞(CVE-2022-41742)https://mailman.nginx.org/pipermail/nginx-announce/2022/RBRRON6PYBJJM2XIAPQBFBVLR4Q6IHRA.html升级:首先到安装目录下cd/usr/local/nginx1、首先下载......
  • Maven无法下载fastdfs-client-java依赖问题解决
    一、分析原因控制台报错具体如下:并且pom.xml中以下依赖爆红:<dependency><groupId>org.csource</groupId><artifactId>fastdfs-client-java</artifactId><version>1.29-SNAPSHOT</version></dependency>原因:因为fastdfs-clien......
  • Linux FastDFS 更换服务器数据迁移的方法
    FastDFS是一个开源的高性能分布式文件系统,特别适合于大规模数据和访问量场景。使用FastDFS进行文件存储时,某些情况下,我们可能需要更换服务器,但服务器已经使用一段时间,这时需要将原服务上存储的文件数据进行迁移。本文主要介绍FastDFS中存储的文件进行数据迁移的方法。FastDFS......
  • 百战商城项目---第11章 文件服务器 FastDFS 搭建
    1简介FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份......
  • Linux安装fastdfs图片服务器
    1、阿里云安装centos7服务器得到用户名密码和ip后用securCrt连接工具链接远程主机2、安装fastdfs图片服务器(1)上传需要的压缩包libfastcommon-common.zip(依赖工具包)  FastDFS_v5.05.tar.gz(源码)  fastdfs-nginx-module_v1.16.tar.gz(与nginx连接的模块)nginx1.8版本  ......
  • centos7.9 部署FastDFS+Nginx本地搭建文件服务器 高性能的文件服务器集群 同时实现在
    前言FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线......
  • 编译Fastdfs报错——In file included from ../common/fdfs_global.c:21:0: ../common
    记录一下安装fastdfs时编译报错,报错信息如下:原因:这是因为我们在安装较新版得fastdfs时,从github下载得安装包缺少文件,如果按照网上很多博主较早之前写的文档操作得话就会出现这样得错误,缺少了libserverframe网络框架解决方法:安装 libserverframe网络框架安装包下载地......
  • 分布式文件系统FastDFS
    目录目前系统存在的缺点分布式文件系统FastDFS介绍概念架构文件上传文件下载目前系统存在的缺点目前是通过tomcat提供虚拟目录的方式供用户访问;当然也可以通过nginx实现静态资源访问的方式文件冗余在tomcat挂了的情况下不能提供服务;目前是单一文件服务的存储(依赖tomcat不能进......
  • FastDFS基于Docker安装
    FastDFS基于Docker安装可参考dockerpulldelron/fastdfs构建Tracker容器使用docker镜像构建tracker容器,用于启动跟踪服务器,起到调度的作用。dockerrun-d--network=host--nametracker-v/data/fdfs:/var/fdfsdelron/fastdfstrackerdockerrun-d--network=host--nametra......