分布式存储系统FastDFS.docx
《分布式存储系统FastDFS.docx》由会员分享,可在线阅读,更多相关《分布式存储系统FastDFS.docx(16页珍藏版)》请在三一办公上搜索。
1、分布式存储系统FastDFSl. FastDFS 原理1.1功能简介FastDFS是一个开源的轻量级分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、 文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体 的在线服务,如相册网站、视频网站等等。1.2适用的业务场景1. 存储后不做改动;2. 视频或其他文件的断点存取;3. 存储文件的关系度不复杂(如果跟统计项目类似存储文件间关系复杂则不适用);4. 存储总量预计在500Tb范围内的应用。1.3系统基本结构特征1.2.1轻量级FastDFS服务端只有两个角色:跟踪器(tracker)和存储节点(s
2、torage)。跟踪器主要做调度工 作,在访问上起负载均衡的作用。存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文 件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair) 方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属 性列表,可以包含多个键值对。1.2.2分组方式为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或 多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储
3、系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相 同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。在卷中增加服务器时,同步 已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配 置为一个新的卷,这样就扩大了存储系统的容量FastDFS中的文件标识分为两个部分:卷名和 文件名,二者缺一不可。1.2.3跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时 增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都
4、是对等的,可以根据服务器的压力情况随时增加或减少ClientTracker clusterT racker 2Tracker 1Storage cl ListerCl 心1 口IVClient 1Client MStorage server 1XStorage server I 1Storage senrer 12Vokiiiie 1Volume 2Volume KStoi age server 2YStorage server KZ i jawStorage server 21Storage server K1Storage server 22W IStorage server K2 I I
5、0J&H aTracker N2,上传迁接请求*1.定时向tracker上传状态信息I3.皆询可用storage j4.返M信息(storage的ip和旅口)5.上传文件(file content和 metadata)5.6 .将上传内容写入磁盘上传文件交互过程:(1)client询问tracker上传到的storage,不需要附加参数;(2)tracker 返回一台可用的 storage;(3)client直接和storage通讯完成文件上传。1.5 FastDFS下载文件T nicker1.定时向tracker上传状态信息2.上传连接请求5!* 1 2 36.返回f ile_content
6、1.6 Http方式下载文件1.5.1 方式一 tracker 跳转1.5.2方式二非tracker跳转(l) redirect11web server on storage server Arweb seiwer on server B1lilc LKL including group iflrne and Ilk 口湖状Ifile content!exists)file not exiirIredired io sourc亡 storage web serverfile pRL including group name and Hie name(2) proxyBrowserI file
7、LKL including group name and fik name1.7 FastDFS文件名策略FastDFS中的文件名是在向StorageServer存储文件时由系统指定的,文件名中包含了 VolumelD和 FilelD。也就是说,当客户要读取某个文件时,通过在客户端对文件名进行解析,就可以知道该文件 存储在哪个Volume上和它在StorageServer中的FilelD。但是此时用户还不能读取文件,因为他 不知道Volume内各个StorageServer的ip地址,也不知道应该从Volume内的哪个StorageServer 中读取。所以用户需手持欲访问的文件的Volume
8、lD向TrackerServer询问,TrackerServe会均衡当 前各StorageServer的IO负载状况,返回一个最佳的StorageServer的ip地址。最后用户与该 StorageServer连接,出示欲访问文件的FileID,StorageServer上会维持一个FileID对应偏移量的 表,从而得到欲访问文件的偏移量。I /组名磁盘弓日录I/文件名IIgroupl/M00/00/0C/wKjRbExx2K0AAAAAAAANiSQUgyg37275.h文件名包含:源头storage IP地址和文件创建时间戳、文件大小、随机数、文件拓展名FastDFS的文件名策略将文件存储
9、位置信息隐含在文件名中,从而减少了元数据量,达到了优化小文 件存储性能的作用。1.8FastDFS同步机制在FastDFS的服务器端配置文件中,bind_addr这个参数用于需要绑定本机IP地址的场合。只有这个 参数和主机特征相关,其余参数都是可以统一配置的。在不需要绑定本机的情况下,为了便于管理和维护, 建议所有tracker server的配置文件相同,同组内的所有storage server的配置文件相同。tracker server的配置文件中没有出现storage server,而storage server的配置文件中会列举出所有 的 tracker server。这就决定了 st
10、orage server 和 tracker server 之间的连接由 storage server 主动发起, storage server为每个tracker server启动一个线程进行连接和通讯。tracker server会在内存中保存storage分组及各个组下的storage server,并将连接过自己的storage server及其分组保存到文件中,以便下次重启服务时能直接从本地磁盘中获得storage相关信息。storage server会在内存中记录本组的所有服务器,并将服务器信息记录到文件中。tracker server和storage server 之间相互同步s
11、torage server列表:1. 如果一个组内增加了新的storage server或者storage server的状态发生了改变,tracker server都会 将storage server列表同步给该组内的所有storage server。以新增storage server为例,因为新加入的 storage server主动连接tracker server,tracker server发现有新的storage server加入,就会将该组内所 有的storage server返回给新加入的storage server,并重新将该组的storage server列表返回给该组内的
12、其他 storage server;2. 如果新增加一台 tracker server,storage server 连接该 tracker server,发现该 tracker server 返回的 本组storage server列表比本机记录的要少,就会将该tracker server上没有的storage server同步给该 tracker server。同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上 进行。文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器。 以
13、文件上传为例,假设一个组内有3台storage server A、B和C,文件F上传到服务器B,由B将文件F 同步到其余的两台服务器A和C。我们不妨把文件F上传到服务器B的操作为源头操作,在服务器B上的 F文件为源头数据;文件F被同步到服务器A和C的操作为备份操作,在A和C上的F文件为备份数据。 同步规则总结如下:1. 只在本组内的storage server之间进行同步;2. 源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;3. 上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有 的所有数据(包括源头数据和备份数
14、据)同步给该新增服务器。storage server有7个状态,如下:# FDFS_STORAGE_STATUS_INIT:初始化,尚未得到同步已有数据的源服务器# FDFS_STORAGE_STATUS_WAIT_SYNC等待同步,已得到同步已有数据的源服务器# FDFS_STORAGE_STATUS_SYNCING :同步中# FDFS_STORAGE_STATUS_DELETED :已删除,该服务器从本组中摘除(注:本状态的功能尚未实现)# FDFS_STORAGE_STATUS_OFFLINE :离线# FDFS_STORAGE_STATUS_ONLINE :在线,尚不能提供服务# F
15、DFS_STORAGE_STATUS_ACTIVE:在线,可以提供服务当 storage server 的状态为 FDFS_STORAGE_STATUS_ONLINE 时,当该 storage server 向 tracker server 发起一次 heart beat 时,tracker server 将其状态更改为 FDFS_STORAGE_STATUS_ACTIVE。组内新增加一台storage server A时,由系统自动完成已有数据同步,处理逻辑如下:1. storage server A 连接 tracker server,tracker server 将 storage se
16、rver A 的状态设置为 FDFS_STORAGE_STATUS_INIT。storage server A询问追加同步的源服务器和追加同步截至时间点,如果 该组内只有storage server A或该组内已成功上传的文件数为0,则没有数据需要同步,storage server A 就可以提供在线服务,此时tracker将其状态设置为FDFS_STORAGE_STATUS_ONLINE,否则tracker server 将其状态设置为FDFS_STORAGE_STATUS_WAIT_SYNC进入第二步的处理;2. 假设tracker server分配向storage server A同步已
17、有数据的源storage server为B。同组的storage server和tracker server通讯得知新增了 storage server A,将启动同步线程,并向tracker server询问向 storage server A追加同步的源服务器和截至时间点。storage server B将把截至时间点之前的所有数据同 步给storage server A;而其余的storage server从截至时间点之后进行正常同步,只把源头数据同步给 storage server A。到了截至时间点之后,storage server B对storage server A的同步将由追加
18、同步切换为 正常同步,只同步源头数据;3. storage server B向storage server A同步完所有数据,暂时没有数据要同步时,storage server B请求 tracker server 将 storage server A 的状态设置为 FDFS_STORAGE_STATUS_ONLINE;4 当 storage server A 向 tracker server 发起 heart beat 时,tracker server 将其状态更改为 FDFS_STORAGE_STATUS_ACTIV E。2. FastDFS优缺点2.1优点分组存储,灵活简洁-对等结构,不
19、存在单点 文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server 和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块大中小文件均可以很好支持,支持海量小文件存储存储服务器上可以保存文件附加属性支持同一文件只保存一份,节约磁盘空间2.2缺点自带的http server端支持不足,storage扩展建议使用nginx需要客户端自行记录存储信息,增加了客户端的信息管理量由于安装的对等需求,所以在存储机制上存在木桶的短板原理,在服务器配置不统 一时不能很好的调节磁盘空间负载压力没有支持python的接口3.FastDFS
20、性能优化3.1提升磁盘IO性能的几个技巧目前磁盘都是机械方式运作的,主要体现在磁盘读写前寻找磁道的过程。磁盘自带的读写缓存大小, 对于磁盘读写速度至关重要。读写速度快的磁盘,通常都带有较大的读写缓存。磁盘的寻道过程是机械方 式,决定了其随机读写速度将明显低于顺序读写。在我们做系统设计和实现时,需要考虑到磁盘的这一特 性。FastDFS最初的实现,文件是按hash方式随机分布到多个目录中的,后来增加了顺序存放的做法。通 过对比测试,发现文件按目录顺序存储,写文件IO效率明显高于按目录随机存储。目前磁盘顺序读取的速度并不差,比如普通硬盘的IO可以达到每秒4060MB,好一些的硬盘可以达 到每秒10
21、0MB。在多进程或多线程并发读取磁盘的情况下,随着并发数的增加,磁盘IO效率将大大下降。 主要是因为每次读写,磁道可能存在较大的偏移,磁道寻址时间加大,导致磁盘IO性能急剧下降。对于这 种场景,优化方案是尽可能减少并发读写的进程数或线程数。可以用锁的机制,也可以采用专门的磁盘IO 线程来对磁盘进行读写。FastDFS 2.x版本,磁盘读写就采用了专门的线程来完成。1. 为了充分发挥多块磁盘的效率,不建议使用传统的RAID方式。比较好的做法是每块磁盘单独mount, 通过程序来控制对多块磁盘进行并发读写。采用单盘mount,文件的备份和冗余可以通过多台机器实 现。2. 文件数多了之后,比如达到上
22、千万个文件,当随机访问众多文件时,文件系统的性能会急剧下降。业 界流行的做法是将多个小文件合并存储到一个大文件中的方式来降低文件数。FastDFS 3.0支持将多个 小文件合并存储到一个较大文件中。3. 提升磁盘IO的另外一个技巧,一次尽可能多写入或多读取。也就是说,将程序的读写buffer设置得 尽可能大一些。例如日志或者redo log的写入,不是每次调用都直接写磁盘,而是先缓存到内存中, 等buffer满了再写入磁盘,也可以定时写入磁盘。4. 操作系统和C库函数通常会对写入的文件内容做缓存,以减少实际写文件的次数。直接调用系统函数 fsync或C函数fflush将使系统的缓存机制失效,此
23、时将强制把内容刷到磁盘上。除非必需,否则不要 执行强制刷盘操作。4.FastDFS服务端目录结构4.1服务器端tracker server目录及文件结构$base_path|data|storage_groups.dat:存储分组信息|storage_servers.dat:存储服务器列表|_logs|trackerd.log: tracker server 日志文件数据文件storage_groups.dat和storage_servers.dat中的记录之间以换行符(n)分隔,字段之间以西文 逗号(,)分隔。4.1.1 storage_groups.dat 中的字段依次为:(1) grou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分布式 存储系统 FastDFS
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5042985.html