分布式文件系统及均衡元数据存储和访问负载的实现方法
技术领域
本发明属于计算机技术领域,具体涉及一种分布式文件系统,以及在该系统上实现的元数据存储负载和访问负载的均衡方法。
背景技术
大数据(big data)一词越来越多的被人们提及,它用来描述和定义信息爆炸时代所产生海量数据的名词。国际数据公司(IDC)的研究结果表明,2008年全球产生的数据量为0.49ZB(1ZB=1024EB,1EB=1024PB,1PB=1024TB,1TB=1024GB),2009年的数据量为0.8ZB,2010年增长为1.2ZB,2011年该数字更是高达1.82ZB,而到了2020年,全世界所产生的数据规模将达到今天的44倍。其增长速度相当于全球每人每年产生200GB以上的数据。
在这种数据快速增长的情况下,海量数据存储技术成为了支撑数据高速增长的技术基础。作为应用系统基础平台的用于支持数据访问的文件系统,其性能和可扩展性就变得越来越重要。为了提高文件系统性能,并在一定程度上提高文件系统的可扩展性,如谷歌的GFS,淘宝的TFS,HDFS等分布式文件系统应运而生。这些分布式文件系统通过将元数据服务和数据服务分离,由元数据服务器来提供元数据服务,由多个数据服务器来并行提供数据服务。其中,元数据采用采用集中式管理方式,这种管理方式可维护的元数据量,以及可提供的元数据服务性能都会受到限制,元数据服务器随着数据量的增长,将会成为系统的性能瓶颈,不利于系统进一步扩展。
针对集中式元数据管理的性能瓶颈问题,各种元数据服务器集群解决方案也相继出现。主要可分为两大类,一是基于hash(散列)的方案,通过文件的标识符(如路径名+文件名)的哈希值来定位对应的元数据服务器,每个元数据服务器维护一定哈希值范围的元数据,并响应查询访问。这类方案具有对单一文件的元数据查询响应快,元数据分布管理简单的优点,但却破坏了同一目录下文件元数据的局部性,此外,重命名会导致元数据的迁移,而目录重命名,整个目录下的所有文件元数据都需要迁移,开销非常大。另一类是基于目录子树分割的方案,将命名空间分割为不同的子树,按照一定的分配方法,将不同的子树分配到各个元数据服务器上。这类方案虽然容易实现静态分割,却具有不能应对系统负载的变化,负载均衡性能差的不足;而动态分割虽然能够更好的支持负载均衡,但大多设计方案比较复杂,不易实现。
现有元数据服务器集群的负载均衡方案,大多都集中在元数据访问负载的均衡,而实际对于用于海量存储的分布式文件系统来说,不仅数据占用空间大,而且用于维护文件基本信息的元数据需要的存储空间大。为了提高元数据访问的响应效率,大多分布式文件系统都会将元数据载入内存空间,这就使得元数据量存储负载均衡和访问负载均衡变得同样重要。然而遗憾的是,还没有出现结合访问负载均衡和存储负载均衡的技术方案。
发明内容
为了解决上述问题,本发明设计了一种分布式文件系统及均衡元数据存储和访问负载的实现方法,在减轻元数据服务器访问负载的同时,保证元数据存储负载和访问负载在元数据服务器之间平衡。
本发明的目的是这样实现的:
一种分布式文件系统,由客户端,元数据服务器和存储服务器三部分组成;
所述的客户端包括客户端元数据缓存模块和客户端元数据访问模块;
所述的元数据服务器分配有元数据目录树形式的元数据,元数据服务器维护一棵或多棵元数据目录子树,并记录:
本地元数据存储负载Mcount;
所有元数据服务器的总元数据存储负载TMcount;
路径和元数据服务器映射表PMT;
元数据服务器维护的每棵元数据目录子树对应元数据目录树中的一个目录节点,即元数据目录子树根节点,有其对应的路径;
定义分布式文件系统根目录的子目录为一级目录,每个元数据服务器维护一棵或多棵分布式文件系统元数据目录子树,每棵子树中的目录节点维护一个本目录下的元数据计数,记号为i的元数据服务器维护一个自身的元数据计数总值Mcount_i,元数据总计数TMcount表示所有元数据服务器上元数据计数的总和,N表示元数据服务器数量,
实现元数据服务器之间元数据存储负载均衡的运行方法包括以下四个步骤:存储负载均衡初始化、初始阈值、目录子树迁移和目录子树合并;
所述的存储负载均衡初始化具体为:在分布式文件系统初始创建启用时,将新创建的一级目录逐个存放到各个元数据服务器上;元数据目录树中,一级目录下所有目录和文件的元数据,与该一级目录元数据存储在同一个元数据服务器上,使元数据均匀分布到各个元数据服务器上;
所述的初始阈值具体为:设定初始阈值INP,当元数据服务器上存储的元数据计数小于初始阈值INP时,元数据服务器不对外进行元数据迁移;
所述的目录子树迁移的总体原则是将元数据服务器存储负载较大的节点迁移到负载较小的节点,具体为包括以下步骤:
步骤20:设置一个在0和1之间的负载系数α,设置具有δ>δ’>0关系的两个负载增量值δ和δ’;
步骤21:对比记号为i的元数据服务器维护一个自身的元数据计数总值Mcount_i与初始阈值INP之间的大小关系,如果:
Mcount_i>INP:进入步骤22;
Mcount_i=INP:进入步骤25;
Mcount_i<INP:进入步骤25;
步骤22:按照如下公式计算迁移触发阈值MP:
MP=min((1+α)×Tmcount/N,Tmcount/N+δ)
步骤23:对比记号为i的元数据服务器维护一个自身的元数据计数总值Mcount_i与迁移触发阈值MP之间的大小关系,如果:
Mcount_i>MP:进入步骤24;
Mcount_i=MP:进入步骤25;
Mcount_i<MP:进入步骤25;
步骤24:选择(0,Mcount_i-Tmcount/N+δ’)区间内元数据计数位最接近Mcount_i-Tmcount/N的目录Dir;
步骤25:在元数据服务器中选择存储负载最小的元数据服务器,触发迁移以Dir为根节点的子树;
步骤25:结束目录子树迁移;
所述的目录子树合并具体包括以下步骤:
步骤30:遍历元数据服务器上的所有子树对;
步骤31:判断每个子树对是否可以合并,如果:
是:进行合并后,进入步骤32;
否:直接进入步骤32;
步骤32:判断一次遍历过程中是否存在可以合并的子树对,如果:
是:进入步骤30;
否:进入步骤33;
步骤33:结束整个合并过程。
上述分布式文件系统,所述的元数据服务器为多个,共同组成元数据服务器集群。
上述分布式文件系统,所述的存储服务器为多个,共同组成存储服务器集群。
一种上述分布式文件系统上实现的客户端元数据访问方法,包括以下步骤:
步骤10、开始访问元数据;
步骤11、客户端查询需访问的元数据是否在本地元数据缓存MDCache中,如果:
是,进入步骤12;
否,进入步骤15;
步骤12、完成元数据访问;
步骤13、判断元数据是否被修改,如果:
是,进入步骤14;
否,进入步骤18;
步骤14、将修改同步到维护该元数据的元数据服务器,进入步骤18;
步骤15、对比需访问的元数据路径名与路径元数据服务器映射表PMT中路径名,找出最长匹配,返回最长匹配对应的元数据服务器地址addr;
步骤16、向地址为addr的元数据服务器发送元数据访问请求并获得返回结果;
步骤17、根据返回结果更新本地元数据缓存;
步骤18、元数据访问结束。
上述元数据服务器之间元数据存储负载均衡方法,所述的步骤31具体包括以下步骤:
步骤310:判断两个节点之间是否存在祖先节点与子孙节点的关系,如果:
是:进入步骤311;
否,进入步骤313;
步骤311:定义祖先节点为P1节点,子孙节点为P2节点,检查路径和元数据服务器映射表中的每条记录;
步骤312:判断是否存在PMT表的记录,如果:
是:对应的目录子树根节点为P1节点的子孙,为P2节点的祖先;
否:进行子树合并,更新PMT表;
步骤313:结束子树对是否可以合并的计算。
一种在上述分布式文件系统上实现的元数据访问负载均衡和高可用方法,为每台元数据服务都配置一台或多台备份主机,所述的备份主机存储相同的元数据副本。
有益效果:本发明分布式文件系统及均衡元数据存储和访问负载的实现方法,在减轻元数据服务器访问负载的同时,保证元数据存储负载和访问负载在元数据服务器之间平衡。具体为:
第一、客户端元数据访问方法,客户端缓存部分元数据内容,避免每次访问数据文件都去想元数据服务器请求元数据,减轻了元数据访间负载,提高了元数据的访问效率;
第二、元数据服务器之间元数据存储负载均衡方法,通过维护元数据服务器集群中的每个元数据服务器的元数据计数,来检测反应各个服务的元数据存储负载;通过本发明特有机制实现元数据存储负载由负载高的节点向负载低的节点迁移,最终实现元数据存储负载均衡;
第三、元数据访问负载均衡和高可用方法,在元数据存储负载均衡的基础上,将对同一元数据的访问分发到拥有该元数据的多个元数据服务器上,来实现元数据访问的负载均衡;
本发明所提供的解决方案设计简单、实用,易于实现。
附图说明
图1是本发明所对应的分布式文件系统及其内部各节点维护内容示意图。
图2是路径和元数据服务器地址映射表PMT示例如图。
图3是客户端元数据访问方法流程图。
图4是元数据服务器之间元数据存储负载均衡方法流程图。
图5是目录子树迁移方法流程图。
图6是元数据服务器之间元数据存储负载均衡方法步骤31的流程图。
具体实施方式
下面结合附图对本发明具体实施方式作进一步详细描述。
具体实施例一
本实施例是本发明分布式文件系统的实施例。
本实施例的分布式文件系统,模块示意图如图1所示。该分布式文件系统由客户端,元数据服务器和存储服务器三部分组成;
所述的客户端包括客户端元数据缓存模块和客户端元数据访问模块;
所述的元数据服务器分配有元数据目录树形式的元数据,元数据服务器维护一棵或多棵元数据目录子树,并记录:
本地元数据存储负载Mcount;
所有元数据服务器的总元数据存储负载TMcount;
路径和元数据服务器映射表PMT。
元数据服务器维护的每棵元数据目录子树对应元数据目录树中的一个目录节点,即元数据目录子树根节点,有其对应的路径。
路径和元数据服务器地址映射表PMT示例如图2所示,它们之间的对应关系如下表所示。
具体实施例二
本实施例是本发明分布式文件系统的实施例。
与具体实施例一的不同在于,本实施例的分布式文件系统,所述的元数据服务器为多个,共同组成元数据服务器集群。
具体实施例三
本实施例是本发明分布式文件系统的实施例。
与具体实施例一的不同在于,本实施例的分布式文件系统,所述的存储服务器为多个,共同组成存储服务器集群。
具体实施例四
本实施例是本发明客户端元数据访问方法的实施例。
本实施例的客户端元数据访问方法,流程图如图3所示。该方法包括以下步骤:
步骤10、开始访问元数据;
步骤11、客户端查询需访问的元数据是否在本地元数据缓存MDCache中,如果:
是,进入步骤12;
否,进入步骤15;
步骤12、完成元数据访问;
步骤13、判断元数据是否被修改,如果:
是,进入步骤14;
否,进入步骤18;
步骤14、将修改同步到维护该元数据的元数据服务器,进入步骤18;
步骤15、对比需访问的元数据路径名与路径元数据服务器映射表PMT中路径名,找出最长匹配,返回最长匹配对应的元数据服务器地址addr;
步骤16、向地址为addr的元数据服务器发送元数据访问请求并获得返回结果;
步骤17、根据返回结果更新本地元数据缓存;
步骤18、元数据访问结束。
具体实施例五
本实施例是本发明元数据服务器之间元数据存储负载均衡方法的实施例。
本实施例的元数据服务器之间元数据存储负载均衡方法,
定义分布式文件系统根目录的子目录为一级目录,每个元数据服务器维护一棵或多棵分布式文件系统元数据目录子树,每棵子树中的目录节点维护一个本目录下的元数据计数,记号为i的元数据服务器维护一个自身的元数据计数总值Mcount_i,元数据总计数TMcount表示所有元数据服务器上元数据计数的总和,N表示元数据服务器数量,
该方法的流程图如图4所示。该方法包括以下四个步骤:存储负载均衡初始化、初始阈值、目录子树迁移和目录子树合并;
所述的存储负载均衡初始化具体为:在分布式文件系统初始创建启用时,将新创建的一级目录逐个存放到各个元数据服务器上;元数据目录树中,一级目录下所有目录和文件的元数据,与该一级目录元数据存储在同一个元数据服务器上,使元数据均匀分布到各个元数据服务器上;
所述的初始阈值具体为:设定初始阈值INP,当元数据服务器上存储的元数据计数小于初始阈值INP时,元数据服务器不对外进行元数据迁移;
当元数据服务器上存储的元数据计数小于初始阈值INP时,该元数据服务器不对外进行元数据迁移。
由于元数据计数小于初始阈值INP时,相应的存储负载和访问负载都比较小,元数据迁移后的性能提升不明显。初始阈值机制的设计,使得在满足性能要求的同时,避免了在分布式文件系统启用初期频繁进行元数据迁移。
所述的目录子树迁移的总体原则是将元数据服务器存储负载较大的节点迁移到负载较小的节点,目录子树迁移方法流程图如图5所示。该方法包括以下步骤:
步骤20:设置一个在0和1之间的负载系数α,设置具有δ>δ’>0关系的两个负载增量值δ和δ’;
步骤21:对比记号为i的元数据服务器维护一个自身的元数据计数总值Mcount_i与初始阈值INP之间的大小关系,如果:
Mcount_i>INP:进入步骤22;
Mcount_i=INP:进入步骤25;
Mcount_i<INP:进入步骤25;
步骤22:按照如下公式计算迁移触发阈值MP:
MP=min((1+α)×Tmcount/N,Tmcount/N+δ)
步骤23:对比记号为i的元数据服务器维护一个自身的元数据计数总值Mcount_i与迁移触发阈值MP之间的大小关系,如果:
Mcount_i>MP:进入步骤24;
Mcount_i=MP:进入步骤25;
Mcount_i<MP:进入步骤25;
步骤24:选择(0,Mcount_i-Tmcount/N+δ’)区间内元数据计数位最接近Mcount_i-Tmcount/N的目录Dir;
步骤25:在元数据服务器中选择存储负载最小的元数据服务器,触发迁移以Dir为根节点的子树;
步骤25:结束目录子树迁移;
所述的目录子树合并具体包括以下步骤:
步骤30:遍历元数据服务器上的所有子树对;
步骤31:计算每个子树对是否可以合并,如果:
是:进行合并后,进入步骤32;
否:直接进入步骤32;
步骤32:判断一次遍历过程中是否存在可以合并的子树对,如果:
是:进入步骤30;
否:进入步骤33;
步骤33:结束整个合并过程。
由于每棵元数据目录子树对应路径与元数据服务器映射表(PMT)中的一项纪录,目录子树之间的合并可以减少维护PMT占用的通信和存储开销。
上述元数据服务器之间元数据存储负载均衡方法,所述的步骤31具体实施的流程图如图6所示,该方法包括以下步骤:
步骤310:判断两个节点之间是否存在祖先节点与子孙节点的关系,如果:
是:进入步骤311;
否,进入步骤313;
步骤311:定义祖先节点为P1节点,子孙节点为P2节点,检查路径和元数据服务器映射表中的每条记录;
步骤312:判断是否存在PMT表的记录,如果:
是:对应的目录子树根节点为P1节点的子孙,为P2节点的祖先;
否:进行子树合并,更新PMT表;
步骤313:结束子树对是否可以合并的计算。
具体实施例六
本实施例是本发明元数据访问负载均衡和高可用方法的实施例。
本实施例的元数据访问负载均衡和高可用方法,为每台元数据服务都配置一台或多台备份主机,所述的备份主机存储相同的元数据副本。
在对元数据进行存储负载均衡后,每个元数据在系统内只存储一份,在其中某个元数据服务器故障时,元数据的可用性得不到保障,同时,占用相同存储的元数据,其访问频率可能会有很大的差异,为了使热点元数据的访问性能得到保障,加入元数据访问负载均衡和高可用机制:为每台元数据服务都配置一台或多台备份主机,存储相同的元数据副本,在客户端发起元数据访问请求时,访问负载被均衡的分不到拥有相同元数据副本的主机节点之间,及提高了元数据访问服务能力,又保障了元数据的可用性。