引言
换工作以后,对块存储和对象存储的关注有所减少,近两年,专注在分布式文件系统的研发上,为满足公司文件存储的业务需求,研发初期阅读了IO 500上有关文件存储的很多资料及论文,也调研了很多开源文件系统(如:Lustre,BeeGFS,DAOS,GekkoFS),其中BeeGFS是IO 500榜单上排名比较靠前的(新)文件系统,它是一款非常优秀的分布式文件系统,设计思路简单巧妙,性能表现非常优秀,我对此印象深刻,现将一些学习及研究心得分享出来,以飨读者,还请斧正。(注:BeeGFS采用的是私有开源协议,不可直接用于商业用途,本文纯技术交流,不做任何商业使用推荐)
第一篇:BeeGFS的元数据管理
概述
BeeGFS是一款针对海量小文件储存优化过的分布式并行文件系统,支持百亿级文件的储存,支持数以万计客户端的并行访问,它由client,mgmt,mon,mds,oss等核心组件组成:
- client是一个内核态模块,提供兼容posix的文件接口
- mgmt是单节点管理服务,用于管理集群拓扑、节点状态等系统配置信息
- mon是单节点监控服务,提供对集群状态、资源的可视化
- mds是元数据服务,用于文件系统元数据管理,支持两副本镜像,支持横向扩展
- oss是数据服务,用于文件系统数据存储, 支持两副本镜像,支持横向扩展
下图是BeeGFS的一个典型架构【附图来自BeeGFS开源主页】,与大家熟悉的HDFS,GFS,Lustre文件系统的架构高度相似,应该很好理解。
元数据管理
进入本文的主题,文件系统元数据管理不外乎解决:本地化和负载均衡两大问题,本地IO性能是最好的,将数据分布到不同的元数据节点上却能取得更好的负载均衡,看起来是一对矛盾,通常:
- 采用Hash的方式将目录分布到不同的元数据节点上,这能取得很好的负载均衡效果,但是牺牲了本地性,也会带来严重的分布式锁一致性开