【FaskDFS】别找了,主流开源分布式系统存储系统三剑客:FastDFS、Minio、MongoDB零基础入门实战教程!

本文详细介绍了FastDFS分布式文件系统的应用场景、特性、角色和部署过程,包括单机和集群部署。FastDFS适用于海量小文件存储,支持文件上传、下载、同步,适合中小型企业。同时,文章提到了Java应用整合FastDFS的步骤,帮助读者了解如何在实际项目中应用FastDFS。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 分布式文件系统应用场景

互联网海量非结构化数据的存储需求

  • 电商网站:海量商品图片
  • 视频网站:海量视频文件
  • 网盘:海量文件
  • 社交网站:海量图片

2. FastDFS介绍

https://github.com/happyfish100/fastdfs

2.1 简介

    FastDFS 是一个开源的高性能分布式文件系统(DFS)。它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size < 500MB)为载体的在线服务。

    FastDFS设计是用来存储小文件的,过大的文件处理方案是拆分为小文件,可跟踪小文件的上传情况。如果应用场景都是处理大文件,可能选择其他分布式文件系统方案更合适。

2.2 特性

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

优点:

  • 文件不分块存储,文件和系统中的文件一一对应。
  • 对文件内容做 hash 处理,避免出现重复文件节约磁盘空间。
  • 下载文件支持 HTTP 协议,可基于内置 Web Server 或外部 Web Server。
  • 支持在线扩容,动态添加卷。
  • 支持文件沉余备份和负载均衡。
  • 存储服务器上可以保存文件属性(meta-data)。
  • V2.0 网络通信采用 libevent,支持大并发访问,整体性能更好。

缺点:

  • 直接按文件存储,可直接查看文件内容,缺乏文件安全性。
  • 数据同步无校验,存在静默IO问题,降低系统可用性。
  • 单线程数据同步,仅适合存储小文件(4KB到500MB之间)。
  • 备份数据根据存储分卷(分组)决定,缺乏文件备份数设置灵活性。
  • 单个挂载点异常会导致整个存储节点下线。
  • 缺乏多机房容灾支持。
  • 静态的负载均衡机制。

优点和缺点并存,但针对中小型系统已经玩全足够使用了。

2.3 角色

  • Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server 和 group ,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
  • Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server ,数据互为备份。
  • Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

           在这里插入图片描述

Tracker 相当于一个调度中心,上传和下载都通过它来进行分配指定。

Storage cluster 部分,由 Volume1、Volume2…VolumeN组成、它们称为卷(或者叫做组),卷与卷之间是平行的关系,可以根据资源的使用情况随时增加,卷内服务器文件相互同步备份,以达到容灾的目的。

2.4 存储策略

    为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了沉余备份和负载均衡的作用。

    在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

2.5 上传过程

   当服务器启动之后,Storage Server 会定期的向Tracker Server 发送存储信息。如果Tracker Server 是集群形式,则每个 Tracker 之间的关系是对等的,客户端上传时选择任意一个 Tracker 即可。

   整体流程:当客户请求 Tracker 进行上传操作时,会获取存储服务相关信息,主要包括IP和端口。根据返回信息上传文件,通过存储服务器写入磁盘,并返回给客户端 file_id、路径信息、文件名等信息。

对应流程如下:

           在这里插入图片描述

其中,当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的 group,当选定了 group 后就要决定给客户端分配 group 中的哪一个 storage server。
当分配好 storage server 后,客户端向 storage 发送写文件请求,storage 将会为文件分配一个数据存储目录。然后为文件分配一个 file_id,最后根据以上的信息生成文件名存储文件。
生成的文件名基本格式如下:

                      在这里插入图片描述

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

2.6 文件同步

   写文件时,客户端将文件写至 group 内一个 storage server 即认为写文件成功,storage server 写完文件后,会由后台线程将文件同步至同 group 内其他的 storage server。
每个 storage 写文件后,同时会写一份 binlog,binlog 里不包含文件数据,只包含文件名等元信息,这份 binlog 用于后台同步,storage 会记录向 group 内其他 storage 同步的进度,以便重启后能接上次的进度 继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有 server 的时钟保持同步。

storage 的同步进度会作为元数据的一部分汇报到 tracker 上,tracker 在选择读 storage 的时候会以同步进 度作为参考。

2.7 下载过程

   跟上传一样,在下载时客户端可以选择任意 Tracker server。
客户端带文件名信息请求 Tracker,Tracker 从文件名中解析出文件的 group、大小、创建时间等信息, 然后选择一个 storage 用来服务处理请求,返回对应文件。
对应流程图如下:
            在这里插入图片描述
如果是基于 Web 的 http 请求,此处的 Client 可以是 Nginx 代理服务。下面这张图更加形象的描述了相关的流程。


            在这里插入图片描述

3. 环境搭建

3.1 环境准备

3.1.1 使用的系统软件

名称 说明
centos 7.x
libfastcommon FastDFS 分离出的一些公用函数包
FastDFS FastDFS 本体
fastdfs-nginx-module FastDFS和nginx的关联模块
nginx nginx1.15.4
3.1.2编译环境
CentOS7
yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y

3.1.3 磁盘目录

说明 位置
所有安装包 /usr/local/soft
数据存储位置 /data/fastdfs

3.1.4 安装 libfastcommon

git clone https://github.com/happyfish100/libfastcommon.git --depth 1 
cd libfastcommon/
#编译安装
./make.sh && ./make.sh install

3.1.5 安装 FastDFS

cd ../ #返回上一级目录
git clone https://github.com/happyfish100/fastdfs.git --depth 1 
cd fastdfs/
./make.sh && ./make.sh install #编译安装
#供nginx访问使用
cp /usr/local/soft/fastdfs/conf/http.conf /etc/fdfs/ 
cp /usr/local/soft/fastdfs/conf/mime.types /etc/fdfs/

在这里插入图片描述

3.1.6 安装 fastdfs-nginx-module

cd ../ #返回上一级目录
git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1 
cp /usr/local/soft/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs

3.1.7 安装 nginx

wget http://nginx.org/download/nginx-1.15.4.tar.gz #下载nginx压缩包
tar -zxvf nginx-1.15.4.tar.gz #解压
cd nginx-1.15.4/
#添加fastdfs-nginx-module模块
./configure --add-module=/usr/local/soft/fastdfs-nginx-module/src/ 
make && make install #编译安装

3.2 单机部署

服务器ip: 192.168.124.3

# /etc/hosts
192.168.3.13	fastdfs.com

3.2.1 tracker 配置

mkdir -p /data/fastdfs

vim /etc/fdfs/tracker.conf
#需要修改的内容如下
port=22122	# tracker服务器端口(默认22122,一般不修改) 
base_path=/data/fastdfs	# 存储日志和数据的根目录

在这里插入图片描述

3.2.2 storage 配置


vim /etc/fdfs/storage.conf

#需要修改的内容如下

port=23000							# storage服务端口(默认23000,一般不修改) 
base_path=/data/fastdfs				# 数据和日志文件存储根目录
store_path0=/data/fastdfs			# 第一个存储目录
tracker_server=fastdfs.com:22122	# tracker服务器IP和端口
http.server_port=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值