FastDFS简介

FastDFS是国人开发的一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

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

FastDFS特点

它具有如下特点:

  • FastDFS是一个轻量级的开源分布式文件系统

  • FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡

  • FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储

  • 支持存储服务器在线扩容

  • 支持相同内容的文件只保存一份,节约磁盘空间

  • FastDFS只能通过Client API访问,不支持POSIX访问方式

  • FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)

FastDFS架构

架构图:
image-1671028345928

介绍:

  • Tracker Server 跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。记录storage server的状态,是连接Client和Storage server的枢纽

  • Storage Cluster 存储服务器,文件和meta data都保存到存储服务器上

  • group 组,也可称为卷。同组内服务器上的文件是完全相同的

  • meta-data 文件相关属性,键值对(Key Value Pair)方式,如:width=1024,heigth=768

架构解读:

  • 只有两个角色,tracker server和storage server,不需要存储文件索引信息。

  • 所有服务器都是对等的,不存在Master-Slave关系。

  • 存储服务器采用分组方式,同组内存储服务器上的文件完全相同(RAID 1)。

  • 不同组的storage server之间不会相互通信。

  • 由storage server主动向tracker server报告状态信息,tracker server之间不会相互通信。

上传机制

image-1671029729252

下载机制

image-1671029766724

文件同步机制

FastDFS的文件同步写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

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

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

Docker部署FastDFS

拉取镜像

docker search fastdfs

image-1671028705036

docker pull delron/fastdfs

image-1671028741162

构建Tracker Server

创建tracker 目录

mkdir -p /opt/fastdfs/tracker

启动 tracker server

docker run -d --name tracker -p 22122:22122 -v /opt/fastdfs/tracker:/var/fdfs delron/fastdfs tracker

构建Storage Server

创建storage 目录

mkdir -p /opt/fastdfs/storage

启动 storage server

docker run -d --name storage  -e TRACKER_SERVER=172.17.0.1:22122 -p 23000:23000 -p 8888:8888 -v /opt/fastdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

这个镜像里面集成了Nginx,如果需要修改nginx的配置 /usr/local/nginx/conf 目录下

如果需要修改storage.conf 在 /etc/fdfs/ 目录下

测试文件上传

首先在 /opt/fastdfs/storage 目录下创建一个readme.txt文件,然后进入容器

docker exec -it storage /bin/bash

进入容器后执行命令

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /var/fdfs/readme.txt

执行成功后返回文件的路径例如:

group1/M00/00/00/rBEACW0ZSw6Adza4AAAArJjg5T0080.txt

测试文件下载

wget http://127.0.0.1:8888/group1/M00/00/00/rBEACW0ZSw6Adza4AAAArJjg5T0080.txt