分布式文件系统 - 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服务器分配groupStorage 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/

 
分类: FastDFS

分布式文件系统 - FastDFS的更多相关文章

  1. 【架构设计】分布式文件系统 FastDFS的原理和安装使用

    本文地址 分享提纲: 1.概述 2. 原理 3. 安装 4. 使用 5. 参考文档 1. 概述 1.1)[常见文件系统] Google了一下,流行的开源分布式文件系统有很多,介绍如下:   -- mo ...

  2. 网站文件系统发展&&分布式文件系统fastDFS

    网站文件系统发展 1.单机时代的图片服务器架构 初创时期由于时间紧迫,开发人员水平也很有限等原因.所以通常就直接在website文件所在的目录下,建立1个upload子目录,用于保存用户上传的图片文件 ...

  3. 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署

    少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...

  4. 分布式文件系统 - FastDFS 简单了解一下

    别问我在哪里 也许我早已不是我自己,别问我在哪里,我一直在这里. 突然不知道说些什么了... 初识 FastDFS 记得那是我刚毕业后进入的第一家公司,一个技术小白进入到当时的项目组后,在开发中上传用 ...

  5. 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试

    也不说废话,直接干 上一篇 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 中安装了 FastDFS 后,并配置启动了 Tracker 和 Storage 服务,已经可以上传文件 ...

  6. [转]分布式文件系统FastDFS架构剖析

    [转]分布式文件系统FastDFS架构剖析 http://www.programmer.com.cn/4380/ 文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实 ...

  7. 分布式文件系统FastDFS设计原理

    原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ...

  8. 分布式文件系统 FastDFS Ceph

    分布式文件系统 FastDFS Cephhttp://www.oschina.net/p/fastdfshttp://www.oschina.net/p/ceph FastDFS 的 Go 客户端 f ...

  9. 分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)——第一篇

    分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)--第一篇 简介 首先简单了解一下基础概念,FastDFS是一个开源的轻量级分布式文件系统,由 ...

随机推荐

  1. VS平台工具集版本

    参考:http://blog.csdn.net/hillseas/article/details/47373313 VS从2010之后开始支持使用之前的版本进行编译,可以在工程属性->常规中进行 ...

  2. 获得自动增长的MySQL主键

    下面的脚本教您如何获得自动增长的MySQL主键,如果您对MySQL主键方面感兴趣的话,不妨一看,相信对您学习MySQL主键方面会有所启迪. import java.sql.Connection; im ...

  3. poj动态规划列表

    [1]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 13 ...

  4. Laravel 清空配置缓存

    清空配置缓存 php artisan cache:clear php artisan config:clear

  5. 微信内置浏览器中,点击下拉框出现页面乱跳转现象(iphone)

    微信内置浏览器中,点击下拉框出现页面乱跳转现象(iphone) 前言: 这是小菜博客的第三篇文章.一直认为自己可以表达的东西太过简单,难以上台面,总是吝啬地不肯写.就算是写,也不知道从何开始.在同事的 ...

  6. ANDROID内存优化——大汇总(转)

    原文作者博客:转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! ANDROID内存优化(大汇总——上) 写在最前: 本文的思路主要借鉴了20 ...

  7. HTML之背景颜色的改变

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 应该始终以PreparedStatement代替Statement

    在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement 一.代码的可读性和可维护性.虽然 ...

  9. WCF之事务

    2阶段提交协议. 事务先提交给协调者,由协调者分发给各个RM,在一段规定的时间后.由RM询问各个RM是否提交还是终止操作.RM根据自己的状态来决定提交/终止.协调者根据RM的结果,决定操作的提交/终止 ...

  10. (转)LR监控Linux系统性能计数器详解

    从LR里面add measurement,填写linux机器的IP,出现所有unix/linux的计数器,包括cpu的,mem的,disk,network的.这里介绍几个常用的: (对于如何监控Lin ...