`
soartju
  • 浏览: 247469 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分布式存储系统FastDFS手册之一简介及系统结构

阅读更多

注:本文内容来源于网络

 

1 功能简介
FastDFS是一个开源的轻量级分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存 储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
主页地址:http://code.google.com/p/fastdfs/
2 系统结构
2.1跟踪器与存储结点
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。
FastDFS系统结构如下图所示:



跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等 的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加 就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和 负载均衡的作用。在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。FastDFS中的 文件标识分为两个部分:卷名和文件名,二者缺一不可。

2.1.1 FastDFS上传文件


上传文件交互过程:
(1) client询问tracker上传到的storage,不需要附加参数;
(2) tracker返回一台可用的storage;
(3) client直接和storage通讯完成文件上传。

2.1.2FastDFS下载文件


下载文件交互过程:
(1) client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
(2) tracker返回一台可用的storage;
(3) client直接和storage通讯完成文件下载。
需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间 的调用。
2.2 服务器端目录结构
FastDFS服务器端运行时目录结构如下:
${base_path}
      |__data:存放数据文件
      |__logs:存放日志文件
其中,${base_path}由配置文件中的参数“base_path”设定。
2.2.1 tracker server结构
tracker server目录及文件结构:
${base_path}
    |__data
      |     |__storage_groups.dat:存储分组信息
      |     |__storage_servers.dat:存储服务器列表
        |__logs
             |__trackerd.log:tracker server日志文件
数据文件storage_groups.dat和storage_servers.dat中的记录之间以换行符(\n)分隔,字段之间以西文逗号(,)分 隔。
storage_groups.dat中的字段依次为:
(1) group_name:组名
(2) storage_port:storage server端口号

storage_servers.dat中记录storage server相关信息,字段依次为:
(1) group_name:所属组名
   (2) ip_addr:ip地址
   (3) status:状态
(4) sync_src_ip_addr:向该storage server同步已有数据文件的源服务器
(5) sync_until_timestamp:同步已有数据文件的截至时间(UNIX时间戳)
(6) stat.total_upload_count:上传文件次数
(7) stat.success_upload_count:成功上传文件次数
(8) stat.total_set_meta_count:更改meta data次数
(9) stat.success_set_meta_count:成功更改meta data次数
(10) stat.total_delete_count:删除文件次数
(11) stat.success_delete_count:成功删除文件次数
(12) stat.total_download_count:下载文件次数
(13) stat.success_download_count:成功下载文件次数
(14) stat.total_get_meta_count:获取meta data次数
(15) stat.success_get_meta_count:成功获取meta data次数
(16) stat.last_source_update:最近一次源头更新时间(更新操作来自客户端)
(17) stat.last_sync_update:最近一次同步更新时间(更新操作来自其他storage server的同步)

2.2.2 storage server
storage server目录及文件结构:
${base_path}
    |__data
    |     |__.data_init_flag:当前storage server初始化信息
    |     |__storage_stat.dat:当前storage server统计信息
    |     |__sync:存放数据同步相关文件
    |     |     |__binlog.index:当前的binlog(更新操作日志)文件索引号
    |     |     |__binlog.###:存放更新操作记录(日志)
    |     |     |__${ip_addr}_${port}.mark:存放向目标服务器同步的完成情况
    |     |
    |     |__一级目录:256个存放数据文件的目录,目录名为十六进制字符,如:00, 1F
    |           |__二级目录:256个存放数据文件的目录,目录名为十六进制字符,如:0A, CF
    |__logs
          |__storaged.log:storage server日志文件
.data_init_flag文件格式为ini配置文件方式,各个参数如下:
   # storage_join_time:本storage server创建时间;
# sync_old_done:本storage server是否已完成同步的标志(源服务器向本服务器同步已有数据);
# sync_src_server:向本服务器同步已有数据的源服务器IP地址,没有则为空;
# sync_until_timestamp:同步已有数据文件截至时间(UNIX时间戳);

storage_stat.dat文件格式为ini配置文件方式,各个参数如下:
# total_upload_count:上传文件次数
# success_upload_count:成功上传文件次数
# total_set_meta_count:更改meta data次数
# success_set_meta_count:成功更改meta data次数
# total_delete_count:删除文件次数
# success_delete_count:成功删除文件次数
# total_download_count:下载文件次数
# success_download_count:成功下载文件次数
# total_get_meta_count:获取meta data次数
# success_get_meta_count:成功获取meta data次数
# last_source_update:最近一次源头更新时间(更新操作来自客户端)
#last_sync_update:最近一次同步更新时间(更新操作来自其他storage server)

binlog.index中只有一个数据项:当前binlog的文件索引号

binlog.###,###为索引号对应的3位十进制字符,不足三位,前面补0。索引号基于0,最大为999。一个binlog文件最大为 1GB。记录之间以换行符(\n)分隔,字段之间以西文空格分隔。字段依次为:
(1)timestamp:更新发生时间(Unix时间戳)
(2)op_type:操作类型,一个字符
(3)filename:操作(更新)的文件名,包括相对路径,如:5A/3D/FE_93_SJZ7pAAAO_BXYD.S

${ip_addr}_${port}.mark:ip_addr为同步的目标服务器IP地址,port为本组storage server端口。例如:10.0.0.1_23000.mark。文件格式为ini配置文件方式,各个参数如下:
# binlog_index:已处理(同步)到的binlog索引号
# binlog_offset:已处理(同步)到的binlog文件偏移量(字节数)
# need_sync_old:同步已有数据文件标记,0表示没有数据文件需要同步
# sync_old_done:同步已有数据文件是否完成标记,0表示未完成,1表示已完成
   # until_timestamp:同步已有数据截至时间点(UNIX时间戳)
# scan_row_count:已扫描的binlog记录数
# sync_row_count:已同步的binlog记录数

数据文件名由系统自动生成,包括三部分:当前时间(Unix时间戳)、文件大小(字节数)和随机数。文件名长度为16字节。文件按照PJW Hash算法hash到65536(256*256,默认配置下)个目录中分散存储。

分享到:
评论

相关推荐

    基于SpringBoot结合分布式文件系统FastDFS实现的文件上传实例demo,可拿来直接嵌入到自己的系统中

    基于SpringBoot结合分布式文件系统FastDFS实现的文件上传实例demo,可拿来直接嵌入到自己的系统中 文件上传后的路径: group1/M00/00/43/wKgCYVwhkTOAUxZ1AGf8LohRDBw966.jpg 解读: 一、组名:文件上传后所在...

    分布式文件系统FastDFS架构剖析及配置优化

    ### 分布式文件系统FastDFS架构剖析及配置优化 #### FastDFS概述 FastDFS是一款开源的轻量级分布式文件系统,由纯C语言编写而成,适用于Linux、FreeBSD等UNIX系统环境。它并非一个通用的文件系统,而是设计用于...

    分布式文件系统FastDFS介绍

    #### 五、FastDFS系统架构 FastDFS的系统架构主要包括两个角色:TrackerServer和StorageServer。 - **TrackerServer**:负责调度和负载均衡,它在内存中记录集群中各个分组和存储服务器的状态信息。 - **Storage...

    分布式文件系统FastDFS 全套资料

    分布式文件系统FastDFS 全套资料

    FastDFS分布式存储实战 - FastDFS.pdf

    FastDFS分布式存储介绍

    分布式文件系统FastDFS搭建.pdf

    分布式文件系统FastDFS是一种用C语言编写、开源的分布式文件系统,专门为互联网应用量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,追求高可用和高性能的文件存储服务。FastDFS架构由Tracker服务器和...

    分布式文件系统FastDFS架构剖析.pdf

    FastDFS与现有的类似GoogleFS的分布式文件系统相比,其架构和设计理念具有独特之处,主要表现在以下三个方面:轻量级、分组方式和对等结构。 首先,轻量级是FastDFS的一个重要特点。FastDFS仅包含两个角色:Tracker...

    分布式文件系统 FastDFS 介绍PPT

    ### 分布式文件系统 FastDFS 介绍 #### 一、FastDFS 概述 FastDFS 是一款开源的轻量级...随着版本的不断更新和完善,FastDFS 在存储和管理大量文件方面的能力越来越强大,成为许多大型互联网项目的基础组件之一。

    分布式文件系统FastDFS架构剖析

    FastDFS是一个轻量级的开源分布式文件系统,由国人开发,特别适合以中小文件(如图片、文档等)为主的存储场景。FastDFS的主要设计目标是简单易用、高性能、高可用和高扩展性。 **FastDFS的核心特性** 1. **负载...

    分布式文件系统fastdfs的安装部署和使用

    分布式文件系统fastdfs的安装部署和使用 利用多台计算机协同解决单台计算机所不能解决的计算、存储等问题

    Linux下分布式文件系统FastDFS安装与配置

    Linux下分布式文件系统FastDFS安装与配置

    FastDFS分布式文件系统

    FastDFS是一款轻量级的开源分布式文件系统,它主要针对大容量文件存储和高并发访问的需求而设计。FastDFS能够实现文件的负载均衡,通过软件RAID的方式支持使用廉价的IDE硬盘进行存储,同时具备存储服务器在线扩容的...

    FastDFS 分布式存储 实战

    FastDFS是一个开源的轻量级分布式文件系统,主要用于解决大数据存储和读写负载均衡的问题。它的设计非常轻便,适合存储4KB到500MB大小的文件,尤其适用于图片网站、短视频网站、文档分享、应用下载等场景。与传统的...

    基于C语言的轻量级开源分布式文件系统FastDFS设计源码

    本项目为基于C语言的FastDFS轻量级开源分布式文件系统设计源码,总文件量为240个,其中包含66个C语言源文件、51个头文件、41个配置文件、10个Shell脚本、9个gzip压缩文件、6个ini配置文件、6个PHP脚本、5个Markdown...

    分布式文件系统FastDFS详解.docx

    总结来说,FastDFS作为一种高效的分布式文件系统,解决了传统单机文件系统在大规模场景下的诸多问题,提供了一种可靠、可扩展的文件存储解决方案,广泛应用于互联网企业,特别是对于需要处理大量小文件的场景。

    分布式文件系统FastDFS安装部署教程

    FastDFS是一个开源的轻量级分布式文件系统,它主要用于解决大容量存储和负载均衡问题。FastDFS针对互联网环境进行了优化设计,能够很好地处理冗余备份、负载均衡以及线性扩容等问题,特别适用于需要高性能和高可用性...

    分布式文件系统fastdfs架构剖析及配置优化

    FastDFS是一款开源的轻量级分布式文件系统 纯C实现,支持Linux、FreeBSD等UNIX系统 类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API 为互联网应用量身定做,解决大容量文件存储...

    分布式文件系统FastDFS技术整理.doc

    FastDFS分布式文件系统技术整理 1.1、了解基础概念 FastDFS是一种分布式文件系统,英文全称为Distributed ...FastDFS是一种高性能、高可用性和高可扩展性的分布式文件系统,广泛应用于文件上传、下载和存储等场景。

    FastDFS 文件分布式存储linux配置+javaDemo一个

    FastDFS是一款开源的高性能、轻量级的分布式文件系统,主要设计用于互联网场景下的大容量文件存储,尤其适合图片和视频等二进制大文件的存储。它具有高可用、高性能、轻量级、易于扩展等特点,能有效地解决大数据量...

Global site tag (gtag.js) - Google Analytics