本文主要是介绍基于FastDfs的分布式文件存储系统设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS 架构
FastDFS 服务有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client).
tracker server: 跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳,Tracker 根据 storage 心跳信息,建立 group--->[storage server list]的映射表;tracker 管理的元数据很少,会直接存放在内存;tracker 上的元信息都是由 storage 汇报的信息生成的,本身不需要持久化任何数据,tracker 之间是对等关系,因此扩展 tracker 服务非常容易,之间增加tracker 服务器即可,所有 tracker 都接受 stroage 心跳信息,生成元数据信息来提供读写服务(与其他 Master-Slave 架构的优势是没有单点,tracker 也不会成为瓶颈,最终数据是和一个可用的storage Server 进行传输的)。
storage server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以包含多台 storage server,数据互为备份,存储容量空间以 group 内容量最小的 storage 为准;建议 group 内的 storage server 配置相同;以 group 为单位组织存储能够方便的进行应用隔离、负载均衡和副本数定制;缺点是 group 的容量受单机存储容量的限制,同时 group 内机器坏掉,数据恢复只能依赖 group 内其他机器重新同步(坏盘替换,重新挂载重启 fdfs_storaged 即可)。
多个 group 之间的存储方式有 3 种策略:round robin(轮询)、load balance(选择最大剩余空间的组上传文件)、specify group(指定 group 上传)
group 中 storage 存储依赖本地文件系统,storage 可配置多个数据存储目录,磁盘不做 raid,直接分别挂载到多个目录,将这些目录配置为 storage 的数据目录即可。
storage 接受写请求时,会根据配置好的规则,选择其中一个存储目录来存储文件;为避免单个目录下的文件过多,storage 第一次启时,会在每个数据存储目录里创建 2 级子目录,每级 256 个,总共 65536 个,新写的文件会以 hash 的方式被路由到其中某个子目录下,然后将文件数据直 接作为一个本地文件存储到该目录中
FastDFS 工作流程
(1)上传
选择 tracker server
集群中 tracker 之间是对等关系,客户端在上传文件时可用任意选择一个 tracker选择存储 group
(2)下载
基于fastdfs的集群
(1)架构
应用服务器是lnmp的环境,同时也在应用服务器的安装部署fastdfs,但是是作为tricker跟踪点,同时也必须安装fastdfs的php的api扩展,即php_client。在/etc/fdfs/client.conf是客服端程序,这个与php.ini有着关系,需要正确配置,简单地说,php的扩展函数是通过这个client.conf文件将php与tracker联系在一起。然后就是fastdfs的tracker与storage之间再通信,最后是php和storage建立通信关系,并进行数据传输(也就是上面提到的fastdfs的工作流程原理)。
storage的分组集群:
每一台服务器都单独安装fastdfs的文件服务器,同时也安装nginx和nginx_fastdfs_modul模块,这个nginx主要是用于http的访问,特别是用于下载服务,而nginx_fastdfs_modul这个模块主要是为了避免同步复制还没复制完成就访问同组备份服务器文件,这肯定会产生错误的,所以加入nginx_fastdfs_modul这个模块可以避免这种同步延迟的问题,如果http访问找不到文件,那么tracker就会重新访问文件的源服务器。
组与组之间的服务器是相互独立的,没有任何的关系。但组内的各个服务器是可以相互通信的,主要是热备文件,文件之间同步复制,所以组内的各个服务器即storage服务器存的数据是相同的。但是组内的每一台服务器容量是已组内最小的那一台作为基准,索引建议组内的服务器的容量配置相同。
当一个组内的容量最小的那一台服务器的存储容量几乎达到瓶颈时,一般fastdfs会预留4GB左右吧。这时再往组内存储文件已经是不能的了,必须横向扩展存储,即添加组,增加storage服务器。当再上传大文件时,tracker就会通过选择一个组来存储文件,规则:
这篇关于基于FastDfs的分布式文件存储系统设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!