分布式文件系统 - FastDFS
别问我在哪里
也许我早已不是我自己,别问我在哪里,我一直在这里。
突然不知道说些什么了...
初识 FastDFS
记得那是我刚毕业后进入的第一家公司,一个技术小白进入到当时的项目组后,在开发中上传用户头像调用了一个据说是叫 FastDFS 的东西,我并不懂是什么,只知道是一个文件服务器,据说还是在 Linux 上部署的,还是多台服务器什么的,还是切片存储、说京东用的就是,反正很厉害的样子,我其实并接触不到这玩意儿,我的任务也只是调用大神们封装好的接口就行了,这可能是我第一次和 FastDFS 的第一次亲密接触。
后来不知道为什么,当时的文件服务器老是出问题,每次图片下载不下来我就低声下气的去找运维说:文件又下载不了了,老大让你重启一下 Storage 服务器
。这时候我也并不知道 Storage服务器
是什么鬼,反正就好像项目一出问题都是程序猿的错,真特么的!!!
FastDFS is an open source high performance distributed file system (DFS). It's major functions include: file storing, file syncing and file accessing, and design for high capacity and load balance.
翻译:FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。
这是余庆老师在他的 Github 上介绍关于 FastDFS 这个开源项目的描述。说的很明白了,这是一个高性能的轻量级开源分布式文件系统,解决了我们日常项目中众所周知的文件存储性能问题,几乎适合市面上所有项目使用,据说好多家你知道的大公司也在使用,甚至你使用的各大网盘公司也在使用(尽管最近多家网盘公司关闭了),反正就是特别好用。感谢余庆老师对开源世界的无私奉献,这是余老师的 GitHub 地址: https://github.com/happyfish100/fastdfs
试着简单了解一下
大家都在用,肯定错不了。正好最近公司想搭建自己的文件服务器,好像据说是原来用的七牛产生了巨额流量费用,领导安排了解一下这个开源分布式文件系统。了解一个东西,我们就要进入她的内部,人也一样。那我们首先来看一下他的内部是怎么工作或者说设计的吧!
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和
客户端(Client)。
-
Tracker Server: 跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server
和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。 - Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
- Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
这里免不了放一张余庆老师介绍 FastDFS 的 PPT 中的一张架构图,清晰的说明了上述职责及关系:
上述架构优点:1.高可靠性:无单点故障 2.高吞吐性:只要 Group 足够多,数据流量将足够分散。
那么怎么上传下载以及同步文件这么操作呢?我在这就不详细说全部流程了,大概上传流程就是客户端发送上传请求到Tracker Server
服务器,接着Tracker Server
服务器分配group
和Storage Server
,当然这是有一定规则的,选择好Storage Server
后再根据一定规则选择存储在这个服务器会生成一个file_id
,这个file_id
包含字段包括:storage server ip、文件创建时间、文件大小、文件 CRC32 校验码和随机数;每个存储目录下有两个 256 * 256 个子目录,后边你会知道一个Storage Server
存储目录下有好多个文件夹的,storage 会按文件file_id
进行两次 hash ,路由到其中一个子目录,然后将文件存储到该子目录下,最后生成文件路径:group 名称、虚拟磁盘路径、数据两级目录、file_id和文件后缀就是一个完整的文件地址。
可能我理解的也不是很彻底,下载、同步操作我不写了,这里有一篇文章 分布式文件系统FastDFS设计原理 讲解的很详细,我就不班门弄斧了,大家可以点击去看看。
下面我要做什么?
接下来我可能会安装配置一下 FastDFS 服务,试着搭建一个分布式文件服务器,我试着把整体的详细步骤都记录下来,对以后项目中使用做技术储备或者说让自己以后翻起来也简单一些。可能有时候说不定就帮助到你了...
我的搭建环境是:
- 操作系统: CentOS 7 或 CentOS 6.8
- FastDFS: fastdfs-5.05 、 fastdfs-nginx-module-v1.16 、 libfastcommon-v1.0.7
- Nginx : nginx-1.10.1
应该都是截至目前最新版本了,可能和你网上能搜到的 4.05 、4.06 甚至 2.? 的版本步骤不一样,我大概会分下面两篇具体的文章来记录这个过程:
我保证这也行是目前 FastDFS 最新最稳定最简单坑最少的一个配置安装部署教程了。期间我也会把我踩的坑都放出来,我保证大家照着做就几乎不会有坑。其实我在写这篇文章的时候已经踩了好多坑了,哈哈...
总结一下
FastDFS 是一个由 C 语言实现的开源轻量级分布式文件系统,作者余庆(happyfish100),支持 Linux、FreeBSD、AID 等 Unix 系统,解决了大数据存储和读写负载均衡等问题,适合存储 4KB~500MB 之间的小文件,如图片网站、短视频网站、文档、app 下载站等,UC、京东、支付宝、迅雷、酷狗等都有使用。
再次感谢余庆老师对开源世界的无私奉献,这是余老师的 GitHub 地址: https://github.com/happyfish100/