fastdfs对象存储系统部署介绍

220 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

介绍

FastDFS是一款C语言实现的开源分布式文件系统,它不是系统级的分布式文件系统,而是应用级的分布式文件存储服务,即它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。

FastDFS只有两个角色:Tracker server和Storage server。

Tracker server作为中心结点,其主要作用是负载均衡和调度。Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息,占用的内存量很少。tracker之间互相独立,不存在直接联系。

Storage server直接利用OS的文件系统存储文件,其主动连接tracker,向后者报告状态,同时获得组内其他storager信息,并建立通信,同步。

FastDFS不会对文件进行分块存储,客户端上传的文件和Storage server上的文件一一对应。

文件ID由storage server指定,文件ID中包含了组名、文件相对路径和文件名,Storage server可以根据文件ID直接定位到文件,这也意味着fdfs不需要额外的文件索引信息。

FastDFS集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,同组内的多台Storage server之间是互备关系,同组存储服务器上的文件是完全一致的。文件上传、下载、删除等操作可以在组内任意一台Storage server上进行,它们的关系是对等的,没有主备之分。

客户端将一个文件上传到一台Storage server后,文件上传工作就结束了。由该Storage server根据binlog中的上传记录将这个文件同步到同组的其他Storage server。

image.png

如果需要提供http接口,需要额外部署编译了fastdfs-nginx-module模块的nginx,由nginx提供文件下载接口。

生产环境一般部署双tracker,双storager,双nginx以提供高可用。目前汇聚、汇聚汇管家、能源和灵活用工用到了fastdfs集群。

参考:  baike.sogou.com/v60583131.h…

部署方法

fastdfs没有官方容器镜像,此处将tracker server,storage server和nginx打包成一个镜像进行部署:

  1. 确定版本及部署主机,路径

  2. 主要修改端口、ip地址、data路径、资源等信息

  3. 逐个拉起容器(第一个容器实例拉起时,fdfs_storaged可能会失败,因配置中有尚未启动的tracker server,可以先忽略或注释未启动的tracker server)

  4. 检查和测试部署

fdfs_monitor client.conf
 
fdfs_upload_file client.conf /tmp/test.file
fdfs_download_file client.conf group1/M00/00/02/CgoctWMzvi2AHfN0AAAFzIpRqOw50.conf /tmp/test.file
fdfs_delete_file client.conf group1/M00/00/02/CgoctWMzvi2AHfN0AAAFzIpRqOw50.conf

高可用机制

tracker负责负载均衡和调度,tracke之间是互相独立的,部署两个以上tracker以供客户端连接。

多个storager可以归属于集群中的一个组,同一个组中的storager地位相同的,它们可以接受tracker调度过来的读写请求,客户端将文件上传到一个storager后,记录binlog,即完成上传。之后再根据binlog的上传记录异步的进行storager间的文件同步。

一个集群可以有多个组(group),一个组可以有多个path。

部署两个以上互相独立的nginx,以高可用的提供http文件下载接口。