说起分布式文件管理系统,大家可能很容易想到 HDFS、GFS 等系统,前者是 Hadoop 的一部分,后者则是 Google 提供的分布式文件管理系统。除了这些之外,国内淘宝和腾讯也有自己的分布式文件管理系统,都叫 TFS(Taobao File System 和 Tencent File System)。
相对于上面提到的这些分布式文件管理系统而言,FastDFS 可能离我们 Java 工程师更近一些,因为文件上传这个功能太常见了,而想要搭建独立的分布式文件管理系统,FastDFS+Nginx 组合无疑是最佳方案。因此,松哥今天就来和大家简单聊一聊这个问题。
如果小伙伴们还不懂在传统的开发环境下如何进行文件上传,可以参考松哥之前发的文件上传教程:
Spring Boot + Vue,手把手教你做文件上传
1.什么是 FastDFS 1.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 架构包括 Tracker 和 Storage 两部分,看名字大概就能知道,Tracker 用来追踪文件,相当于是文件的一个索引,而 Storage 则用来保存文件。
我们上传文件的文件最终保存在 Storage 上,文件的元数据信息保存在 Tracker 上,通过 Tracker 可以实现对 Storage 的负载均衡。
Storage 一般会搭建成集群,一个 Storage Cluster 可以由多个组构成,不同的组之间不进行通信,一个组又相当于一个小的集群,组由多个 Storage Server 组成,组内的 Storage Server 会通过连接进行文件同步来保证高可用。
2.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/local tar -zxvf V1.0.43.tar.gz cd libfastcommon-1.0.43/ ./make.sh ./make.sh install3.一个安装包
接下来我们下载 Tracker,注意,由于 Tracker 和 Storage 是相同的安装包,所以下载一次即可(2.2 小节中不用再次下载)。
安装文件可以从 FastDFS 的 GitHub 仓库上下载,下载地址:https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
考虑到 GitHub 访问较慢,松哥已经把安装文件下载好了,放在百度网盘上,小伙伴们可以在松哥公众号后台回复 fastdfs 获取下载链接。
下载成功后,将下载文件拷贝到 /usr/local 目录下,然后依次执行如下命令安装:
cd /usr/local tar -zxvf V6.06.tar.gz cd fastdfs-6.06/ ./make.sh ./make.sh install安装成功后,执行如下命令,将安装目录内 conf 目录下的配置文件拷贝到 /etc/fdfs 目录下:
cd conf/ cp ./* /etc/fdfs/4.配置
接下来进入 /etc/fdfs/ 目录下进行配置:
打开 tracker.conf 文件:
vi tracker.conf修改如下配置: