当前位置: 首页 > Linux

分布式文件存储FastDFS

时间:2023-04-06 21:17:30 Linux

一、简介FastDFS是由淘宝开发平台部高级架构师余庆开发的。它是一个轻量级、高性能的开源分布式文件系统(DistributedFileSystem),采用纯C语言开发,包括文件存储、文件同步、文件访问(上传、下载)、访问负载均衡、在线扩展,并且只有一个相同内容的副本,适用于需要大容量存储的应用程序或系统。对文件进行管理,充分考虑冗余备份、负载均衡、线性扩展等机制,关注高可用、高性能等指标。解决了海量存储和负载均衡的问题。特别适用于中小文件(推荐范围:4KB[storageserverlist]的映射表。跟踪器需要管理的元信息非常少,所有这些都将存储在内存中;另外tracker上的元信息是由storage上报的信息生成的,不需要持久化任何数据,这使得tracker非常容易扩展,直接增加tracker的机器就可以扩展服务作为跟踪器集群。集群中的每个跟踪器都是完全平等的。所有Tracker接收存储的心跳信息,生成元数据信息,提供读写服务。跟踪器充当访问时的负载平衡器。可随时添加或下线,不影响在线服务。存储节点(storage)存储系统(Storageserver)是以组(或卷)为单位组成的。一个组包含多台存储机,数据相互备份,存储空间以组内容量最小的存储为准。存储节点中的服务器可以随时添加或下线,不影响在线服务。客户端(client)客户端(client)作为业务请求的发起者,使用TCP/IP协议,通过专有接口与tracker服务器或存储节点交换数据。3.FastDFS的存储策略为了支持大容量,存储系统由一个或多个卷组成,卷与卷之间的文件相互独立。所有卷的累计文件容量就是整个存储系统的文件容量。一个卷可以由一个或多个存储服务器组成。一个卷下的存储服务器中的文件都是一样的(现有文件的同步会由系统自动同步),该卷下的多台存储服务器是冗余的。备份和负载均衡的作用。向卷中添加服务器时,系统会自动完成现有文件的同步。同步完成后,系统自动切换新服务器上线提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。您只需添加一台或多台服务器并将其配置为一个新的卷,从而扩展存储系统的容量。4、FastDFS文件同步写入时,客户端将文件写入到组内的存储服务器中,即文件写入成功。存储服务器写完文件后,后台线程会将文件同步到同组的其他存储服务器。每个存储写入一个文件后,会同时写入一个binlog。binlog不包含文件数据,只包含文件名等元信息。这个binlog用于后台同步。存储会记录同步到组内其他存储的进度,以便重启后可以继续同步上次的进度;进度以时间戳的形式记录,所以最好保证集群中所有服务器的时钟保持同步。存储的同步进度将作为元数据的一部分报告给跟踪器,跟踪器在选择读取存储时将以同步进度作为参考。这样就避免了在文件同步完成之前访问不存在的文件的问题,即tracker会告诉client去访问执行存储的storage。5、FastDFS整体流程图客户端发起请求,被跟踪器(tracker,master)处理,查询可用存储(storage),返回客户端存储的ip和端口;客户端根据ip和端口访问存储完成上传图片等服务;成功后返回地址,如:group1/M00/00/01/wKgBwFkueeWAU81OAADxa3SgCic420.png6.结合keepalivedkeepalived概念keepalived是基于VRRP(VirtualRouterRedundancyProtocol)协议,即虚拟路由冗余协议,实现路由器高可用协议。工作原理Keepalived的作用是检测服务器的状态。如果Web服务器宕机或工作失败,Keepalived将检测到它并将故障服务器从系统中移除。同时,其他服务器将被用来代替服务器的工作。当服务器正常工作时,Keepalived会自动将服务器添加到服务器组中。所有这些任务都是自动完成的,无需人工干预。需要手动完成的就是修复故障服务器。选举系统由N台功能相同的路由器组成一个路由器组。该组中有一主多备。master有一个对外提供服务的vip(路由器所在局域网内其他机器的默认路由就是这个vip),master会发送组播。当backup收不到vrrp包时,就会认为master宕机了。这时候就需要根据VRRP的优先级选举出一个backup作为master。这样就可以保证路由器的高可用性。主从模式Keepalived通过请求vip实现请求真实IP地址的功能,当一台机器出现故障时VIP可以自动漂移到另一台机器上,从而实现高可用。一主多从模式:当前架构中只允许有一个master,其他都是backup。当backup接收不到vrrp报文时,会根据权重选举出一个backup来代替master。master恢复失败后,重新收回master。7、FastDFS插件fastdfs-nginx-module:在大部分业务场景中,往往需要为存储在FastDFS中的文件提供http下载服务,而FastDFS虽然在其storage和tracker中内置了http服务,但是性能上不太满意;作者余青在以后的版本中增加了基于目前主流的web服务器(包括nginx/apache)的扩展模块,目的是利用web服务器直接对本地存储的数据文件提供http服务,提高文件下载表现。fastdfs_client_php:FastDFS的PHP扩展,用于与PHP交互。FastDFS+Keepalived+Nginx架构注意:不要使用kill-9命令强行杀死FastDFS进程,否则可能会丢失binlog数据。