13 分布式文件系统---数据结构算法fastdfs1fastdfs01-fastdfsfastdfs01讲义_第1页
13 分布式文件系统---数据结构算法fastdfs1fastdfs01-fastdfsfastdfs01讲义_第2页
13 分布式文件系统---数据结构算法fastdfs1fastdfs01-fastdfsfastdfs01讲义_第3页
13 分布式文件系统---数据结构算法fastdfs1fastdfs01-fastdfsfastdfs01讲义_第4页
13 分布式文件系统---数据结构算法fastdfs1fastdfs01-fastdfsfastdfs01讲义_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、下载FastDFS安装包下载Nginx安装包下载FastDFS与Nginx的整合模块分布式文件系统之FastDFS架构原理及安装能够理解互联网环境中文件存储的瓶颈有哪些?能够理解互联网环境中存储在服务器中的文件如何访问能够给别人说出来FastDFS架构的理解(会说、会安装、会使用)能够理解tracker server的作用能够理解storage server的作用及存储策略能够说出文件上传的流程能够说出文件下载的流程能够说出文件同步的原理能够完成tracker server的安装和storageserver的安装FastDFS是什么为什么使用FastDFS FastDFS可以做什么架构整体分析

2、Tracker Server Storage Server Client存储策略文件上传流程分析文件下载流程分析文件同步分析同组状态文件Mark文件 Binlog文件Storage server具体同步过程Storage状态收集新增Storage server分析下载需求安装tracker和storage安装tracker server配置storage server配置启动Tracker启动命令Storage启动命令Tracker开机自启动Storage开机自启动上传图片测试tracker.conf基本配置同步trunk 和 slot HTTP相关背景概要介绍FastDFS整合Nginx的参

3、考架构几个概念实现原理源码包说明初始化加载配置文件读取扩展模块配置加载服务端配置下载过程(重点) 解析访问路径防盗链检查获取文件元数据检查本地文件是否存在文件不存在的处理输出本地文件下载文件解压缩修改config文件(特别关键的一步)拷贝mod_fastdfs.conf修改mod_fastdfs.conf拷贝libfdfsclient.so(新版不需要)创建nginx/client目录下载文件安装第三方软件安装PCRE 安装ZLIB安装OPENSSL解压缩执行configure配置创建临时目录编译安装修改nginx.conf启动Nginx合并存储简介合并存储配置合并存储文件命名与文件结构合并存

4、储后fileid的变化 Trunk文件内部结构合并存储空闲空间管理概述TrunkServer TrunkFile同步 空闲平衡树重建TrunkBinlog压缩Tracker-Leader 选 择 TrunkServer描述Tracker -Leader选择TrunkServer时机Tracker-Leader选择TrunkServer的过程FastDFS主从文件应用背景解决办法Nginx生成缩略图 image_filter模块检测nginx模块安装情况安装步骤访问普通图片访问FastDFS图片Nginx Image 缩略图 模块安装nginx image模块访问普通图片访问FastDFS图片配

5、置参数说明将jar包install到maven仓库配置文件fdfs_client.conf编写测试代码location配置详解 rewrite语法FastDFS 是一个使用C编写的开源的高性能。它由开发平台部资深架构师开发。FastDFS孵化平台(ChinaUnix)版块/forum-240-1.html。互联网环境中的文件如何存储?(待完善)不能存储本地、互联网环境中的文件如何进行HTTP访问?(待完善) web服务器:Nginx、Apache等FastDFS为互联网量身定制,充分考虑了等机制,并注重等指标,使用FastDFS很容易搭建一套高性能

6、的文件服务器集群提供文件上传、下载等服务,功能包括:,解决了的问题。)为载体的在线文件服务。FastDFS特别(建议范围:注意事项:FastDFS存储的文件都是完整的一个独立文件,而HDFS是将一个大文件,进行切割,在每个存储节点中存储一块数据。FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。Tracker Server就是跟踪服务器,主要做调度工作,并对Storage Server起到负载均衡的作用;它负责管理所有的 storage server和 group,每个 storage 在启动后会连接

7、 Tracker,告知自己所属 group 等信息, 并保持周期性心跳。Tracker Server集群包含多台服务器,Storage Server就是存储服务器,主要提供容量和备份服务;Storage Server集群以 group 为单位,不同group之间互相独立,每个 group 内可以有多台 storage server,数据互为备份。比如上传文件时,可以由客户端直接指定上传到的组也可以由Tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系 统容量不足时,可以增加组来扩充存储容量(横向扩容)。注意事项:由于存储大小受

8、最小存储量的服务器决定,所以说呢,同一个组内的存储容量最好一样,否则就是 浪费空间。Client就是客户端,它会使用FastDFS提供的API完成文件的上传和下载等操作。其实说的也就是我们自己的项目所部署的服务器。,这种存储策略的特点如下:Storage Server集群采用了分组策略同组策略1、tracker server收集storageserver的状态信息2、选择tracker server1 storage server定时向已知的tracker server(可以是多个)发送磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息2 storage server会连接整个集群中所有的

9、Tracker server,向他们报告自己的状态。1 同一个卷下的多个存储服务器中的【文件都是相同】的。2 同一个卷下的多个存储服务器中的文件,会由线程完成【文件同步】。3 同组策略的好处就是【冗余备份】和【负载均衡】的作用。1 卷与卷之间的文件是【相互独立】的。2 整个存储系统中的【文件容量】就是所有卷的【文件容量累加】。3 分组策略的优势就是【扩容】,【扩容】的方式就是【添加新卷】。3、选择存储的group4、选择storageserver5、选择storagepath6、生成文件名7、选择两级目录(两级目录啥时候创建的?)8、生成fileid1当文件存储到某个子目录后,即认为该文件存储

10、成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、文件名、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。1当选定存储目录之后,storage会为文件分配一个fileid,每个存储目录下有两级256*256的子目录,storage会按文件名称进行两次hash,路由到其中一个子目录,然后将文件以fileid为文件名存储到该子目录下。1选定存储目录之后,storage会为文件生一个文件名称,由源storage server ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成,然后将这个二进制串进行base64编码,转换为可打印的字符串。1 当分

11、配好storageserver后,客户端将向storage发送写文件请求,storage将会为文件分配一个数据存储目录, 支持如下规则(在storage配置文件可以通过配置store_path*参数来设置,该参数可以设置多个,通过*来区别):2 1. Round robin,多个存储目录间轮询3 2. 剩余存储空间最多的优先1 当选定group后,tracker会在group内选择一个storage server给客户端,支持如下选择storage的规则:2 1. Round robin,在group内的所有storage间轮询3 2. First server ordered by ip,按

12、ip排序4 3. First server ordered by priority,按优先级排序(优先级在storage上配置)1 当tracker接收到uploadfile的请求时,会为该文件分配一个可以存储该文件的group,支持如下选择group的规则:2 1. Round robin,所有的group间轮询3 2. Specified group,指定某一个确定的group4 3. Load balance,剩余存储空间多的group优先1当集群中不止一个trackerserver时,由于tracker之间是完全对等的关系,客户端在upload文件时可以任意选择一个trakcer。客户

13、端upload file成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。1、tracker server收集storage server的状态信息2、选择tracker server3、选择可用的storage serverclient发送download请求给某个tracker,必须带上文件名信息,tracker从文件名中解析出文件的group、路径信息、文件大小、创建时间、源storage server ip等信息,然后为该请求选择一个storage用来服务读请求。 由于group内的文件同步是在异步进行的,所以有可能出现在读的时候,文件还没有同步

14、到某些storage server上,为了尽量避免访问到这样的storage,tracker按照如下规则选择group内可读的storage:1 1. 该文件上传到的源头storage - 源头storage只要存活着,肯定包含这个文件,源头的地址被编码在文件名中。2 2. 文件创建时间戳=storage被同步到的时间戳 且(当前时间-文件创建时间戳) 文件同步最大时间(如5分钟)- 文件创建后,认为经过最大同步时间后,肯定已经同步到其他storage了。3 3. 文件创建时间戳 同步延迟阀值(如一天)。 - 经过同步延迟阈值时间,认为文件肯定已经同步了。1跟upload file一样,在do

15、wnload file时客户端可以选择任意tracker server。1storage server会连接整个集群中所有的Tracker server,会向他们定时报告自己的状态:磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息客户端将文件写至group内一个storage server即认为,storage server写完文件后,会在开启独立线程去完成文件同步,如果组内有三个Storage Server,那么每台都应该开启两个独立线程。当一个文件上传成功后,客户端马上发起对该文件下载请求(或删除请求)时,tracker是如何选定一个适用 的存储服务器呢?其实每个存储服务器都需要定时

16、将自身的信息上报给tracker,这些信息就包括了本地同步时间(即,同步到 的最新文件的时间戳)。而tracker根据各个存储服务器的上报情况,就能够知道刚刚上传的文件,在该存储组中是否已完成了同步。在storage server中这些信息是以Binlog文件的形式存在的。当Storaged server启动时会创建一个Storaged server之间的同步状态文件,如:同步目录,该目录中的文件都是和同组内的其它文件说明:binlog.index 记录当前使用的binlog文件序号,如为10,则表示使用binlog.010binlog.100 真实地binlog文件_3

17、3450.mark 同步状态文件,记录本机到_33450的同步状态在Mark文件中内容:由和两项组成。Binlog文件内容:在该文件中是以binlog日志组成,比如:1 以_33450.mark为例,其中binlog_index表示上次同步机器的最后一条binlog文件索引,binlog_offset表示上次同步机器的最后一条binlog偏移量,如果程序重启了,也只要从这个位置开始向后同步。1_33450.mark _33450.mark binlog.000 b

18、inlog.index1 1. 只在本组内的storage server之间进行同步;2 2. 源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;3 3. 同步采取push方式,即源服务器同步给同组其他服务器;4 4. 上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。其中的每一条记录都是使用空格符分成三个字段,分别为:第一个字段 表示文件upload时间戳 如:1470292943第二个字段 表示文件执行操作,值为下面几种(其中源表示客户端直接操作的那个Sto

19、rage即为源,其他的Storage都为副本)第三个字段 表示文件 如M00/03/61/QkIPAFdQCL-AQb_4AAIAi4iqLzk223.jpg从fastdfs文件同步原理中我们知道Storaged server之间的同步都是由一个独立线程负责的,这个线程中的所有操作都是以同步方式执行的。比如一组服务器有A、B、C三台机器,那么在每台机器上都有两个线程负责同步,如A机器,线程1负责同步数据到B,线程2负责同步数据到C。每个同步线程负责到一台Storage的同步,以阻塞方式进行。以IP为的Storaged severe的服务器为例,它的同步目录下有 等文件,现

20、在Storaged severe将会向ip为的Storagedsevere的存储里面同步数据。1) 打开对应Storage server的mark文件,如负责到的同步则打开_33450.mark文件,从中读取binlog_index、binlog_offset两个字段值,如取到值为:100、1000,那么就打开 binlog.100文件,seek到1000这个位置。2) 进入一个while循环,尝试着读取一行,若读取不到则睡眠等待。若读取到一行,并且该行的操作方式为源操作,如C、A、D、T(大写的都是),则将该行指定的操作同步给

21、对方(非源操作不需要同步),同步成功后更新binlog_offset标志,该值会定期写入到_33450.mark文件之中。同步过程中可能因为同步较为缓慢,导致可能在同步一个文件之前,文件已经被客户端删除,此时同步线程将打印一条日志,然后直接处理后面的Binlog。1C表示源创建、c表示副本创建23A表示源追加、a表示副本追加45D表示源删除、d表示副本删除67T表示源Truncate、t表示副本Truncate1 1470292943 c M00/03/61/QkIPAFdQCL-AQb_4AAIAi4iqLzk223.jpg2 1470292948 C M00/03/6

22、3/QkIPAFdWPUCAfiraAAG93gO_2Ew311.png3 1470292954 d M00/03/62/QkIPAFdWOyeAO3eUAABvALuMG64183.jpg4 1470292959 C M00/01/23/QUIPAFdVQZ2AL_o-AAAMRBAMk3s679.jpg5 1470292964 c M00/03/62/QkIPAFdVOsCAcxeQAAGTdbQsdVs062.jpg6 1470292969 c M00/03/62/QkIPAFdVOnKAXu1NAABq9pkfsms63.jpeg7 1470293326 D M00/03/62/QkI

23、PAFdVMnGAZYSZAABq9pkfsms33.jpegStorage Server会通过配置连接集群中所有的Tracker Server,定时向他们报告自己的状态,包括。storage server有7个状态,如下:当storage server的状态为F时,此时该storage server向trackerserver发起一次heart beat时,tracker server将其状态更改为FDFS_STORAGE_STATUS_ACTIVE 。组内新增加一台storage server A时,由系统自动完成已有数据同步,处理逻辑如下:1.storage server A连接tracker server,tracker server将storage server A的状态设置为。storage server A询问【追加同步】的源服务器和【追加同步】截止时间点如果该组内只有storage server A或该组内已成功上传的文件数为0,则没有数据需要同步,storage server A就可以提供在线服务,此时tracker将其状态设置为否则tracker server将其状态设置为,进入第二步的处理;2.假设tracker server分配向storage server A同步已有数据的源storage server为B。同组的s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论