一种分布式文件系统动态元数据管理方法及系统转让专利

申请号 : CN200910236456.7

文献号 : CN101697168B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 朱明冯幼乐

申请人 : 中国科学技术大学

摘要 :

一种分布式文件系统动态元数据管理方法及系统,以解决在元数据管理方法中存在不能根据负载变化来对动态调整元数据的分布、不能对元数据服务器平滑扩展、无法处理热点目录的访问、不能良好应对单个热点文件的访问的问题。本发明包括元数据服务器根据元数据的访问情况对元数据在各元数据服务器上的分布进行动态划分和根据客户端的操作请求,对动态划分后的元数据进行管理。通过动态划分解决了元数据服务器的扩展性和负载均衡问题,对动态划分后元数据的管理,解决了元数据的一致性问题。

权利要求 :

1.一种分布式文件系统动态元数据管理方法,其特征在于,包括

A.元数据服务器根据元数据的访问情况对元数据在各元数据服务器上的分布进行动态划分;

B.元数据服务器根据元数据客户端的操作请求,对元数据进行管理。

2.根据权利要求1所述的方法,其特征在于,所述步骤A还进一步包括:

元数据服务器定时更新并向班长元数据服务器上报当前元数据服务器的整体负载信息;

班长元数据服务器根据接收到的负载信息,向负载大于全局平均负载的过载元数据服务器发送转移请求;

过载元数据服务器根据所述转移请求,将预定数量的负载量发送给轻载元数据服务器;

轻载元数据服务器接收目录子树,并在接收完成后向过载元数据服务器发送接收完成的确认信息;

过载元数据服务器根据所述接收完成的确认信息删除相应的目录子树并更新所述目录子树的祖先节点的负载信息。

3.根据权利要求1所述的方法,其特征在于,所述步骤B还进一步包括:

元数据客户端将待创建、待读取或待删除的目录信息,以及待创建、待打开、待关闭、待删除或待重命名的文件信息发送给通过预定的选择函数确定的元数据服务器;

元数据服务器根据待创建、待读取或待删除的目录信息,以及待创建、待打开、待关闭、待删除或待重命名的文件信息在缓存中创建所述待创建的目录信息、读取缓存中的所述待读取的目录信息、从缓存中删除所述待删除的目录信息、以及在缓存中创建所述待创建的文件信息、打开所述待打开的文件信息、关闭所述待关闭的文件信息、从缓存中删除所述待删除的文件信息、在缓存中创建所述待重命名文件的新路径信息并删除所述待重命名文件的旧的路径信息,并向元数据客户端返回操作结果;

元数据客户端根据接收到的操作结果更新缓存,并向用户返回结果。

4.根据权利要求3所述的方法,其特征在于,在缓存中创建所述待创建的目录信息或文件信息、读取缓存中的所述待读取目录信息或文件信息、从缓存中删除所述待删除的目录信息或文件信息、以及在缓存中创建所述待重命名文件的新路径信息并删除所述待重命名文件的旧的路径信息,过程包括:通过预定的查找函数确定待创建、待读取、待删除或待重命名的目录信息或文件信息对应的目录节点,若相应的目录节点对应的主元数据服务器不是当前元数据服务器,则将创建、读取、删除或重命名目录信息或文件信息的请求转发到该目录节点的主元数据服务器;

在相应目录节点的主元数据服务器的缓存中,创建,读取,删除或重命名要操作的目录或者文件;

将创建、删除或重命名的目录信息或文件信息的操作更新到元数据操作日志中;

元数据服务器定期将日志中未写入到存储节点的内容写入到存储节点。

5.根据权利要求3或4所述的方法,其特征在于,还包括元数据客户端请求打开或关闭某一文件,过程包括:元数据客户端将待打开或待关闭的文件信息发送给通过预定的选择函数确定的元数据服务器;

元数据服务器根据待打开或待关闭的文件信息在缓存中查找到相应的文件节点,按照元数据客户端的操作要求在缓存中更新所述待打开文件信息对应的文件索引节点上锁的状态、记录元数据客户端的会话信息或者释放元数据客户端在所述待关闭文件信息对应的索引节点上的权限,并向元数据客户端返回操作结果。

6.根据权利要求5所述的方法,其特征在于,在根据待打开的文件信息更新缓存中的所述待打开文件信息对应的文件索引节点上锁的状态的过程中包括:通过预定的查找函数确定待打开的文件信息对应的索引节点,若文件信息对应的打开方式中涉及到文件信息的更新,且该节点的主元数据服务器不是当前元数据服务器,则将打开文件信息的请求转发到班长元数据服务器。

7.一种分布式文件系统动态元数据管理系统,其特征在于,包括:

元数据服务器,用于定时更新并向班长元数据服务器上报当前元数据服务器的整体负载信息;

班长元数据服务器,用于根据接收到的负载信息,向负载大于全局平均负载的过载元数据服务器发送转移请求;

过载元数据服务器,用于根据所述转移请求,将预定数量的负载量发送给轻载元数据服务器,并根据所述接收完成的确认信息删除相应的目录子树并更新所述目录子树的祖先节点的负载信息;

轻载元数据服务器,用于接收目录子树,并在接收完成后向过载元数据服务器发送接收完成的确认信息。

8.根据权利要求7所述的系统,其特征在于,所述元数据服务器包括:用于根据待创建、待读取、待删除或待重命名的目录信息或文件信息在缓存中创建所述待创建的目录信息或文件信息、读取缓存中的所述待读取目录信息或文件信息、从缓存中删除所述待删除的目录信息或文件信息、以及在缓存中创建所述待重命名的文件信息并删除缓存中待重命名文件的路径信息,并向元数据客户端返回操作结果;

该系统还包括:元数据客户端,用于将待创建、待读取、待删除或待重命名的目录信息或文件信息发送给通过预定的选择函数确定的元数据服务器,以及更新本地缓存并将处理结果返回给用户;

元数据存储节点,用于存储元数据,并为元数据服务器提供基于对象的读写接口。

9.根据权利要求8所述的系统,其特征在于,所述元数据服务器还包括:

主元数据服务器查找单元,用于通过预定的查找函数确定待创建、待读取、待删除或待重命名的目录信息或文件信息对应的目录节点,若相应的目录节点对应的主元数据服务器不是当前元数据服务器,则将创建、读取、删除或重命名目录信息或文件信息的请求转发到主元数据服务器;

日志更新单元,用于将创建、删除或重命名的目录信息或文件信息更新到元数据操作日志中;

更新主元数据服务器查找单元,用于通过预定的查找函数确定待打开的文件信息对应的索引节点,若文件信息对应的打开方式中涉及到文件信息的更新,且该节点的主元数据服务器不是当前元数据服务器,则将打开文件信息的请求转发到该节点的主元数据服务器。

10.根据权利要求8至9任意一项所述的系统,其特征在于,所述元数据客户端还包括:用于将待打开或待关闭的文件信息发送给通过预定的选择函数确定的元数据服务器;所述元数据服务器还包括:打开关闭根据待打开或待关闭的文件信息更新缓存中的所述待打开文件信息对应的文件索引节点上锁的状态或释放缓存中的所述待关闭文件信息对应的索引节点上的权限,并向元数据客户端返回操作结果。

说明书 :

一种分布式文件系统动态元数据管理方法及系统

技术领域

[0001] 本发明涉及一种分布式文件系统动态元数据管理方法及系统,属于分布式存储系统体系结构技术领域。

背景技术

[0002] 现有的分布式文件系统通常包括两个部分:元数据服务器和智能存储节点。元数据服务器负责处理元数据相关的请求和权限管理。元数据服务器的设计从系统架构上可以分为两类:集中式和分布式。对于多元数据服务器架构,元数据在这些服务器上的组织和划分是决定元数据服务性能和扩展性的重要因素。现有的多元数据服务器一般采用三种方式来组织元数据。
[0003] 静态子树划分:该方法将不同的目录子树固定地划分到不同的元数据服务器进行处理。由于元数据服务器间维护的目录子树没有交叉性,可以方便的进行扩展和一致性的维护,但不能根据负载变化来对动态调整元数据的分布,也无法处理热点目录的访问问题。
[0004] 基于hash的划分:该方法根据文件路径将文件的元数据划归到相应的元数据服务器进行管理。通过精心设计的hash函数,系统的请求被均匀分散到各元数据服务器上。另外,因为同一目录下的文件可能被hash到不同的元数据服务器,所以对某一目录下文件的反复操作不会造成单个元数据服务器的性能瓶颈。但hash方法在扩展性和利用文件数据的局部性方面还有许多问题,当元数据服务器数量变化时,为了保证元数据的均匀分布,将涉及到大量的元数据的迁移。由于同一目录下的文件元数据分布在不同地方,文件局部性也不能得到充分的利用,对于热点文件的访问同样无法良好应对。
[0005] 动态子树划分:该方法将不同的目录子树划分到不同的元数据服务器进行维护,但元数据是保存在共享的存储空间中,元数据服务器仅缓存划分到其上的目录子树信息,并对其进行维护。目录子树在元数据服务器上的划分不是固定的,可以根据需要动态调整元数据服务器缓存的目录子树的内容。当元数据服务器数量发生变化时,需要迁移的数据只是缓存的内容,极大地减少了传输的数据量,通过迁移亦可以方便的进行负载均衡。故动态子树划分方法对系统的性能和扩展性都有很大的提高。但由于对某一文件的请求仍是全部集中到同一台服务器,故现有的动态子树划分算法对热点文件的访问问题仍不能良好应对。
[0006] 因此,在现有的元数据管理方法中存在不能根据负载变化来对动态调整元数据的分布、不能对元数据服务器平滑扩展、无法处理热点目录的访问、不能良好应对单个热点文件的访问的问题。

发明内容

[0007] 本发明提供了一种分布式文件系统动态元数据管理方法及系统,以解决在现有的元数据管理方法中存在不能根据负载变化来对动态调整元数据的分布、不能对元数据服务器平滑扩展、无法处理热点目录的访问、不能良好应对单个热点文件的访问的问题。
[0008] 一种分布式文件系统动态元数据管理方法,包括:
[0009] A.元数据服务器根据元数据的访问情况对元数据在各元数据服务器上的分布进行动态划分;
[0010] B.元数据服务器根据客户端的操作请求,对元数据进行管理。
[0011] 所述步骤A还进一步包括:
[0012] 元数据服务器定时更新并向班长元数据服务器上报当前元数据服务器的整体负载信息;
[0013] 班长元数据服务器根据接收到的负载信息,向负载大于全局平均负载的过载元数据服务器发送转移请求;
[0014] 过载元数据服务器根据所述转移请求,将预定数量的负载量发送给轻载元数据服务器;
[0015] 轻载元数据服务器接收目录子树,并在接收完成后向过载元数据服务器发送接收完成的确认信息;
[0016] 过载元数据服务器根据所述接收完成的确认信息删除相应的目录子树并更新所述目录子树的祖先节点的负载信息。
[0017] 所述步骤B还进一步包括:
[0018] 客户端将待创建、待读取或待删除的目录信息,以及待创建、待打开、待关闭、待删除或待重命名的文件信息发送给通过预定的选择函数确定的元数据服务器;
[0019] 元数据服务器根据待创建、待读取或待删除的目录信息,以及待创建、待打开、待关闭、待删除或待重命名的文件信息在缓存中创建所述待创建的目录信息、读取缓存中的所述待读取的目录信息、从缓存中删除所述待删除的目录信息、以及在缓存中创建所述待创建的文件信息、打开所述待打开的文件信息、关闭所述待关闭的文件信息、从缓存中删除所述待删除的文件信息、在缓存中创建所述待重命名文件的新路径信息并删除所述待重命名文件的旧的路径信息,并返回操作结果;
[0020] 客户端根据接收到的操作结果更新缓存,并向用户返回结果。
[0021] 一种分布式文件系统动态元数据管理系统,包括:
[0022] 元数据服务器,用于定时更新并向班长元数据服务器上报当前元数据服务器的整体负载信息;
[0023] 班长元数据服务器,用于根据接收到的负载信息,向负载大于全局平均负载的过载元数据服务器发送转移请求;
[0024] 过载元数据服务器,用于根据所述转移请求,将预定数量的负载量发送给轻载元数据服务器,并根据所述接收完成的确认信息删除相应的目录子树并更新所述目录子树的祖先节点的负载信息;
[0025] 轻载元数据服务器,用于接收目录子树,并在接收完成后向过载元数据服务器发送接收完成的确认信息。
[0026] 本发明通过将过载的元数据服务器的部分目录子树迁移到轻载的元数据服务器,实现了动态调整元数据的分布,能够对元数据服务器平滑扩展、有效的进行负载均衡,为热点目录的访问提供了高效的访问策略;另外本发明还通过在主元数据服务器之外保存只读的元数据副本,可以应对大规模的并发读操作,解决热点文件的访问问题,对于元数据的写操作则只能在主元数据服务器完成,可以保证系统良好的一致性。

附图说明

[0027] 图1是本发明的具体实施方式提供的通过元数据服务器执行动态子树划分的流程示意图;
[0028] 图2是本发明的具体实施方式提供的具体的动态子树划分方式的示意图;
[0029] 图3是本发明的具体实施方式提供的创建目录的执行流程示意图;
[0030] 图4是本发明的具体实施方式提供的元数据客户端缓存的元数据分布示意图;
[0031] 图5是本发明的具体实施方式提供的一种分布式文件系统动态元数据管理系统的结构示意图;
[0032] 图6是本发明的具体实施方式提供的元数据管理系统的整体结构示意图;
[0033] 图7是本发明的具体实施方式提供的元数据服务器内部结构示意图。

具体实施方式

[0034] 本发明的具体实施方式提供了一种分布式文件系统动态元数据管理方法,包括元数据服务器根据元数据的访问情况对元数据在各元数据服务器上的分布进行动态划分以及元数据服务器根据客户端的操作请求,对元数据进行管理。
[0035] 进一步地,对元数据的动态划分还包括通过元数据服务器定时更新并向班长元数据服务器上报当前元数据服务器的整体负载信息的步骤;通过班长元数据服务器根据接收到的负载信息,向负载大于全局平均负载的过载元数据服务器发送转移请求的步骤;通过过载元数据服务器根据所述转移请求,将预定数量的负载量发送给轻载元数据服务器的步骤;通过轻载元数据服务器接收目录子树,并在接收完成后向过载元数据服务器发送接收完成的确认信息的步骤;通过过载元数据服务器根据所述接收完成的确认信息删除相应的目录子树并更新所述目录子树的祖先节点的负载信息的步骤。
[0036] 以及,对元数据管理还包括客户端将待创建、待读取、待删除或待重命名的目录信息或文件信息发送给通过预定的选择函数确定的元数据服务器;根据待创建、待读取、待删除或待重命名的目录信息或文件信息在缓存中创建所述待创建的目录信息或文件信息、读取缓存中的所述待读取目录信息或文件信息、从缓存中删除所述待删除的目录信息或文件信息、以及在缓存中创建所述待重命名文件的新路径信息并删除所述待重命名文件的旧的路径信息,并返回操作结果。其中,在缓存中创建所述待创建的目录信息或文件信息、读取缓存中的所述带读取目录信息或文件信息、从缓存中删除所述待删除的目录信息或文件信息、以及在缓存中创建所述待重命名文件的新路径信息并删除所述待重命名文件的旧的路径信息,过程包括:通过预定的查找函数确定待创建、待读取、待删除或待重命名的目录信息或文件信息对应的目录节点,若相应的目录节点对应的主元数据服务器不是当前元数据服务器,则将创建、读取、删除或重命名目录信息或文件信息的请求转发到该目录节点的主元数据服务器;在相应目录节点的主元数据服务器的缓存中,创建,读取,删除或重命名要操作的目录或者文件;将创建、删除或重命名的目录信息或文件信息的操作更新到元数据操作日志中;元数据服务器定期将日志中未写入到存储节点的内容写入到存储节点。以及,元数据客户端请求打开或关闭某一文件,过程包括:元数据客户端将待打开或待关闭的文件信息发送给通过预定的选择函数确定的元数据服务器;元数据服务器根据待打开或待关闭的文件信息在缓存中查找到相应的文件节点,按照客户端的操作要求在缓存中更新的所述待打开文件信息对应的文件索引节点上锁的状态、记录客户端的会话信息或者释放客户端在所述待关闭文件信息对应的索引节点上的权限,并返回操作结果。另外,在根据待打开的文件信息更新缓存中的所述待打开文件信息对应的文件索引节点上锁的状态的过程中包括:通过预定的查找函数确定待打开的文件信息对应的索引节点,若文件信息对应的打开方式中涉及到文件信息的更新,且该节点的主元数据服务器不是当前元数据服务器,则将打开文件信息的请求转发到主元数据服务器。
[0037] 在本具体实施方式中,如图1所示,通过元数据服务器执行动态子书划分的过程具体可以包括:
[0038] 步骤11,元数据服务器根据元数据客户端的操作更新并上报目录子树的负载信息,并定时向班长元数据服务器上报元数据服务器的整体热度;
[0039] 步骤12,班长元数据服务器定期检查所有元数据服务器集群的热度分布情况,并向热度超出平均值的元数据服务器0发出迁移热度为P的目录子树到另一热度低于平均值的元数据服务器U的请求;
[0040] 步骤13,元数据服务器0根据班长元数据服务器发送的转移请求,从其维护的目录子树中选择访问量为P的目录子树S;
[0041] 步骤14,元数据服务器0将目录子树S打包并发送到目标元数据服务器U;
[0042] 步骤15,目标元数据服务器U将收到的数据包解包,加入到其维护的缓存中,并向元数据服务器0发送确认消息;
[0043] 步骤16,元数据服务器0收到确认消息,删除目录子树S并更新目录子树S的祖先节点的访问量信息;
[0044] 步骤17,目录子树S的根对应的索引节点向其它元数据服务器发送缓存失效信息,将目录子树S的根对应的目录的班长元数据服务器改为U。
[0045] 进一步地,对于元数据的管理还可以包括创建、读取和删除目录信息,创建、打开、关闭、删除文件信息,以及执行重命名等操作,下面通过说明书附图详细说明操作的过程。
[0046] 创建目录信息具体可以包括:
[0047] 步骤21,在元数据客户端输入用户希望创建的目录信息,包括目录路径、目录的模式,通过元数据客户端缓存,将目录路径转化为绝对路径,并读取缓存的用户ID和所在组ID;
[0048] 步骤22,利用函数A选择一台元数据服务器,将目录路径、目录模式、用户ID和所在组ID发往该元数据服务器;
[0049] 步骤23,元数据服务器收到请求后,利用函数B找到该目录所在的目录节点,若该节点的主元数据服务器不是当前元数据服务器,则将请求转发到主元数据服务器;
[0050] 步骤24,主元数据服务器根据目录路径、目录模式、用户ID和所在组ID创建目录项、索引节点和目录节点,并将新创建的元数据信息提交到更新日志中,更新日志会定期清理将并其中的脏数据提交到元数据存储节点;
[0051] 步骤25,新创建的元数据提交到日志成功后,元数据服务器将新创建的目录项、索引节点和目录节点加入到服务器缓存中,向元数据客户端发送回复消息,回复消息包括从根节点到目录节点经过的文件节点信息,以及操作结果;
[0052] 步骤26,元数据客户端将经过的路径信息加入到缓存中,将操作结果返回给用户。
[0053] 读取目录信息具体可以包括:
[0054] 步骤31,在元数据客户端输入用户希望读取的目录路径,通过元数据客户端缓存,将目录路径转化为绝对路径,并读取缓存的用户ID和所在组ID;
[0055] 步骤32,利用函数A选择一台元数据服务器,将目录路径、用户ID和所在组ID发往该元数据服务器;
[0056] 步骤33,元数据服务器收到请求后,利用函数B找到该目录所在的目录节点,若当前元数据服务器缓存的目录内容是完整的,则进入步骤34,否则若该节点的主元数据服务器不是当前元数据服务器,则将请求转发到主元数据服务器并重新执行步骤33;否则从元数据存储节点读取相应的目录文件内容,进入步骤34;
[0057] 步骤34,元数据服务器向元数据客户端发送回复消息,回复消息除了包含目录文件的内容外,还包括从根节点到目录节点经过的文件节点信息;
[0058] 步骤35,元数据客户端将经过的路径信息加入到缓存中,将操作结果返回给客户。
[0059] 删除目录信息具体可以包括:
[0060] 步骤41,在元数据客户端输入用户希望删除的目录路径,通过元数据客户端缓存,将目录路径转化为绝对路径,读取缓存的用户ID和所在组ID;
[0061] 步骤42,利用函数A选择一台元数据服务器,将目录路径、用户ID和所在组ID发往该元数据服务器;
[0062] 步骤43,元数据服务器收到请求后,利用函数B找到该目录所在的目录节点,若该节点的主元数据服务器不是当前元数据服务器,则将请求转发到主元数据服务器并重新执行步骤43;否则进入步骤44;
[0063] 步骤44,主元数据服务器对删除目录操作进行检查,若无法删除,则设置操作结果为失败,进入步骤45;否则向更新日志提交删除操作,若提交成功,则从缓存中删除相应的目录节点,设置操作结果为成功,进入步骤45;否则设置操作结果为失败,进入B步骤45;
[0064] 步骤45,元数据服务器向元数据客户端发送回复消息,回复消息除了包含操作结果外,还包括从根节点到目录节点经过的文件节点信息;
[0065] 步骤46,客户端将经过的路径信息加入到缓存中,将操作结果返回给客户。
[0066] 创建文件信息具体可以包括:
[0067] 步骤51,在元数据客户端输入用户希望创建的文件信息,包括文件路径、文件的模式,通过元数据客户端缓存,将文件路径转化为绝对路径,并读取缓存的用户ID和所在组ID;
[0068] 步骤52,利用函数A选择一台元数据服务器,将文件路径、文件模式、用户ID和所在组ID发往该元数据服务器;
[0069] 步骤53,元数据服务器收到请求后,利用函数B找到该目标文件所在的目录节点,若该节点的主元数据服务器不是当前元数据服务器,则将请求转发到主元数据服务器,重新执行步骤53;否则进入步骤54;
[0070] 步骤54,主元数据服务器对创建文件操作进行检查,若无法创建,则设置操作结果为失败,进入步骤55;否则向更新日志提交创建操作,若提交成功,则将新创建的文件节点和目录项加入缓存中,设置操作结果为成功,进入步骤55;否则设置操作结果为失败,进入步骤55;
[0071] 步骤55,元数据服务器向元数据客户端发送回复消息,回复消息除了包含操作结果外,还包括从根节点到目录节点经过的文件节点信息;
[0072] 步骤56,元数据客户端将经过的路径信息加入到缓存中,将操作结果返回给客户。
[0073] 打开文件信息具体可以包括:
[0074] 步骤61,在元数据客户端输入用户希望打开的文件信息,包括文件路径、打开文件的方式、文件的模式,通过元数据客户端缓存,将文件路径转化为绝对路径,读取缓存的用户ID和所在组ID;
[0075] 步骤62,利用函数A选择一台元数据服务器,将文件路径、打开文件的方式、文件模式、用户ID和所在组ID发往该元数据服务器;
[0076] 步骤63,元数据服务器收到请求后,利用函数B找到该文件所对应的索引节点,若文件的打开方式中涉及到对文件的更新,且该节点的主元数据服务器不是当前元数据服务器,则将请求转发到主元数据服务器,重新执行步骤63;否则进入步骤64;
[0077] 步骤64,元数据服务器对打开文件操作进行检查,若无法打开,则设置操作结果为失败,进入步骤65;否则在缓存中更新文件索引节点上锁的状态,并记录下客户端的会话信息,设置操作结果为成功,进入步骤65;
[0078] 步骤65,元数据服务器向元数据客户端发送回复消息,回复消息除了包含操作结果以及相应的文件锁的状态外,还包括从根节点到目录节点经过的文件节点信息;
[0079] 步骤66,元数据客户端将经过的路径信息加入到缓存中,将操作结果返回给客户。
[0080] 关闭文件信息具体可以包括:
[0081] 步骤71,在元数据客户端输入用户希望关闭的文件描述字,通过元数据客户端缓存,将文件描述字转化为绝对路径,读取缓存的用户ID和所在组ID;
[0082] 步骤72,向所有元数据客户端在其上的该文件节点有权限的元数据服务器发送请求消息,请求消息包括文件路径、用户ID和所在组ID,以及要求关闭文件的操作;
[0083] 步骤73,元数据服务器收到请求后,按照文件路径依次解析找到该目标文件所对应的索引节点;
[0084] 步骤74,释放元数据客户端在该索引节点上的权限;
[0085] 步骤75,元数据服务器向元数据客户端发送回复消息,回复消息除了操作结果外,还包括从根节点到目录节点经过的文件节点信息;
[0086] 步骤76,元数据客户端将经过的路径信息加入到缓存中,将操作结果返回给客户。
[0087] 删除文件信息具体可以包括:
[0088] 步骤81,在元数据客户端输入用户希望删除的文件路径,通过元数据客户端缓存,将文件路径转化为绝对路径,读取缓存的用户ID和所在组ID;
[0089] 步骤82,利用函数A选择一台元数据服务器,将文件路径、用户ID和所在组ID发往该元数据服务器;
[0090] 步骤83,元数据服务器收到请求后,利用函数B找到该目标目录所在的目录节点,若该节点的主元数据服务器不是当前元数据服务器,则将请求转发到主元数据服务器;
[0091] 步骤84,主元数据服务器对删除文件操作进行检查,若无法删除,则设置操作结果为失败,进入步骤85;否则向更新日志提交删除操作,若提交成功,则删除缓存中的文件节点和目录项,设置操作结果为成功,进入步骤85;否则设置操作结果为失败,进入步骤85;
[0092] 步骤85,元数据服务器向元数据客户端发送回复消息,回复消息除了操作结果外,还包括从根节点到目录节点经过的文件节点信息;
[0093] 步骤86,元数据客户端将经过的路径信息加入到缓存中,将操作结果返回给客户。
[0094] 执行重命名操作具体可以包括:
[0095] 步骤91,在元数据客户端输入用户希望重命名的文件路径,以及新的文件路径,通过元数据客户端缓存,将两个文件路径转化为绝对路径,读取缓存的用户ID和所在组ID;
[0096] 步骤92,利用函数A选择一台元数据服务器,将旧的文件路径,新的文件路径,用户ID和所在组ID发往该元数据服务器;
[0097] 步骤93,元数据服务器收到请求后,利用函数B找到旧文件路径所在的目录节点,若该节点的主元数据服务器不是当前元数据服务器,则将请求转发到该节点的主元数据服务器;
[0098] 步骤94,利用函数B找到旧文件路径所在的目录节点,若该节点的主元数据服务器不是当前元数据服务器,则将请求转发到该节点的主元数据服务器;
[0099] 步骤95,元数据服务器向目标元数据服务器发出新增操作,目标元数据服务器对新增操作进行检查,若无法新增,则向元数据服务器回复新增操作失败,进入步骤96;否则向更新日志提交新增操作,若提交成功,则在缓存中添加新创建的目录项,向元数据服务器回复新增成功,进入步骤96;否则向元数据服务器回复新增操作失败,进入步骤96;
[0100] 步骤96,元数据服务器处理目标元数据服务器的回复消息,若消息为新增操作失败,则设置操作结果为失败,进入步骤99;否则即新增操作成功,进入步骤97,对原有的文件路径进行删除;
[0101] 步骤97,元数据服务器对删除操作进行检查,若无法删除,则设置操作结果为失败,进入步骤98;否则向更新日志提交删除操作,若提交成功,则在缓存中删除原有的目录项,设置操作结果为成功,进入步骤99;否则设置操作结果为失败,进入步骤99;
[0102] 步骤98,元数据服务器向目标元数据服务器发出撤销新增操作,目标元数据服务器取消步骤95执行的新增操作,进入步骤99;
[0103] 步骤99,元数据服务器向元数据客户端发送回复消息,回复消息除了操作结果外,还包括从根节点到目录节点经过的文件节点信息;元数据客户端将经过的路径信息加入到缓存中,将操作结果返回给客户。
[0104] 在上述操作中,相应的函数A是根据元数据客户端缓存和输入的文件路径选择合适的元数据服务器,其执行以下操作:
[0105] 步骤A1,若元数据客户端没有缓存任何文件节点的信息,则随机选择一台元数据服务器,将该元数据服务器的标识符返回;
[0106] 步骤A2,从根路径开始,在元数据客户端缓存中逐层查找目标路径,若找到该目标路径代表的文件节点,则将该文件节点所在的元数据服务器的标识符返回;若没找到该文件路径代表的文件节点,则将该路径中已知的最长文件路径所在的元数据服务器标识符返回。
[0107] 相应的函数B在元数据服务器上是根据输入的文件路径查找相应的文件节点,其执行以下操作:
[0108] 步骤B1,逐层解析输入的文件路径,若能找到目标文件节点,则返回该文件节点;
[0109] 步骤B2,若在解析的过程中,某一文件节点不在当前元数据服务器缓存中,若当前元数据服务器为该文件节点的主元数据服务器,则从元数据存储节点中读取该文件节点的信息,加入到缓存中,继续解析;若当前元数据服务器不是该文件节点的主元数据服务器,则向主元数据服务器发出消息,请求解析路径中剩余的节点信息,当前元数据服务器将收到的回复信息加入到缓存中,返回请求的文件节点。
[0110] 本具体实施方式提供的一种元数据管理方法,如图2所示,采用动态子树划分的方式来管理元数据,每台元数据服务器缓存并维护部分元数据信息,每台元数据服务器维护的元数据信息可以动态变化,可以有效的扩展和进行负载均衡;采用多可读副本的方法,可以有效的处理大规模访问和热点文件的问题;元数据副本只用于读操作,对于元数据的更新只能在主元数据服务器上进行,可以保证良好的数据一致性。
[0111] 图2是一种可能的动态子树划分方式,图中两台元数据服务器维护不同的目录子树而又有部分重叠。元数据服务器1是目录/usr/test/的主元数据服务器,其负责以目录/usr/test/为根的子树的维护。元数据服务器0则是其余目录子树的主元数据服务器。在元数据服务器1上仍保留从根到/usr/test/中间经过的节点的部分信息,用于加快到/usr/test/的路径的解析,中间节点上与/usr/test/无关的信息都没有保存。例如元数据服务器1上虽保留有根目录的信息,但根目录的目录项只有/usr一项,/tmp则不在元数据服务器1的缓存中。文件/usr/test/file0是一个热点文件,故其在两台服务器上都保留有副本,对该文件的读操作可以在两台服务器上同时进行,有效解决了热点文件的问题。
[0112] 下面以元数据客户端创建目录的操作为例结合图2、图3和图4,详细的介绍本具体实施方式提供的一种支持大规模并发访问的分布式文件系统元数据管理方法及实现,图2为某一时刻整体缓存的元数据分布,图3为该时刻用户输入命令,图4为该时刻某客户端缓存的元数据分布情况。创建目录/usr/test/dir2时的执行流程,包括以下步骤:
[0113] 步骤S1,元数据客户端根据缓存处理用户输入信息,向元数据服务器发送请求,由于缓存的元数据分布中没有/usr/test/的信息,所以请求将被发往/usr所在的元数据服务器,/usr目录在两台元数据服务器中都有缓存,但创建目录操作需要对元数据更新,故选择/usr目录的主元数据服务器——元数据服务器0;
[0114] 步骤S2,元数据服务器0在缓存中找到/usr/test/对应的目录节点,发现本地缓存的只是其副本,/usr/test/对应的主元数据服务器为1,故将请求转发到元数据服务器1;
[0115] 步骤S3,元数据服务器1在缓存中找到/usr/test/对应的目录节点,检查新增操作,在/usr/test/下生成新的目录项dir2,相应的索引节点和目录节点,将更新提交到更新日志(更新日志会定期清理将脏数据提交到元数据存储节点);
[0116] 步骤S4,向更新日志提交成功后,元数据服务器1将新增的目录项,索引节点和目录节点加入到缓存的子树结构中,向客户端发送操作成功的消息,发送的消息中包含/usr/test/dir2/路径中经过的节点的信息;
[0117] 步骤S5,客户端根据操作结果,更新缓存,返回给用户操作成功的标志。
[0118] 本具体实施方式具有支持元数据服务器的平滑扩展和负载均衡的特点。元数据存储在统一的存储空间,当增加或者减少元数据服务器的数量时,将不会有大量的数据迁移;各元数据服务器维护的目录子树是动态划分的,可以根据各子树的访问情况,在元数据服务器间灵活的进行子树的复制和迁移,有效的进行负载均衡;通过在主元数据服务器之外保存只读的元数据副本,可以应对大规模的并发读操作,解决热点文件的访问问题,对于元数据的写操作则只能在主元数据服务器完成,可以保证系统良好的一致性。
[0119] 本发明的具体实施方式还提供了一种分布式文件系统动态元数据管理系统,如图5所示,具体可以包括:
[0120] 元数据服务器51,用于定时更新并向班长元数据服务器52上报当前元数据服务器的整体负载信息;
[0121] 班长元数据服务器52,用于根据接收到的负载信息,向负载大于全局平均负载的过载元数据服务器53发送转移请求;
[0122] 过载元数据服务器53,用于根据所述转移请求,将预定数量的负载量发送给轻载元数据服务器54,并根据所述接收完成的确认信息删除相应的目录子树并更新所述目录子树的祖先节点的负载信息;
[0123] 轻载元数据服务器54,用于接收目录子树,并在接收完成后向过载元数据服务器53发送接收完成的确认信息。
[0124] 本具体实施方式提供的分布式文件系统动态元数据管理系统主要包括了实现对负载进行动态划分的功能单元,而包括了该功能单元的元数据管理系统的整体结构如图6所示,具体可以包括:
[0125] 元数据客户端:该客户端接受用户的输入,根据本地缓存将输入转换成用户请求发往元数据服务器,并根据收到的回复更新本地缓存并将请求的处理结果返回给用户;
[0126] 元数据服务器:有一台或者多台,多台服务器联合起来将数据文件组织成统一的文件系统视图,每台元数据服务器缓存一个或多个目录子树,根据元数据服务器客户端的请求对这些目录子树进行操作,将更新的元数据信息写入到元数据存储节点,并向元数据服务器客户端返回操作结果;
[0127] 元数据存储节点:有一台或者多台,多台元数据存储节点联合起来提供可靠高效的统一元数据存储空间。元数据存储节点向元数据服务器提供基于对象的读写接口,屏蔽了文件块的操作,元数据存储节点间的负载均衡与故障恢复亦由其自身完成。
[0128] 在对访问量动态划分的过程中,班长元数据服务器,过载元数据服务器和轻载元数据服务器都属于元数据服务器的一种,都根据元数据客户端的操作进行元数据管理。其中班长元数据服务器负责收集负载信息和决策触发动态划分。所有的元数据服务器都要向班长元数据服务器报告负载情况,班长元数据服务器可以指定或者动态选举,过载元数据服务器和轻载服务器是动态划分过程中子树迁移的源点和目标节点。
[0129] 其中的元数据服务器结构如图7所示,包括消息接口模块,节点管理模块,用户请求处理模块,更新日志记录模块,迁移/复制决策模块,子树迁移模块,子树复制模块,数据备份模块和事件记录模块9个部分,其中消息接口模块负责网络消息的传输;节点管理模块负责维护元数据服务器集群中各节点的活动情况,包括各节点的负载,心跳信息等;用户请求处理模块负责根据用户的操作请求,完成对目录子树的操作;更新日志记录模块负责在元数据发生更改的时候,记录对元数据进行的操作,以备用于故障恢复;迁移/复制决策模块负责根据元数据服务器集群的负载情况和目录对象的访问情况,来动态决定子树的划分以及元数据副本的位置;子树迁移模块和子树复制模块根据迁移/复制决策模块的决策来完成相应的操作;数据备份模块用于根据系统的要求,定时备份元数据信息;事件记录模块负责记录元数据服务器的各种事件。
[0130] 上述装置中包含的各单元的处理功能的具体实现方式在之前的方法实施例中已经描述,在此不再重复描述。
[0131] 以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。