分类: 服务器与存储
2014-03-02 09:16:09
原文地址:分布式文件系统元数据分布方案对比 作者:zyd_cu
对于单元数据服务器的集群,单元数据服务器会造成瓶颈,很多分布式文件系统通过采用元数据服务器集群的模式进行扩展,首先要解决的问题就是系统的元数据以什么方式分布在元数据服务器集群中。目前一些主流的分布式文件系统中使用的方案主要包括Table-Based Mapping,Hashing-Based Mapping,Static Tree Partitioning,Dynamic Tree Partitioning等,下面对这几种方法进行分析与比较。
1, Table-Based Mapping(基于表的映射)
该方案将元数据的分布记录在一个全局的映射表中,应用在集群存储系统中,则是将每个文件与其家元数据服务器的对应关系记录在全局映射表中,将该表存储在所有的元数据服务器上即能快速定位文件请求的家元数据服务器,该方案的确定在于其可扩展性太差,在大规模的存储系统中,所包含文件的数量都是千万级的,映射表需要占用的内存空间过大,同时查表的开销也会相当大以至于影响到元数据服务器的性能。在一个包含108文件,使用16字节记录文件名,2字节记录元数据服务器ID的系统中,映射表占用的空间为1.8G。xFS提出了一种粗粒度的映射表方案,将一组具有某一特性的文件映射到相应的元数据服务器。
2, Hashing-Based Mapping (基于hash的映射)
基于余数的hash方案被很多系统采用,如Lustre,Vesta, InterMezzo,该方案使用文件名hash出一个整数,并对元数据服务器的数量取余,根据余数将该文件分配到相应的服务器,这种方案能将文件均衡的分配到各个元数据服务器。该方案的不足之处在于,当文件被重命名时,其hash值需要重新计算,即应该分配到一个新的服务器,这就需要元数据在各个服务器之间迁移,即使文件的元数据很小,但当有大量的文件需要被迁移时,磁盘和网络的开销都是很大的,会影响到系统的整体性能。
3, Static Tree Partitioning (静态树分区映射)
静态树分区方案是一种将元数据操作分布到一组元数据服务器的简单方式,通常需要管理员配置文件树的某些目录应该分布到某一个元数据服务器上,如NFS,AFS,Coda使用这种方案。该方案在数据访问模式比较统一,访问比较均衡的情况下,工作得很好,开销很小。但由于数据的访问通常会出现偏态分布,导致出现某个服务器出现热点的情形,从而不利于整个系统的扩展。
4, Dynamic Tree Partitioning (动态树分区映射)
动态树分区在静态树分区的基础上提高了扩展性,该方案对接近根的目录进行hash来选择元数据服务器,并且当某个元数据服务器负载较大时,该服务器会自动迁移一部分文件到负载较轻的服务器上。但该方案有如下三点不足:首先,该方案需要每个服务器上有一个精确的负载计算方案,并且各个服务器需要周期性的交换负载信息;其次,当某个元数据服务器加入或者离开时,所有的目录需要重新计算hash以分配到新的服务器中,在PB级的存储系统中,会造成很大的开销;最后,当数据的访问热点不断变化时,会导致频繁的元数据迁移操作。
综上所述,基于hash的方案能均衡元数据分布,并能提供快速的查找服务,但对于目录操作如列出某个目录下所有文件,遍历目录数时的权限检查等操作效率却相当低,并且当元数据服务器加入或退出时,重新计算hash并分布元数据会导致很重的系统开销;基于映射表的方案不会涉及到数据迁移,但其所需要的存储空间开销及查表的时间开销很大;静态树分配方案不涉及数据迁移,内存空间开销小,并能提供快速的目录操作,但它不能实现负载均衡,容易出现热点;动态树分配方案类似于hash分配方案,能提供快速的超找操作和小的内存空间开销,但它需要依赖于系统的负载检测工具,文件迁移来均衡负载。下表显示了不同的方案在负载均衡,迁移代价,查找时间,内存开销,目录操作等方面的比较。
不同分布方案的比较(n为文件数,d为目录数)
从上表可以看出,一个高效的元数据管理方案至少应该考虑下面几点:
1,共享的单命名空间:所有的存储设备被虚拟成一个单独的存储卷,所有的客户共享相同的视图,这样简化了用户数据的管理。
2,可扩展的元数据管理服务:当系统规模增大时,元数据管理的开销不会呈线性增长。
3,零数据迁移:尽管元数据大小很小,但在大规模系统中,很多的文件元数据迁移也会引起很大的磁盘及网络开销,因此负载均衡尽量不需要通过数据迁移来完成。
4,灵活的放置策略:使得某个文件被分布到任何一个元数据服务器成为可能,这样便于实施负载均衡策略,元数据预取方案以提高系统的整体性能。