手把手教你用 FastDFS 构建分布式文件管理系统

说起分布式文件管理系统,大家可能很容易想到 HDFS、GFS 等系统,前者是 Hadoop 的一部分,后者则是 google 提供的分布式文件管理系统 。除了这些之外,国内淘宝和腾讯也有自己的分布式文件管理系统,都叫 TFS(Taobao File System 和 Tencent File System) 。
相对于上面提到的这些分布式文件管理系统而言,FastDFS 可能离我们 JAVA 工程师更近一些,因为文件上传这个功能太常见了,而想要搭建独立的分布式文件管理系统,FastDFS+Nginx 组合无疑是最佳方案 。因此,松哥今天就来和大家简单聊一聊这个问题 。
如果小伙伴们还不懂在传统的开发环境下如何进行文件上传,可以参考松哥之前发在gongzhonghao的文件上传教程:

  • Spring Boot + Vue,手把手教你做文件上传
1.什么是 FastDFS1.1 FastDFS 简介FastDFS 由淘宝的余庆大佬在 2008 年开源的一款轻量级分布式文件管理系统,FastDFS 用 C 语言实现,支持 linux、FreeBSD、macOS 等类 UNIX 系统 。FastDFS 类似 google FS,属于应用级文件系统,不是通用的文件系统,只能通过专有 API 访问,目前提供了 C 和 Java SDK,以及 php 扩展 SDK 。
这款开源软件从发布至今,历经数十年,这款开源软件的生命力依然旺盛,在业界依然备受推崇,当然这也得益于作者一直在不断完善该软件 。
FastDFS 专为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性,它可以看做是基于文件的 key/value 存储系统,key 为文件 ID,value 为文件内容,因此称作分布式文件存储服务更为合适 。
1.2 为什么需要 FastDFS传统的企业级开发对于高并发要求不是很高,而且数据量可能也不大,在这样的环境下文件管理可能非常 Easy 。
但是互联网应用访问量大、数据量大,在互联网应用中,我们必须考虑解决文件大容量存储和高性能访问的问题,而 FastDFS 就特别适合干这件事情,常见的图片存储、视频存储、文档存储等等我们都可以采用 FastDFS 来做 。
1.3 FastDFS 架构作为一款分布式文件管理系统,FastDFS 主要包括四个方面的功能:
  • 文件存储
  • 文件同步
  • 文件上传
  • 文件下载
这个方面的功能,基本上就能搞定我们常见的文件管理需求了 。
下面这是一张来自 FastDFS 官网的系统架构图:
手把手教你用 FastDFS 构建分布式文件管理系统

文章插图
 
从上面这张图中我们可以看到,FastDFS 架构包括 Tracker 和 Storage 两部分,看名字大概就能知道,Tracker 用来追踪文件,相当于是文件的一个索引,而 Storage 则用来保存文件 。
我们上传文件的文件最终保存在 Storage 上,文件的元数据信息保存在 Tracker 上,通过 Tracker 可以实现对 Storage 的负载均衡 。
Storage 一般会搭建成集群,一个 Storage Cluster 可以由多个组构成,不同的组之间不进行通信,一个组又相当于一个小的集群,组由多个 Storage Server 组成,组内的 Storage Server 会通过连接进行文件同步来保证高可用 。
2.FastDFS 安装介绍完 FastDFS 之后,相信小伙伴已经摩拳擦掌跃跃欲试了,接下来我们就来看下 FastDFS 的安装 。
【手把手教你用 FastDFS 构建分布式文件管理系统】我这里为了测试方便,就不开启多台虚拟机了,Tracker 和 Storage 我将安装在同一台服务器上 。
图片上传我们一般使用 FastDFS,图片上传成功之后,接下来的图片访问我们一般采用 Nginx,所以这里的安装我将从三个方面来介绍:
  • Tracker 安装
  • Storage 安装
  • Nginx 安装
2.1 Tracker 安装安装,我们首先需要准备一个环境两个库以及一个安装包 。
「1.一个环境」
先来看一个环境,由于 FastDFS 采用 C 语言开发,所以在安装之前,如果没有 gcc 环境,需要先安装,安装命令如下:
yum install gcc-c++「2.两个库」
再来看两个库,由于 FastDFS 依赖 libevent 库,安装命令如下:
yum -y install libevent另一个库是 libfastcommon,这是 FastDFS 官方提供的,它包含了 FastDFS 运行所需要的一些基础库 。
libfastcommon 下载地址:
https://github.com/hAppyfish100/libfastcommon/archive/V1.0.43.tar.gz
?
考虑到 GitHub 访问较慢,松哥已经把安装文件下载好了,放在百度网盘上,小伙伴们可以在松哥公众号后台回复 fastdfs 获取下载链接 。
?
将下载好的 libfastcommon 拷贝至 /usr/local/ 目录下,然后依次执行如下命令:
cd /usr/localtar -zxvf V1.0.43.tar.gzcd libfastcommon-1.0.43/./make.sh./make.sh install


推荐阅读