企业级分布式文件系统GlusterFS
2003年,Gluster公司参加了一个研制超级计算机的项目,该项目隶属于美国能源部所属的一个国家实验室,代号为Thunder 的超级计算机于次年研制成功并投入生产,成为当年世界上排名第二的超级计算机。在这个过程中,Gluster 公司积累了丰富的高性能分布式文件系统的研发经验,最终于2007年发布了开源的GlusterFS文件系统,这个新的分布式文件系统也成为除Lustre外的一个新选择。
GlusterFS 的最初设计目标是简单方便、高性能及高扩展能力,具体表现为以下几个方面。
- 所有模块都运行在Linux用户态,不涉及Linux内核代码,方便编译、安装及使用(与Lustre不同)。
- 消除了集中化的元数据服务器,从而具备更强的弹性扩展能力及更高的性能(与Lustre不同)。
- 采用模块化设计,简化了系统配置并减少了组件之间的耦合性。
- 使用操作系统自身的文件系统,不重新发明轮子(与 Lustre不同)。
- 数据被存储为标准Linux文件,不引入新格式。
GlusterFS比较突出的一个特点就是上述最后一条。在GlusterFS集群里,我们所存储的文件就位于某个服务器节点上,文件名就是我们指定的文件名,内容就是我们写入的内容,这个文件没有经过任何特殊的加密或编码,我们可以直接用Linux文件命令对其进行操作。因此,即使GlusterFS集群出现故障而导致不可用,所有文件也都在原地,不会出现无法恢复数据的严重问题。
GlusterFS由于其新颖的设计理念及遵循KISS (Keeplt as Stupid and Simple)原则的系统架构,在扩展性、可靠性、性能、维护性等方面具有独特的优势,发展迅速。2011年,RedHat重金收购了Gluster公司,将GlusterFS纳入自己的云计算存储产品中,并且彻底开源了GlusterFS.RedHat将GlusterFS定义为现代企业级工作负载服务的Scale-out NAS,强调其是一个SoftwareDefined File Storage,可以管理大规模的非结构化和半结构化数据,支持私有云、公有云或混合云的部署,同时支持Linux容器。在 Docker 与 Kubernetes中也建议将GlusterFS作为分布式文件存储的首选方案。借助于RedHat 的影响力,被收购之后的GlusterFS在开源社区风头更胜,国内外有大量用户在对它进行研究、测试、部署和应用。
GlusterFS 的强大扩展能力在于其消除了集中式的元数据服务器,对文件的定位不再需要访问元数据服务器,因此GlusterFS集群具备很好的弹性扩展能力,在性能上实现了真正的线性扩展,而这又是如何做到的呢﹖秘诀在于其弹性哈希算法。弹性哈希算法是GlusterFS的灵魂设计之一,仅仅通过路径名及文件名(不需要与此文件相关的其他辅助信息)就可以计算出此文件在集群中的存储位置。在实际情况下存在集群服务器数量的增减、磁盘故障导致存储单元数量的变化、重新平衡文件分布时需要移动文件等问题,使得我们无法简单地将文件直接映射到某个存储节点,而GlusterFS为了实现这种映射,采用了以下独特设计。
- 设置了一个数量众多的虚拟卷组。
- 使用了一个独立的进程指定虚拟卷组到多个物理磁盘。
- 使用了哈希算法来指定文件对应的虚拟卷组。
我们通过下图理解其模型。由于虚拟卷组(Virtual Volume)的数量很多并且不随着存储服务器数量的变化而变化,因此在增加或减少存储服务器的数量时,只要把某些虚拟卷组与这些存储服务器的映射关系修改一下就可以了。看到这里,你是不是觉得Redis 3.0基于哈希槽(HashSlot)的集群看起来很眼熟呢?后面我们会看到, FastDFS也借鉴了GlusterFS的这一设计思想。
弹性哈希算法有一个明显的缺点,即在进行目录遍历时效率低下,因为一个目录下的文件可以被分布到集群中的所有存储节点上,所以GlusterFS需要搜索所有的存储节点才能实现目录的遍历,因此我们的程序要尽量避免这种操作。后来发展起来的对象存储系统干脆取消了文件目录这一特性,就是因为在分布式结构下文件目录是个难以解决的问题,而且在大多数情况下可以通过客户端编程避免该操作,比如在一个文件或者数据库中记录属于同一个目录下所有文件的ID。
除了弹性哈希算法,GlusterFS的 Volume设计也很有特色,比如Distributed Volume会将文件和目录分布在多个存储点上;Striped Volume则会将一个大文件拆分为几段,存储在不同的节点上。对于一个100GB的超大文件来说,这样可以大大提高并行IO的能力;Replicated Volume则会产生一个文件的多个副本,这些副本位于不同的节点上,增加了存储的可靠性,这三种Volume 又可以组合成新的Volume。
- Replicated Volume + Distributed Volume是最常用的组合,提供分片读取能力、数据一致性、容错性保障。
- Replicated Volume +Striped Volume可提升大文件的I/O并行能力、数据一致性、容错性保障,特别适合大数据文件计算。
如下所示是Replicated Volume +Striped Volume的示意图,其中的副本数为2。
本文给大家讲解的内容是架构解密从分布式到微服务:深入解析分布式文件存储,企业级分布式文件系统GlusterFS
- 下篇文章给大家讲解的是架构解密从分布式到微服务:深入解析分布式文件存储,创新的Linux分布式存储系统Ceph;
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!