面向高性能计算的分布式文件系统元数据管理方法

文档序号:7553979阅读:231来源:国知局
专利名称:面向高性能计算的分布式文件系统元数据管理方法
技术领域
本发明涉及分布式文件系统体系结构领域,具体涉及一种面向高性能计算的分布式文件系统元数据管理方法。
背景技术
随着各种I/O密集型应用的需求和高速网络的发展,当今高性能计算机集群计算节点的规模已达上万个,性能亦已达PFlops。底层存储系统的规模不断增大,PB级甚至更大规模的系统不断出现。分布式文件系统中文件的数目可以达到上亿个,快速高效的处理成千上万个客户端对文件元数据的并发访问是一个亟需解决的问题。元数据服务器(Metadata Server, MDS)用来管理文件系统的元数据,在存储系统规模非常大时,一台MDS会成为整个系统的性能瓶颈,于是人们就把多台MDS连接在一起,构成元数据服务集群来提升文件系统的元数据处理能力。在文件系统中,文件的元数据用以记录文件数据对象的存储位置和访问控制信息,目录是包含文件列表信息的文件,用以实现文件系统的目录层次和权限管理。目前MDS集群中的元数据分布方法,主要可以分为目录子树分割方法和散列方法两大类。目录子树分割(SubtreePartitioning)方法是将文件系统的全局目录层次结构按照目录子树划分,每个MDS负责管理一个或多个目录子树,所有的MDS共同维护一个完整的文件系统目录层次结构。该方法设计简单,实现难度较小。其主要缺点是负载均衡能力较差。在大量客户端同时访问某个目录下的不同文件这种情况时,容易出现该目录子树成为“热点”的问题,从而导致负责该子树的MDS成为整个系统的瓶颈。散列方法是将文件的某个特定标识(如文件名,文件路径名等)进行哈希计算,每个MDS负责一段哈希值范围内的文件元数据。该方法的优点是能够较好的将同一目录下不同文件的元数据均匀的映射到各个MDS上,具有良好的负载均衡性。其缺点是每个MDS需要保存大量的前缀目录元数据信息,减少了每个MDS用来保存文件元数据的可用内存容量,同时这些目录元数据信息的一致性维护需要一定的代价。同时,对一个目录的重命名操作和增减MDS将导致原先文件与MDS之间映射关系被破坏,可能需要迁移重命名目录下的各个文件和子目录的元数据。综上所述,上述现有技术都存在或不能良好处理热点目录的访问问题,或不能有效解决目录的重命名问题和重迭保存前缀目录元数据信息带来的内存利用率和一致性维护问题,严重制约了分布式文件系统在高性能计算领域的应用。

发明内容
本发明要解决的技术问题是提供一种存储性能高、维护开销小、高负载无瓶颈、扩展性好、负载均衡、能够有效解决目录重命名带来的元数据迁移问题的面向高性能计算的分布式文件系统元数据管理方法。为了解决上述技术问题,本发明采用的技术方案为: 一种面向高性能计算的分布式文件系统元数据管理方法,其实施步骤如下:
I)建立用于管理目录元数据的目录元数据服务器集群、用于管理文件元数据的文件元数据服务器集群,建立用于为目录元数据服务器集群和文件元数据服务器集群提供对象接口数据存储服务的对象存储服务器集群;
2 )在所有目录元数据服务器集群中建立布隆过滤器,所述目录元数据服务器集群中的目录元数据服务器之间共享布隆过滤器;
3)在客户端的操作请求到来时,若操作请求为目录操作请求时跳转执行步骤4);若操作请求为文件操作请求时跳转执行步骤5);
4)所述目录元数据服务器集群响应客户端的目录操作请求对目录元数据进行管理,为每个目录分配一个全局唯一标识符,根据布隆过滤器数组记录来判断负责目录请求的目录元数据服务器,并根据目录的完整路径名哈希访问对象存储服务器中存储的目录元数据;
5)所述文件元数据服务器集群响应客户端的文件操作请求对文件元数据进行管理,根据请求文件的文件名哈希来判断负责文件元数据的文件元数据服务器,并根据请求文件的父目录全局唯一标识符和文件名的哈希访问对象存储服务器中存储的文件元数据。作为本发明上述技术方案的进一步改进:
所述步骤I)建立的对象存储服务器集群中存储的目录元数据结构为:DirId、DirName、ACLf > ACLp> AtFMDS和InodePointer, DirId代表目录在被创建时生成的全局唯一标识符,DirId的生存周期和目录本身一样;DirName代表目录的完整路径名;ACLf代表在创建目录时给目录赋予的文件权限;ACLp代表目录的路径权限,ACLp由目录自身的文件权限ACLf与父目录的路径权限ACLp相与操作得到;AtFMDS代表目录下文件存放的型别标识,用于判断目录下所有文件的文件元数据在文件元数据服务器集群中的分布类型;InodePointer代表目录层次结构指针,用于指向目录包含的文件和子目录构成的树形结构,所述目录包含的文件和子目录构成的B树通过目录的全局唯一标识符进行索引;所述步骤I)建立的对象存储服务器集群中存储的文件元数据结构包括Dirid、FileName和FileMeta,其中DirId代表文件所在目录的全局唯一标识符,FileName代表文件的文件名,FileMeta代表包括文件长度、读写权限、修改时间和文件数据的布局信息在内的文件具体元数据信息。所述步骤2)建立的布隆过滤器为基于计数的布隆过滤器,所述基于计数的布隆过滤器使用一个m比特的整数数组来保存信息,使用k个独立的哈希函数将集合中的每一个目录元素映射到{1,...,ηι}的范围中,初始化时{1,...,ηι}中的每一位整数都设置为O,每个哈希函数对应一个大小为m/k位的位数组,所述k个位数组构成基于计数的布隆过滤器的布隆过滤器位数组;当目录元数据服务器添加一个目录时,所述目录元数据服务器通过多个哈希函数对添加目录的完整路径进行哈希运算得到k个哈希值,将所述k个哈希值在整数数组中对应k个整数位置的整数值分别加I ;当目录元数据服务器删除一个目录时,所述目录元数据服务器通过多个哈希函数对删除目录进行哈希运算得到k个哈希值,将所述k个哈希值在整数数组中对应k个整数位置的整数值分别减I ;当判定目录元数据服务器是否为负责指定目录的节点时,通过多个哈希函数对指定目录进行哈希运算得到的k个哈希值,判断所述目录元数据服务器的整数数组中对应k个整数位置的整数值是否都大于0,如果都大于O则判定该目录元数据服务器为负责指定目录的节点。
所述步骤4)的详细步骤如下:
4.1)客户端判断目录操作请求类型,当目录操作请求为创建目录时跳转执行步骤
4.2),当目录操作请求为查询目录元数据时跳转执行步骤4.3),当目录操作请求为更新目录权限时跳转执行步骤4.4),当目录操作请求为重命名目录时跳转执行步骤4.5),当目录操作请求为删除目录时跳转执行步骤4.6);
4.2)执行创建目录:
4.2.1)客户端从缓存中查找当前目录的父目录元数据,如果找到则查询客户端是否具有在父目录下创建目录的权限,如果没有权限则返回用户没有权限在父目录下创建目录的错误提示并返回执行步骤3);如果有权限创建或者在缓存中没有找到父目录元数据信息,从目录元数据服务器集群中随机选择一个指定节点发送创建目录请求;
4.2.2)所述指定节点接收到创建目录请求,首先通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的父目录的目标节点,如果本节点不是目标节点,则向目标节点请求父目录路径权限,目标节点查询父目录路径权限并返回给所述指定节点;否则本节点直接查询获取父目录路径权限;
4.2.3)所述指定节点将父目录路径权限缓存,判断所述父目录路径权限是否允许客户端创建目录,如果不允许则返回出错信息给客户端并跳转执行步骤3);如果允许则指定节点创建目录,为新建目录生成一个全局唯一标识符,将目录操作请求中的指定的文件权限和父目录路径权限进行相与操作得到新建目录的路径权限,根据全局唯一标识符、目录操作请求中的携带的完整路径和文件权限、新建目录的路径权限生成目录元数据,并将目录元数据根据当前目录的完整路径哈希将当前目录的目录元数据提交到对象存储服务器进行存储;
4.2.4)所述指定节点将当前目录的目录元数据存入缓存中,并向负责父目录的目标节点发送更新目录元数据请求,所述目标节点接收请求并更新父目录元数据信息;同时,所述指定节点将新创建目录存入本地的布隆过滤器,并将布隆过滤器的更新项发送给目录元数据服务器集群中的其它节点进行同步;所述指定节点向客户端回复目录创建消息,所述消息包含当前目录的全局唯一标识符、文件权限、路径权限和所在的目录元数据服务器编号;
4.2.5)客户端将接收到的目录创建消息加入本地缓存中并向用户显示操作结果,跳转执行步骤3);
4.3)执行查询目录元数据:
4.3.1)客户端首先在本地缓存中查找是否有待当前目录的目录元数据信息,如果有则直接返回结果给客户端,跳转执行步骤3);否则跳转执行步骤4.3.2);
4.3.2)客户端随机向目录元数据服务器集群中随机选择一个指定节点发送目录元数据查询请求;
4.3.3)所述指定节点通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的目标节点,如果指定节点并非目标节点,则所述指定节点将目录元数据查询请求转发给目标节点,否则所述指定节点即为目标节点;
4.3.4)所述目标节点首先在内存中查找待查询目录的目录元数据信息,如果在内存中查找失败,则根据当前目录的完整路径名哈希获取对象存储服务器中存储的目录元数据信息,如果查询目录元数据请求为目录列表请求命令,则还通过目录层次结构指针获取当前目录所包含的子目录和文件信息数据,最终将获得的操作结果发送给客户端;
4.3.5)客户端接收所述目标节点发送的操作结果,将目录元数据信息加入到缓存中,将目录操作请求的操作结果返回给用户端,跳转执行步骤3);
4.4)执行更新目录权限:
4.4.1)客户端首先在本地缓存中查找目录元数据服务器集群中负责当前目录的目标节点,如果查找成功,则向目标节点发送更新目录权限请求,跳转执行步骤4.4.3),否则向目录元数据服务器集群中随机选择一个指定节点发送更新目录权限请求,跳转执行步骤
4.4.2);
4.4.2)所述指定节点通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的目标节点,如果所述指定节点并非目标节点,则所述指定节点将更新目录权限请求转发给目标节点,否则所述指定节点即为目标节点;
4.4.3)所述目标节点修改当前目录的文件权限和路径权限,找出当前目录所包含的子目录,通过本节点以及其它节点共享的布隆过滤器查找负责待更新目录下各个子目录的关联节点,并向所述关联节点分别发送更新目录路径权限请求;
4.4.4)所述关联节点通过本节点以及其它节点共享的布隆过滤器查找负责待更新目录下各个子目录的下一级关联节点,并向所述下一级关联节点分别发送更新目录路径权限请求,接收到更新目录请求的关联节点分别执行更新目录的路径权限,将操作结果返回给所述目标节点;重复执行上述递归过程,直到待更新目录下所有子目录的路径权限都更新成功;
4.4.5)所述目标节点接收到各级关联节点发送来的子目录的路径权限更新结果,并将操作结果返回给用户端;
4.4.6)客户端接收到所述目标节点发送的操作结果并返回给用户,跳转执行步骤3);
4.5)执行重命名目录:
4.5.1)客户端首先在本地缓存中查找目录元数据服务器集群中负责当前目录的目标节点,如果查找成功,则向目标节点发送重命名目录请求,进入步骤4.5.3),否则随机向目录元数据服务器集群中随机选择一个指定节点发送重命名目录请求,跳转执行步骤
4.5.2);
4.5.2)所述指定节点通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的目标节点,如果所述指定节点并非目标节点,则所述指定节点将重命名目录请求转发给目标节点,否则所述指定节点即为目标节点;
4.5.3)所述目标节点执行重命名目录,通过本节点以及其它节点共享的布隆过滤器查找负责当前下各个子目录的关联节点,并向所述关联节点分别发送重命名目录请求;
4.5.4)所述关联节点通过本节点以及其它节点共享的布隆过滤器递归查找负责当前目录下各个子目录的下一级关联节点,并向所述下一级关联节点分别发送重命名目录请求,接收到重命名目录请求的关联节点分别执行重命名目录;重复执行上述递归过程,直到待重命名目录下所有子目录都重命名成功后,将操作结果返回给所述目标节点;
4.5.5)所述目标节点接收到各级关联节点发送来的子目录的重命名目录结果,并将操作结果返回给用户端; 4.5.6)客户端接收到所述目标节点发送的操作结果并将操作结果返回给用户,跳转执行步骤3);
4.6)执行删除目录:
4.6.1)客户端首先在本地缓存中查找目录元数据服务器集群中负责待删除目录的目标节点,如果查找成功,则向目标节点发送删除目录请求,进入步骤4.6.3),否则随机向目录元数据服务器集群中随机选择一个指定节点发送删除目录请求,跳转执行步骤4.6.2);
4.6.2)所述指定节点通过本节点以及其它节点共享的布隆过滤器查找负责待删除目录的目标节点,如果所述指定节点并非目标节点,则所述指定节点将删除目录请求转发给目标节点,否则所述指定节点即为目标节点;
4.6.3)所述目标节点执行删除目录,通过本节点以及其它节点共享的布隆过滤器查找负责当前目录下各个子目录的关联节点,并向所述关联节点分别发送删除目录请求;
4.6.4)所述关联节点通过本节点以及其它节点共享的布隆过滤器递归查找负责待删除目录下各个子目录的下一级关联节点,并向所述下一级关联节点分别发送删除目录请求,接收到删除目录请求的关联节点执行删除目录,将操作结果返回给所述目标节点;重复执行上述递归过程,直到当前目录下所有子目录都删除成功;最后,所述目标节点将执行结果返回给用户端;
4.6.5)客户端接收到所述目标节点发送的操作结果并返回给用户,跳转执行步骤3)。所述步骤5)的详细步骤如下:
5.1)客户端判断文件操作请求类型,当文件操作请求为创建文件时跳转执行步骤5.2),当文件操作请求为查询文件元数据时跳转执行步骤5.3),当文件操作请求为更新文件元数据时跳转执行步骤5.4),当文件操作请求为重命名文件时跳转执行步骤5.5),当文件操作请求为删除文件时跳转执行步骤5.6);
5.2)执行创建文件:
5.2.1)客户端首先在本地缓存中查找当前文件父目录的目录元数据信息,若找到父目录的目录元数据信息,则查询父目录权限信息判断客户端是否具有创建文件权限,如果客户端没有创建文件权限,则返回消息给用户并跳转执行步骤3);如果客户端有创建文件权限则跳转执行步骤5.2.3);若客户端没有找到父目录的目录元数据信息,则跳转执行
4.3)查询当前文件父目录的目录元数据,收到父目录的目录元数据信息后返回执行步骤
5.2.2);
5.2.2)客户端客户缓存的目录创建消息中的路径权限信息判断当前文件父目录是否允许客户端创建文件,如果不允许客户端创建文件,则返回消息给用户并跳转执行步骤3);否则跳转步骤5.2.3);
5.2.3)根据当前文件的文件名进行哈希,根据哈希值找到在文件元数据服务器集群中所映射的指定节点,发送文件创建请求到所述指定节点,发送的信息包含当前文件完整路径名、父目录全局唯一标识符和父目录所在的目录元数据服务器编号;
5.2.4)所述指定节点根据文件创建请求生成当前文件的元数据,根据父目录全局唯一标识符和文件名将当前文件的元数据提交到对象存储服务器进行存储;
5.2.5)所述指定节点将当前文件的元数据存入缓存中,然后将文件创建成功消息发送到负责当前文件父目录的目录元数据服务器,所述目录元数据服务器将当前文件父目录的目录元数据信息更新至指定的对象存储服务器;
5.2.6)所述指定节点将创建新文件成功的消息发给客户端;
5.2.7)客户端接收到文件创建成功消息,向用户提示文件创建成功,跳转执行步骤3);
5.3)执行查询文件元数据:
5.3.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到待查询文件父目录的元数据信息后返回执行步骤5.3.2);
5.3.2)客户端将当前文件的文件名进行哈希,在文件元数据服务器集群中根据待查询文件的哈希值找到负责当前文件的目标节点;
5.3.3)客户端向所述目标节点发送查询文件元数据请求,所述查询文件元数据请求信息包括父目录全局唯一标识符、待查询文件的文件名和文件完整路径;
5.3.4)所述目标节点收到客户端的查询文件元数据请求,首先在内存中查找当前文件的文件元数据,如果查找成功则直接跳转执行步骤5.3.5);如果查找失败则使用父目录全局唯一标识符和待查询文件的文件名,在对象存储服务器集群中定位存储所述文件元数据的对象存储服务器,然后从所述对象存储服务器中读取当前文件的文件元数据;
5.3.5)所述目标节点向客户端发送待查询文件的文件元数据;
5.3.6)客户端收到目标节点发送的文件元数据,返回给用户并跳转执行步骤3);
5.4)执行更新文件元数据:
5.4.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到当前文件父目录的元数据信息后返回执行步骤5.4.2);
5.4.2)客户端将当前文件的文件名进行哈希,在文件元数据服务器集群中根据待更新文件的哈希值找到负责待更新文件的目标节点;
5.4.3)客户端向所述目标节点发送更新文件元数据请求,所述查询文件元数据请求信息包括父目录全局唯一标识符和新的文件元数据;
5.4.4)所述目标节点收到客户端的更新文件元数据请求,首先在内存中查找当前文件的文件元数据,如果查找失败则使用父目录全局唯一标识符和待更新文件的文件名,在对象存储服务器集群中定位存储所述文件元数据的对象存储服务器,然后从所述对象存储服务器中读取文件元数据;获取更新文件元数据以后,检查客户端是否修改权限,如果没有修改权限则向客户端返回没有权限的更新失败消息,跳转执行步骤3);如果有修改权限则更新文件元数据并向客户端发送更新成功消息;
5.4.5)客户端收到目标节点的发送的消息后返回给用户,跳转执行步骤3);
5.5)执行重命名文件:
5.5.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到待重命名文件父目录的元数据信息后返回执行步骤5.5.2);
5.5.2)根据当前文件父目录的元数据信息判断父目录下是否有待重命名文件新名称相同的文件,如果在父目录下找到相同文件名的文件,则返回存在相同文件名消息给客户端,跳转执行步骤3);否则,将待重命名文件的新文件名进行哈希,在文件元数据服务器集群中根据当前文件的哈希值找到负责当前文件的目标节点;
5.5.3)客户端向所述目标节点发送重命名文件请求,所述查询文件元数据请求信息包括父目录全局唯一标识符、旧文件名、新文件名和父目录所在目录元数据服务器编号; 5.5.4)所述目标节点接收客户端发送的重命名文件请求,首先在内存中查找当前文件的文件元数据,如果查找失败则使用父目录全局唯一标识符和当前文件的文件名,在对象存储服务器集群中定位存储所述文件元数据的对象存储服务器,然后从所述对象存储服务器中读取文件元数据;获取当前文件的元数据以后,检查客户端是否有修改权限,如果没有修改权限则向客户端返回没有权限的重命名失败消息,跳转执行步骤3);如果有修改权限,则更新文件元数据,通过新文件名哈希在文件元数据服务器集群中找到负责新文件名的新目标节点,将文件重命名信息和新文件元数据发送给所述新目标节点,所述新目标节点接收并缓存文件重命名信息和新文件元数据,然后将文件重命名信息和新文件元数据提交到存储到指定的对象存储服务器;同时所述目标节点向负责父目录的目录元数据服务器发送文件重命名请求,负责父目录的目录元数据服务器收到文件重命名请求,根据文件重命名请求更新父目录元数据中对应当前文件的文件名;最后向客户端发送重命名文件成功消息;
5.5.5)客户端收到目标节点发送的消息并返回给用户,跳转执行步骤3);
5.6)执行删除文件:
5.6.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到当前文件父目录的元数据信息后返回执行步骤5.6.2);
5.6.2)将当前文件的文件名进行哈希,在文件元数据服务器集群中根据当前文件的哈希值找到负责待删除文件的目标节点;
5.6.3)客户端向所述目标节点发送删除文件请求,所述删除文件请求包含父目录全局唯一标识符、待删除文件名和负责父目录的目录元数据服务器编号;
5.6.4)所述目标节点接收删除文件请求,首先在内存中查找当前文件的文件元数据,如果查找失败则使用父目录全局唯一标识符和当前文件的文件名,在对象存储服务器集群中定位存储所述文件元数据的对象存储服务器,然后从所述对象存储服务器中读取当前文件的文件元数据;最后获取当前文件的文件元数据以后,检查客户端是否删除权限,如果没有删除权限,则向客户端返回没有权限的删除失败消息,跳转执行步骤3);如果有删除权限,则删除当前文件的元数据,并向父目录所在的目录元数据服务器发送删除文件请求,父目录所在的目录元数据服务器收到删除文件请求,删除父目录元数据信息中的该文件的信息;最后向客户端发送删除文件成功消息;
5.6.5)客户端收到目标节点发送的消息并返回给用户,跳转执行步骤3)。所述目录元数据服务器对目录元数据的修改均通过更新日志定时进行,其详细步骤如下:首先目录元数据服务器在需要修改目录元数据时将对目录元数据的修改生成更新日志并缓存,然后目录元数据服务器定时检查本地缓存的更新日志,然后根据更新日志哈希目标目录的完整路径,根据哈希值与对象存储服务器的映射关系表定位负责目标目录的对象存储服务器,并将对目录元数据的修改提交给负责目标目录的对象存储服务器执行对目录元数据的修改;
所述文件元数据服务器对文件元数据的修改均通过更新日志进行,其详细步骤如下:首先文件元数据服务器在需要修改文件元数据时将对文件元数据的修改生成更新日志并缓存,然后文件元数据服务器定时检查本地缓存的更新日志,然后根据更新日志哈希目标文件父目录的全局唯一标识符和目标文件的文件名,根据哈希值与对象存储服务器的映射关系表定位负责当前文件的对象存储服务器,并将对文件元数据的修改提交给负责目标文件的对象存储服务器执行对文件元数据的修改。本发明具有下述优点:
1、本发明在创建目录时通过为每个目录分配一个全局唯一标识符,通过根据请求文件的父目录全局唯一标识符和文件名的哈希映射对象存储服务器,使得每台文件元数据服务器的负载都较为均衡,有效避免了在重命名目录时文件元数据的迁移,能够提高文件系统的存储性能。2、本发明根据请求文件的父目录全局唯一标识符和文件名的哈希访问对象存储服务器中存储的文件元数据,因此能够减少各个文件元数据服务器上前缀目录的重迭缓存,提高了文件元数据服务器的内存利用率和Cache命中率,消除了在各个文件元数据服务器上维护目录一致性带来的开销。3、本发明建立用于管理目录元数据的目录元数据服务器集群、用于管理文件元数据的文件元数据服务器集群,建立用于提供基于对象接口的数据存储服务的对象存储服务器集群,因此能够克服目录元数据服务器、文件元数据服务器、对象存储服务器三者中任何一种面临较大负载时发生的性能瓶颈问题,具有扩展性好的优点。4、本发明在所有目录元数据服务器集群中建立基于计数的布隆过滤器,目录元数据服务器集群中的目录元数据服务器之间共享基于计数的布隆过滤器,通过使用布隆过滤器来反映哪些目录的元数据存储在当前目录元数据服务器中,有效提高了访问目录元数据的性能。5、本发明在创建目录时随机选择目录元数据服务器,通过随机分布目录元数据在各个目录元数据服务器上,使得各个目录的元数据较为均匀的分布在各目录元数据服务器上,使得每台目录元数据服务器的负载都较为均衡,能够避免目录元数据服务器成为系统瓶颈。6、本发明根据目录的完整路径名哈希映射对象存储服务器中存储的目录元数据,根据请求文件的文件名哈希来映射文件元数据服务器,根据请求文件的父目录全局唯一标识符和文件名的哈希映射对象存储服务器,通过上述哈希映射方式来确定该文件所在文件元数据服务器的方式,使得每台文件元数据服务器的负载都较为均衡。


图1为本发明实施例的方法流程示意图。图2为应用本发明实施例的分布式文件系统的网络拓扑结构示意图。图3为本发明实施例目录元数据的数据结构示意图。图4为本发明基于计数的布隆过滤器数组映射原理对比示意图,其中(a)为传统布隆过滤器数组映射原理示意图,(b)为基于计数的布隆过滤器数组映射原理示意图。图5为本发明实施例中FMDS和OST的映射关系说明示意图。图6为本发明实施例中创建目录的流程示意图。图7为本发明实施例中创建文件的流程示意图。
具体实施方式
如图1所示,本实施例面向高性能计算的分布式文件系统元数据管理方法的实施步骤如下:
1)建立用于管理目录元数据的目录元数据服务器集群、用于管理文件元数据的文件元数据服务器集群,建立用于为目录元数据服务器集群和文件元数据服务器集群提供对象接口数据存储服务的对象存储服务器集群;
2)在所有目录元数据服务器集群中建立布隆过滤器,目录元数据服务器集群中的目录元数据服务器之间共享布隆过滤器;
3)在客户端的操作请求到来时,若操作请求为目录操作请求时跳转执行步骤4);若操作请求为文件操作请求时跳转执行步骤5);
4)目录元数据服务器集群响应客户端的目录操作请求对目录元数据进行管理,为每个目录分配一个全局唯一标识符,根据布隆过滤器数组记录来判断负责目录请求的目录元数据服务器,并根据目录的完整路径名哈希访问对象存储服务器中存储的目录元数据;
5)文件元数据服务器集群响应客户端的文件操作请求对文件元数据进行管理,根据请求文件的文件名哈希来判断负责文件元数据的文件元数据服务器,并根据请求文件的父目录全局唯一标识符和文件名的哈希访问对象存储服务器中存储的文件元数据。如图2所示,应用于本实施例的分布式文件系统由多个客户端(Client)、多个目录元数据服务器(DMDS)组成的目录元数据服务器集群、多个文件元数据服务器(FMDS)组成的文件元数据服务器集群、多个对象存储服务器(多个0ST)组成的对象存储服务器集群组成;DMDS和FMDS分别将相应的元数据持久化存储到对应的OST上。本实施例通过目录元数据服务器和文件元数据服务器的分工协作为整个存储系统提供统一且一致的名字空间,管理客户端的文件目录访问权限,来达到管理文件系统元数据的目的;客户端则通过高速网络向目录元数据服务器集群执行目录元数据访问、向文件元数据服务器集群执行文件元数据访问,对象存储服务器位于目录元数据服务器集群和文件元数据服务器集群的极端,对于客户端而言是透明的。对象存储服务器(Object Storage Target,简称0ST)负责底层数据块分配、布局,验证、响应相应的数据请求,提供一个基于对象接口的数据存储服务。目录元数据服务器集群包含多个通过网络相连的目录元数据服务器,目录元数据服务器(Directory Metadata Server,简称DMDS)负责管理目录元数据,包括查询、创建、更新、删除和存储元数据到OST上等功能。文件元数据服务器集群包含多个通过网络相连的文件元数据服务器,文件元数据服务器(File Metadata Server,简称FMDS)负责管理文件元数据,包括查询、创建、更新、删除和存储元数据到OST上等功能。目录元数据服务器和文件元数据服务器均通过网络与对象存储服务器相连。在面向高性能计算的PB级(以及更高级的)文件系统中,目录对象的数量较文件对象的数量小,但只采用一台DMDS来提供目录元数据服务会让该台DMDS成为整个分布式文件系统的性能瓶颈,而本实施例由多台DMDS组成的目录元数据服务器集群来提供目录元数据服务,由多台FMDS组成的文件元数据服务器集群来提供文件元数据服务,目录元数据服务器集群、文件元数据服务器集群、对象存储服务器集群中的节点数量可以根据需要进行定制,从而能够解决现有技术的目录元数据服务成为整个分布式文件系统瓶颈的问题,而且具有扩展性好的优点。如图3所示,本实施例步骤I)建立的对象存储服务器集群中存储的目录元数据结构为:DirId、DirName、ACLf、ACLp> AtFMDS 和 InodePointer, DirId 代表目录在被创建时生成的全局唯一标识符,DirId的生存周期和目录本身一样;DirName代表目录的完整路径名;ACLf代表在创建目录时给目录赋予的文件权限;ACLp代表目录的路径权限,ACLp由目录自身的文件权限ACLf与父目录的路径权限ACLp相与操作得到;AtFMDS代表目录下文件存放的型别标识,用于判断目录下所有文件的文件元数据在文件元数据服务器集群中的分布类型;InodePointer代表目录层次结构指针,用于指向目录包含的文件和子目录构成的树形结构,目录包含的文件和子目录构成的B树通过目录的全局唯一标识符进行索引。本实施例中目录元数据结构信息的具体含义如下:(I) Dirld,目录的全局唯一标识符,在创建目录时生成。DirId的生存周期和目录本身一样,除非目录被删除,而修改目录名等操作DirID都不会发生变化;(2) DirName,目录的完整路径名,如/usr/wl/dl等;(3)ACLf,目录的文件权限。在创建目录时给目录赋予的权限(将目录当做一个文件看待);(4)ACLp,目录的路径权限。目录的路径权限ACLp由目录自身的文件权限ACLf与父目录的路径权限ACLp相与操作得到;(5) AtFMDS,目录下文件存放的型别标识。当AtFMDS为一个非零值的时候(如某个FMDS的编号),它表示该目录下所有的文件的元数据都将被存在一个文件元数据服务器FMDS上。在目录规模较小且不会发生大量客户端并发访问的情况下,将一个目录下所有文件的元数据存在一个FMDS上,这有利于实现对一个目录下文件元数据的预取;当AtFMDS为零时,表示该目录下的文件元数据将采用哈希方法分布在FMDS上。这适用于一个规模较大且会出现大量并发访问目录下文件元数据的情形。AtFMDS的值由客户端在创建目录时决定,即客户端可以决定将该目录下所有文件都分布在一个FMDS上还是哈希分布在所有的FMDS上,这样的设计方法使得客户可以根据应用的文件I/O特点来决定文件元数据的存放方式。由于第一种情形与第二种情形只是存在文件元数据分布方式的不同,在下面描述创建文件等流程时,只考虑第二种情形;(6) InodePointer,目录层次结构指针,用以表示该目录包含哪些文件和子目录。目录下的每个文件构成一个结点(以文件名标识),每个子目录构成一个结点(以目录名标识),所有的文件结点和子目录结点构成一棵B树。目录所指向的B树由目录的全局唯一标识DirId进行索引。 本实施例中,目录的路径权限ACLp由文件权限ACLf与父目录的路径权限ACLp相与操作得到。以在目录/home/bgp下新建目录dl为例,生成/home/bgp/dl路径权限的过程如下:
(1)查询/home/bgp的路径权限,假设为rwxr-xr-x,则表明客户端具有在/home/bgp目录下创建新目录的权限;
(2)客户端设定的新建目录dl的访问权限属性为rwxr—r—;即表明目录dl的文件权限 ACLf 为 rwxr—r—;
(3)根据父目录/home/bgp的路径权限和dl的文件权限构造目录/home/bgp/dl的路径权限为rwxr—r—。本实施例通过上述权限处理操作,生成目录的路径权限ACLp只能在父目录的路径权限ACLp内进行继承,并且在继承时通过目录新建请求中指定的文件权限ACLf进行有限选择,使得目录安全管理的可靠性更好。本实施例步骤I)建立的对象存储服务器集群中存储的文件元数据结构包括DirIcUFileName和FileMeta,其中DirId代表文件所在目录的全局唯一标识,FileName代表文件的文件名(不包含路径项),FileMeta代表包括文件长度、读写权限、修改时间和文件数据的布局信息在内的文件具体元数据信息。如图4 (a)所示,布隆过滤器(BF)的基本思想是源于通过引入多个哈希函数来解决单个哈希函数时的冲突问题,当每个哈希函数都告诉我们该元素在集合中时,才能确定该元素存在于集合之中。BF使用一个m比特的数组来保存信息,使用k个独立的哈希函数将集合中的每一个元素映射到U,...,!!!}的范围中。初始时,位数组的每一位都设置为O。添加一个元素X时,使用k个哈希函数得到k个哈希值,然后将数组中对应的比特位设置为I,即第i个哈希函数将Hashi (x)位置设置为I ;在判断一个元素y是否属于集合时,对y使用k个哈希函数得到k个哈希值,如果所有Hashi (y)对应的位置都是I (I彡i彡k),可以认为I是集合中的元素,否则I就不是集合中的元素,显然判断某个元素一定在集合中存在一定的错判概率。本实施例采用布隆过滤器(Bloom Filter,简称BF)来反映当前有哪些目录的元数据存储在该DMDS的内存中,而且DMDS之间通过布隆过滤器共享实现全局信息的快速查询。BF是一种空间效率很高的随机数据结构,是一个判断元素是否存在于集合之中的快速概率算法。它利用位数组简洁的表示一个集合,并判断一个元素是否属于这个集合。如果判断元素不在集合中,那么可以肯定不在。如果判断一个元素存在于集合之中,会有一定的概率判断错误。由于客户端对于目录元数据的访问强度没有文件元数据高,通过在判断错误的情况下进行相应的错误处理,亦能够保证正确处理请求。但BF带来的性能效益会远远高出其判断错误时的性能损失。但是,这种传统的BF还存在一个问题即不能从集合中删除元素,因为该元素对应的位会牵动到其它的元素,在DMDS中直接使用传统的BF是不合适的,因为客户端会有删除某个目录的 需求,一般在删除目录时需要借助包括标记在内的其它手段才能实现目录元数据信息的伪删除,导致存储资源的利用率较低。本实施例中,步骤2)建立的布隆过滤器为基于计数的布隆过滤器,基于计数的布隆过滤器使用一个m比特的整数数组来保存信息,使用k个独立的哈希函数将集合中的每一个目录元素映射到{1,...,ηι}的范围中,初始化时{1,...,ηι}中的每一位整数都设置为O,每个哈希函数对应一个大小为m/k位的位数组,k个位数组构成基于计数的布隆过滤器的布隆过滤器位数组;当目录元数据服务器添加一个目录时,目录元数据服务器通过多个哈希函数对添加目录的完整路径进行哈希运算得到k个哈希值,将k个哈希值在整数数组中对应k个整数位置的整数值分别加I ;当目录元数据服务器删除一个目录时,目录元数据服务器通过多个哈希函数对删除目录进行哈希运算得到k个哈希值,将k个哈希值在整数数组中对应k个整数位置的整数值分别减I ;当判定目录元数据服务器是否为负责指定目录的节点时,通过多个哈希函数对指定目录进行哈希运算得到的k个哈希值,判断目录元数据服务器的整数数组中对应k个整数位置的整数值是否都大于0,如果都大于O则判定该目录元数据服务器为负责指定目录的节点。如图4 (b)所示,每个哈希函数Hashi对应一个大小为m/k的位数组BFi (BF1,BF2,BF3),k个BFi构成一个BF位数组(即BF Array,简称BFA)。添加一个元素xl时,使用k个哈希函数得到k个哈希值,然后将对应的位数组BFi的对应位置(BF1的第3个,BF2的第4个,BF3的第2个)设置为I。如果添加下一个元素x2,发生与xl冲突的情况时,则将冲突位置(BF2的第4个)的值加I。这样设计的好处是可以删除一个元素,同时不会发生在某一位置不同哈希函数发生冲突的情况(即HashiUkHash^y)的情形),代价是比原先的m比特空间有所增大,每一个位不能只使用一个比特来表示了,而需要几个比特来记录发生冲突的次数。参见图4中下半部分,第2个BFA中从上往下第4个整数数值为2,两个目录在该整数位置发生冲突,当其中一个目录被删除时,该整数位置减I后,该整数位置变成1,仍然能够保留另一个目录的位置信息。但是,这样的代价是比原先的m比特空间有所增大,每一个位不能只使用一个比特来表示了,而需要几个比特来记录发生冲突的次数。但是,通过基于计数的BF,能够方便实现对目录元数据的删除,目录删除后OST的存储空间能够得到回收,存储资源的利用率较高。本实施例中,采用下述三种哈希策略:
(O使用文件名哈希来确定该文件的元数据由哪台FMDS负责。(2)使用文件父目录DirId和文件名哈希来确定文件的元数据最终保存在哪个OST 上。(3)使用目录完整路径名哈希来确定目录的元数据最终保存在哪个OST上。例如:客户端想要访问文件”/a/b/filec”,则使用filec的哈希结果来确定文件元数据位于哪一台FMDS上,FMDS使用/a/b的目录DirId和filec来确定该文件的元数据存放在哪个OST上。对于目录元数据,如目录b,则使用/a/b的哈希结果来确定该目录的元数据位于哪一个OST上。本实施例通过使用上述哈希策略,在重命名目录时,只需要在OST之间迁移对应的目录(以及子目录)元数据,而无需迁移目录下(以及子目录下)文件的元数据。与使用文件路径名进行文件元数据和OST之间的映射这种方式相比,大大减低了迁移的数据量。如图5所示,本实施例在使用文件名哈希来确定FMDS时,第0-1000个哈希值对应编号为#1的FMDS,第1001-2000个哈希值对应编号为#2的FMDS,第2001-3000个哈希值对应编号为#3的FMDS,第3001-4000个哈希值对应编号为#4的FMDS,本实施例仅以4个FMDS进行举例说明,更多的FMDS映射依次类推,在此不再赘述。本实施例在使用文件父目录DirId和文件名哈希来确定OST时,第0-100个哈希值对应编号为#1的0ST,第101-200个哈希值对应编号为#2的0ST,第201-300个哈希值对应编号为#3的0ST,第301-400个哈希值对应编号为#4的0ST,本实施例仅以4个OST进行举例说明,更多的OST映射依次类推,在此不再赘述。本实施例中,步骤4)的详细步骤如下:
4.1)客户端判断目录操作请求类型,当目录操作请求为创建目录时跳转执行步骤
4.2),当目录操作请求为查询目录元数据时跳转执行步骤4.3),当目录操作请求为更新目录权限时跳转执行步骤4.4),当目录操作请求为重命名目录时跳转执行步骤4.5),当目录操作请求为删除目录时跳转执行步骤4.6)。4.2)执行创建目录:
4.2.1)客户端从缓存中查找当前目录的父目录元数据,如果找到则查询客户端是否具有在父目录下创建目录的权限,如果没有权限则返回用户没有权限在父目录下创建目录的错误提示并返回执行步骤3);如果有权限创建或者在缓存中没有找到父目录元数据信息,从目录元数据服务器集群中随机选择一个指定节点发送创建目录请求;
4.2.2)指定节点接收到创建目录请求,首先通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的父目录的目标节点,如果本节点不是目标节点,则向目标节点请求父目录路径权限,目标节点查询父目录路径权限并返回给指定节点;否则本节点直接查询获取父目录路径权限;如图6所示,本实施例中目录元数据服务器I (DMDSl)并非负责父目录元数据信息的节点,父目录元数据信息由目录元数据服务器2 (DMDS2)负责,因此向目标节点DMDS2请求父目录路径权限并跳转执行步骤4.2.3);
4.2.3)指定节点将父目录路径权限缓存,判断父目录路径权限是否允许客户端创建目录,如果不允许则返回出错信息给客户端并跳转执行步骤3);如果允许则指定节点创建目录,为新建目录生成一个全局唯一标识符,将目录操作请求中的指定的文件权限和父目录路径权限进行相与操作得到新建目录的路径权限,根据全局唯一标识符、目录操作请求中的携带的完整路径和文件权限、新建目录的路径权限生成目录元数据,并将目录元数据根据当前目录的完整路径哈希将当前目录的目录元数据提交到对象存储服务器进行存储;
4.2.4)指定节点将当前目录的目录元数据存入缓存中,并向负责父目录的目标节点发送更新目录元数据请求,目标节点接收请求并更新父目录元数据信息;同时,指定节点将新创建目录存入本地的布隆过滤器,并将布隆过滤器的更新项发送给目录元数据服务器集群中的其它节点进行同步;指定节点向客户端回复目录创建消息,消息包含当前目录的全局唯一标识符、文件权限、路径权限和所在的目录元数据服务器编号;
4.2.5)客户端将接收到的目录创建消息加入本地缓存中并向用户显示操作结果,跳转执行步骤3)。4.3 )执行查询目录元数据:
4.3.1)客户端首先在本地缓存中查找是否有待当前目录的目录元数据信息,如果有则直接返回结果给客户端,跳转执行步骤3);否则跳转执行步骤4.3.2);
4.3.2)客户端随机向目录元数据服务器集群中随机选择一个指定节点发送目录元数据查询请求;
4.3.3)指定节点通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的目标节点,如果指定节点并非目标节点,则指定节点将目录元数据查询请求转发给目标节点,否则指定节点即为目标节点;
4.3.4)目标节点首先在内存中查找待查询目录的目录元数据信息,如果在内存中查找失败,则根据当前目录的完整路径名哈希获取对象存储服务器中存储的目录元数据信息,如果查询目录元数据请求为目录列表请求命令,则还通过目录层次结构指针获取当前目录所包含的子目录和文件信息数据,最终将获得的操作结果发送给客户端;
4.3.5)客户端接收目标节点发送的操作结果,将目录元数据信息加入到缓存中,将目录操作请求的操作结果返回给用户端,跳转执行步骤3)。4.4)执行更新目录权限:
4.4.1)客户端首先在本地缓存中查找目录元数据服务器集群中负责当前目录的目标节点,如果查找成功,则向目标节点发送更新目录权限请求,跳转执行步骤4.4.3),否则向目录元数据服务器集群中随机选择一个指定节点发送更新目录权限请求,跳转执行步骤4.4.2);
4.4.2)指定节点通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的目标节点,如果指定节点并非目标节点,则指定节点将更新目录权限请求转发给目标节点,否则指定节点即为目标节点; 4.4.3)目标节点修改当前目录的文件权限和路径权限,找出当前目录所包含的子目录,通过本节点以及其它节点共享的布隆过滤器查找负责待更新目录下各个子目录的关联节点,并向关联节点分别发送更新目录路径权限请求;
4.4.4)关联节点通过本节点以及其它节点共享的布隆过滤器查找负责待更新目录下各个子目录的下一级关联节点,并向下一级关联节点分别发送更新目录路径权限请求,接收到更新目录请求的关联节点分别执行更新目录的路径权限,将操作结果返回给所述目标节点;重复执行上述递归过程,直到待更新目录下所有子目录的路径权限都更新成功;可见,更新目录权限信息是一个递归的过程,更改一个父目录的权限信息,其所有子目录都要修改相应的路径权限,父目录在名字空间中的层次越高,整个操作的代价将越大,所以应尽可能的减少更改高层目录的权限信息;
4.4.5)目标节点接收到各级关联节点发送来的子目录的路径权限更新结果,并将操作结果返回给用户端;
4.4.6)客户端接收到目标节点发送的操作结果并返回给用户,跳转执行步骤3)。4.5)执行重命名目录:
4.5.1)客户端首先在本地缓存中查找目录元数据服务器集群中负责当前目录的目标节点,如果查找成功,则向目标节点发送重命名目录请求,进入步骤4.5.3),否则随机向目录元数据服务器集群中随机选择一个指定节点发送重命名目录请求,跳转执行步骤4.5.2);
4.5.2)指定节点通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的目标节点,如果指定节点并非目标节点,则指定节点将重命名目录请求转发给目标节点,否则指定节点即为目标节点;
4.5.3)目标节点执行重命名目录,通过本节点以及其它节点共享的布隆过滤器查找负责当前下各个子目录的关联节点,并向关联节点分别发送重命名目录请求;
4.5.4)关联节点通过本节点以及其它节点共享的布隆过滤器递归查找负责当前目录下各个子目录的下一级关联节点,并向下一级关联节点分别发送重命名目录请求,接收到重命名目录请求的关联节点分别执行重命名目录;重复执行上述递归过程,直到待重命名目录下所有子目录都重命名成功后,将操作结果返回给目标节点;
4.5.5)目标节点接收到各级关联节点发送来的子目录的重命名目录结果,并将操作结果返回给用户端;
4.5.6)客户端接收到目标节点发送的操作结果并将操作结果返回给用户,跳转执行步骤3)。参见前述步骤4.5.1) 4.5.6),在进行目录重命名时,本实施例只需要对所有目录路径名包含该目录的目录进行重命名操作,而无需移动相关的目录元数据和文件元数据,最大程度的降低了重命名目录的开销。4.6)执行删除目录:
4.6.1)客户端首先在本地缓存中查找目录元数据服务器集群中负责待删除目录的目标节点,如果查找成功,则向目标节点发送删除目录请求,进入步骤4.6.3),否则随机向目录元数据服务器集群中随机选择一个指定节点DMDSl发送删除目录请求,跳转执行步骤4.6.2); 4.6.2)指定节点DMDSl通过本节点以及其它节点共享的基于计数的布隆过滤器查找负责待删除目录的目标节点(目标节点对应目录的BFA的k个位置的整数都大于O,则目录由目标节点负责),如果指定节点DMDSl并非目标节点,则指定节点DMDSl将删除目录请求转发给目标节点,否则指定节点即为目标节点;本实施例中,目标节点为DMDS2,指定节点DMDSl将删除目录请求转发给目标节点DMDS2 ;
4.6.3)目标节点DMDS2执行删除目录,通过本节点以及其它节点共享的基于计数的布隆过滤器查找负责待删除目录下各个子目录的关联节点,并向关联节点分别发送删除目录请求;
4.6.4)关联节点通过本节点以及其它节点共享的基于计数的布隆过滤器递归查找负责待删除目录下各个子目录的下一级关联节点,并向下一级关联节点分别发送删除目录请求,接收到删除目录请求的关联节点执行删除目录;重复执行上述递归过程,直到待删除目录下所有子目录都删除成功后,将操作结果返回给目标节点DMDS2 ;最后目标节点DMDS2将执行结果返回给用户端;
4.6.5)客户端接收到目标节点DMDS2发送的操作结果并返回给用户,跳转执行步骤3)。本实施例在上述执行重命名目录时,所有对于元数据的修改都将被提交到更新日志,由更新日志定期将元数据持久化存储到底层OST上。在进行目录重命名时,本发明只需要对所有目录路径名包含该目录的目录进行重命名操作,而无需移动相关的目录元数据和文件元数据,最大程度的降低了重命名目录的开销。本实施例中,目录元数据服务器对目录元数据的修改均通过更新日志定时进行,其详细步骤如下:首先目录元数据服务器在需要修改目录元数据时将对目录元数据的修改生成更新日志并缓存,然后目录元数据服务器定时检查本地缓存的更新日志,然后根据更新日志哈希目标目录的完整路径,根据哈希值与对象存储服务器的映射关系表定位负责目标目录的对象存储服务器,并将对目录元数据的修改提交给负责目标目录的对象存储服务器执行对目录元数据的修改;通过上述步骤,使得DMDS所有对于目录元数据的修改(包括创建、更新、重命名、删除)都将被提交到更新日志,由更新日志定期将元数据持久化存储到底层OST上。本实施例中,客户端收到目录元数据信息后会立即缓存目录的元数据信息,以便在下次访问相同目录的时候先从缓存中查找目录元数据信息,若命中,则不需要再次访问DMDS0根据局部性原理,用户接着访问同一目录下文件的概率很高,所以访问DMDS的开销被平摊,极大的提高了元数据的访问效率。当客户端检查到Cache中缓存项超过了有效期,将主动把相关的目录元数据信息从缓存中移除。本实施例中,步骤5)的详细步骤如下:
5.1)客户端判断文件操作请求类型,当文件操作请求为创建文件时跳转执行步骤5.2),当文件操作请求为查询文件元数据时跳转执行步骤5.3),当文件操作请求为更新文件元数据时跳转执行步骤5.4),当文件操作请求为重命名文件时跳转执行步骤5.5),当文件操作请求为删除文件时跳转执行步骤5.6)。5.2)执行创建文件:
5.2.1)客户端首先在本地缓存中查找当前文件父目录的目录元数据信息,若找到父目录的目录元数据信息,则查询父目录权限信息判断客户端是否具有创建文件权限,如果客户端没有创建文件权限,则返回消息给用户并跳转执行步骤3);如果客户端有创建文件权限则跳转执行步骤5.2.3);若客户端没有找到父目录的目录元数据信息,则跳转执行
4.3)查询当前文件父目录的目录元数据,收到父目录的目录元数据信息后返回执行步骤
5.2.2);参见图7所示,本实施例中客户端没有找到父目录的目录元数据信息,首先请求目录元数据服务器I (DMDSl)父目录的目录元数据信息,DMDSl仍未查找到并转发查找请求给负责父目录的目录元数据服务器2 (DMDS2);
5.2.2)客户端客户缓存的目录创建消息中的路径权限信息判断当前文件父目录是否允许客户端创建文件,如果不允许客户端创建文件,则返回消息给用户并跳转执行步骤3);否则跳转步骤5.2.3);
5.2.3)根据当前文件的文件名进行哈希,根据哈希值找到在文件元数据服务器集群中所映射的指定节点,发送文件创建请求到所述指定节点,发送的信息包含当前文件完整路径名、父目录全局唯一标识符和父目录所在的目录元数据服务器编号;
5.2.4)指定节点根据文件创建请求生成当前文件的元数据,根据父目录全局唯一标识符和文件名将当前文件的元数据提交到对象存储服务器进行存储;
5.2.5)指定节点将当前文件的元数据存入缓存中,然后将文件创建成功消息发送到负责当前文件父目录的目录元数据服务器,目录元数据服务器将当前文件父目录的目录元数据信息更新至指定的对象存储服务器;
5.2.6)指定节点将创建新文件成功的消息发给客户端;
5.2.7)客户端接收到文件创建成功消息,向用户提示文件创建成功,跳转执行步骤3)。5.3 )执行查询文件元数据:
5.3.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到待查询文件父目录的元数据信息后返回执行步骤5.3.2);
5.3.2)客户端将当前文件的文件名进行哈希,在文件元数据服务器集群中根据待查询文件的哈希值找到负责当前文件的目标节点;
5.3.3)客户端向目标节点发送查询文件元数据请求,查询文件元数据请求信息包括父目录全局唯一标识符、待查询文件的文件名和文件完整路径;
5.3.4)目标节点收到客户端的查询文件元数据请求,首先在内存中查找当前文件的文件元数据,如果查找成功则直接跳转执行步骤5.3.5);如果查找失败则使用父目录全局唯一标识符和待查询文件的文件名,在对象存储服务器集群中定位存储文件元数据的对象存储服务器,然后从对象存储服务器中读取当前文件的文件元数据;
5.3.5)目标节点向客户端发送待查询文件的文件元数据;
5.3.6)客户端收到目标节点发送的文件元数据,返回给用户并跳转执行步骤3)。5.4)执行更新文件元数据:
5.4.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到当前文件父目录的元数据信息后返回执行步骤5.4.2);
5.4.2)客户端将当前文件的文件名进行哈希,在文件元数据服务器集群中根据待更新文件的哈希值找到负责待更新文件的目标节点;
5.4.3)客户端向目标节点发送更新文件元数据请求,查询文件元数据请求信息包括父目录全局唯一标识符和新的文件元数据;
5.4.4)目标节点收到客户端的更新文件元数据请求,首先在内存中查找当前文件的文件元数据,如果查找失败则使用父目录全局唯一标识符和待更新文件的文件名,在对象存储服务器集群中定位存储文件元数据的对象存储服务器,然后从对象存储服务器中读取文件元数据;获取更新文件元数据以后,检查客户端是否修改权限,如果没有修改权限则向客户端返回没有权限的更新失败消息,跳转执行步骤3);如果有修改权限则更新文件元数据并向客户端发送更新成功消息;
5.4.5)客户端收到目标节点的发送的消息后返回给用户,跳转执行步骤3)。5.5 )执行重命名文件:
5.5.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到待重命名文件父目录的元数据信息后返回执行步骤5.5.2);
5.5.2)根据当前文件父目录的元数据信息判断父目录下是否有待重命名文件新名称相同的文件,如果在父目录下找到相同文件名的文件,则返回存在相同文件名消息给客户端,跳转执行步骤3);否则,将待重命名文件的新文件名进行哈希,在文件元数据服务器集群中根据当前文件的哈希值找到负责当前文件的目标节点;
5.5.3)客户端向所述目标节点发送重命名文件请求,所述查询文件元数据请求信息包括父目录全局唯一标识符、旧文件名、新文件名和父目录所在目录元数据服务器编号;
5.5.4)目标节点接收客户端发送的重命名文件请求,首先在内存中查找当前文件的文件元数据,如果查找失败则使用父目录全局唯一标识符和当前文件的文件名,在对象存储服务器集群中定位存储文件元数据的对象存储服务器,然后从对象存储服务器中读取文件元数据;获取当前文件的元数据以后,检查客户端是否有修改权限,如果没有修改权限则向客户端返回没有权限的重命名失败消息,跳转执行步骤3);如果有修改权限,则更新文件元数据,通过新文件名哈希在文件元数据服务器集群中找到负责新文件名的新目标节点,将文件重命名信息和新文件元数据发送给新目标节点,新目标节点接收并缓存文件重命名信息和新文件元数据,然后将文件重命名信息和新文件元数据提交到存储到指定的对象存储服务器;同时目标节点向负责父目录的目录元数据服务器发送文件重命名请求,负责父目录的目录元数据服务器收到文件重命名请求,根据文件重命名请求更新父目录元数据中对应当前文件的文件名;最后向客户端发送重命名文件成功消息;
5.5.5)客户端收到目标节点发送的消息并返回给用户,跳转执行步骤3)。5.6)执行删除文件:
5.6.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到当前文件父目录的元数据信息后返回执行步骤5.6.2);
5.6.2)将当前文件的文件名进行哈希,在文件元数据服务器集群中根据当前文件的哈希值找到负责待删除文件的目标节点;
5.6.3)客户端向目标节点发送删除文件请求,删除文件请求包含父目录全局唯一标识符、待删除文件名和负责父目录的目录元数据服务器编号;
5.6.4)目标节点接收删除文件请求,首先在内存中查找当前文件的文件元数据,如果查找失败则使用父目录全局唯一标识符和当前文件的文件名,在对象存储服务器集群中定位存储文件元数据的对象存储服务器,然后从对象存储服务器中读取当前文件的文件元数据;最后获取当前文件的文件元数据以后,检查客户端是否删除权限,如果没有删除权限,则向客户端返回没有权限的删除失败消息,跳转执行步骤3);如果有删除权限,则删除当前文件的元数据,并向父目录所在的目录元数据服务器发送删除文件请求,父目录所在的目录元数据服务器收到删除文件请求,删除父目录元数据信息中的该文件的信息;最后向客户端发送删除文件成功消息;
5.6.5)客户端收到目标节点发送的消息并返回给用户,跳转执行步骤3)。本实施例中,文件元数据服务器对文件元数据的修改均通过更新日志进行,其详细步骤如下:首先文件元数据服务器在需要修改文件元数据时将对文件元数据的修改生成更新日志并缓存,然后文件元数据服务器定时检查本地缓存的更新日志,然后根据更新日志哈希目标文件父目录的全局唯一标识符和目标文件的文件名,根据哈希值与对象存储服务器的映射关系表定位负责当前文件的对象存储服务器,并将对文件元数据的修改提交给负责目标文件的对象存储服务器执行对文件元数据的修改。通过上述步骤,使得FMDS所有对于文件元数据的修改(包括创建、更新、重命名、删除)都将被提交到更新日志,由更新日志定期将元数据持久化存储到底层OST上。以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种面向高性能计算的分布式文件系统元数据管理方法,其特征在于实施步骤如下: I)建立用于管理目录元数据的目录元数据服务器集群、用于管理文件元数据的文件元数据服务器集群,建立用于为目录元数据服务器集群和文件元数据服务器集群提供对象接口数据存储服务的对象存储服务器集群; 2 )在所有目录元数据服务器集群中建立布隆过滤器,所述目录元数据服务器集群中的目录元数据服务器之间共享布隆过滤器; 3)在客户端的操作请求到来时,若操作请求为目录操作请求时跳转执行步骤4);若操作请求为文件操作请求时跳转执行步骤5); 4)所述目录元数据服务器集群响应客户端的目录操作请求对目录元数据进行管理,为每个目录分配一个全局唯一标识符,根据布隆过滤器数组记录来判断负责目录请求的目录元数据服务器,并根据目录的完整路径名哈希访问对象存储服务器中存储的目录元数据; 5)所述文件元数据服务器集群响应客户端的文件操作请求对文件元数据进行管理,根据请求文件的文件名哈希来判断负责文件元数据的文件元数据服务器,并根据请求文件的父目录全局唯一标识符和文件名的哈希访问对象存储服务器中存储的文件元数据。
2.根据权利要求1所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述步骤I)建立的对象存储服务器集群中存储的目录元数据结构为:DirId、DirName、ACLf、ACLp> AtFMDS和InodePointer, DirId代表目录在被创建时生成的全局唯一标识符,DirId的生存周期和目录本身一样;DirName代表目录的完整路径名;ACLf代表在创建目录时给目录赋予的文件权限;ACLp代表目录的路径权限,ACLp由目录自身的文件权限ACLf与父目录的路径权限ACLp相与操作得到;AtFMDS代表目录下文件存放的型别标识,用于判断目录下所有 文件的文件元数据在文件元数据服务器集群中的分布类型;InodePointer代表目录层次结构指针,用于指向目录包含的文件和子目录构成的树形结构,所述目录包含的文件和子目录构成的B树通过目录的全局唯一标识符进行索引;所述步骤I)建立的对象存储服务器集群中存储的文件元数据结构包括Dirid、FileName和FileMeta,其中DirId代表文件所在目录的全局唯一标识符,FileName代表文件的文件名,FileMeta代表包括文件长度、读写权限、修改时间和文件数据的布局信息在内的文件具体元数据信息。
3.根据权利要求1或2所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述步骤2)建立的布隆过滤器为基于计数的布隆过滤器,所述基于计数的布隆过滤器使用一个m比特的整数数组来保存信息,使用k个独立的哈希函数将集合中的每一个目录元素映射到{1,...,ηι}的范围中,初始化时{1,...,ηι}中的每一位整数都设置为O,每个哈希函数对应一个大小为m/k位的位数组,所述k个位数组构成基于计数的布隆过滤器的布隆过滤器位数组;当目录元数据服务器添加一个目录时,所述目录元数据服务器通过多个哈希函数对添加目录的完整路径进行哈希运算得到k个哈希值,将所述k个哈希值在整数数组中对应k个整数位置的整数值分别加I ;当目录元数据服务器删除一个目录时,所述目录元数据服务器通过多个哈希函数对删除目录进行哈希运算得到k个哈希值,将所述k个哈希值在整数数组中对应k个整数位置的整数值分别减I ;当判定目录元数据服务器是否为负责指定目录的节点时,通过多个哈希函数对指定目录进行哈希运算得到的k个哈希值,判断所述目录元数据服务器的整数数组中对应k个整数位置的整数值是否都大于O,如果都大于O则判定该目录元数据服务器为负责指定目录的节点。
4.根据权利要求3所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述步骤4)的详细步骤如下: 4.1)客户端判断目录操作请求类型,当目录操作请求为创建目录时跳转执行步骤4.2),当目录操作请求为查询目录元数据时跳转执行步骤4.3),当目录操作请求为更新目录权限时跳转执行步骤4.4),当目录操作请求为重命名目录时跳转执行步骤4.5),当目录操作请求为删除目录时跳转执行步骤4.6); 4.2)执行创建目录: 4.2.1)客户端从缓存中查找当前目录的父目录元数据,如果找到则查询客户端是否具有在父目录下创建目录的权限,如果没有权限则返回用户没有权限在父目录下创建目录的错误提示并返回执行步骤3);如果有权限创建或者在缓存中没有找到父目录元数据信息,从目录元数据服务器集群中随机选择一个指定节点发送创建目录请求; 4.2.2)所述指定节点接收到创建目录请求,首先通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的父目录的目标节点,如果本节点不是目标节点,则向目标节点请求父目录路径权限,目标节点查询父目录路径权限并返回给所述指定节点;否则本节点直接查询获取父目录路径权限; 4.2.3)所述指定节点将父目录路径权限缓存,判断所述父目录路径权限是否允许客户端创建目录,如果不允许则返回出错信息给客户端并跳转执行步骤3);如果允许则指定节点创建目录,为新建目录生成一个全局唯一标识符,将目录操作请求中的指定的文件权限和父目录路径权限进行相与操作得到新建目录的路径权限,根据全局唯一标识符、目录操作请求中的携带的完整路径和文件权限、新建目录的路径权限生成目录元数据,并将目录元数据根据当前目录的完整路径哈希将当前目录的目录元数据提交到对象存储服务器进行存储; 4.2.4)所述指定节点将当前目录的目录元数据存入缓存中,并向负责父目录的目标节点发送更新目录元数据请求,所述目标节点接收请求并更新父目录元数据信息;同时,所述指定节点将新创建目录存入本地的布隆过滤器,并将布隆过滤器的更新项发送给目录元数据服务器集群中的其它节点进行同步;所述指定节点向客户端回复目录创建消息,所述消息包含当前目录的全局唯一标识符、文件权限、路径权限和所在的目录元数据服务器编号; 4.2.5)客户端将接收到的目录创建消息加入本地缓存中并向用户显示操作结果,跳转执行步骤3); 4.3)执行查询目录元数据: 4.3.1)客户端首先在本地缓存中查找是否有待当前目录的目录元数据信息,如果有则直接返回结果给客户端,跳转执行步骤3);否则跳转执行步骤4.3.2); 4.3.2)客户端随机向目录元数据服务器集群中随机选择一个指定节点发送目录元数据查询请求; 4.3.3)所述指定节点通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的目标节点,如果指定节点并非目标节点,则所述指定节点将目录元数据查询请求转发给目标节点,否则所述指定节点即为目标节点; · 4.3.4)所述目标节点首先在内存中查找待查询目录的目录元数据信息,如果在内存中查找失败,则根据当前目录的完整路径名哈希获取对象存储服务器中存储的目录元数据信息,如果查询目录元数据请求为目录列表请求命令,则还通过目录层次结构指针获取当前目录所包含的子目录和文件信息数据,最终将获得的操作结果发送给客户端; · 4.3.5)客户端接收所述目标节点发送的操作结果,将目录元数据信息加入到缓存中,将目录操作请求的操作结果返回给用户端,跳转执行步骤3); · 4.4)执行更新目录权限:· · 4.4.1)客户端首先在本地缓存中查找目录元数据服务器集群中负责当前目录的目标节点,如果查找成功,则向目标节点发送更新目录权限请求,跳转执行步骤4.4.3),否则向目录元数据服务器集群中随机选择一个指定节点发送更新目录权限请求,跳转执行步骤·4.4.2); ·4.4.2)所述指定节点通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的目标节点,如果所述指定节点并非目标节点,则所述指定节点将更新目录权限请求转发给目标节点,否则所述指定节点即为目标节点; ·4.4.3)所述目标节点修改当前目录的文件权限和路径权限,找出当前目录所包含的子目录,通过本节点以及其它节点共享的布隆过滤器查找负责待更新目录下各个子目录的关联节点,并向所述关联节点分别发送更新目录路径权限请求; ·4.4.4)所述关联节点通过本节点以及其它节点共享的布隆过滤器查找负责待更新目录下各个子目录的下一级关联节点,并向所述下一级关联节点分别发送更新目录路径权限请求,接收到更新目录请求的关联节点分别执行更新目录的路径权限,将操作结果返回给所述目标节点;重复执行上述递归过程,直到待更新目录下所有子目录的路径权限都更新成功; · 4.4.5)所述目标节点接收到各级关联节点发送来的子目录的路径权限更新结果,并将操作结果返回给用户端; ·4.4.6)客户端接收到所述目标节点发送的操作结果并返回给用户,跳转执行步骤3); ·4.5)执行重命名目录: ·4.5.1)客户端首先在本地缓存中查找目录元数据服务器集群中负责当前目录的目标节点,如果查找成功,则向目标节点发送重命名目录请求,进入步骤4.5.3),否则随机向目录元数据服务器集群中随机选择一个指定节点发送重命名目录请求,跳转执行步骤·4.5.2); · 4.5.2)所述指定节点通过本节点以及其它节点共享的布隆过滤器查找负责当前目录的目标节点,如果所述指定节点并非目标节点,则所述指定节点将重命名目录请求转发给目标节点,否则所述指定节点即为目标节点; ·4.5.3)所述目标节点执行重命名目录,通过本节点以及其它节点共享的布隆过滤器查找负责当前下各个子目录的关联节点,并向所述关联节点分别发送重命名目录请求; ·4.5.4)所述关联节点通过本节点以及其它节点共享的布隆过滤器递归查找负责当前目录下各个子目录的下一级关联节点,并向所述下一级关联节点分别发送重命名目录请求,接收到重命名目录请求的关联节点分别执行重命名目录;重复执行上述递归过程,直到待重命名目录下所有子目录都重命名成功后,将操作结果返回给所述目标节点; .4.5.5)所述目标节点接收到各级关联节点发送来的子目录的重命名目录结果,并将操作结果返回给用户端; .4.5.6)客户端接收到所述目标节点发送的操作结果并将操作结果返回给用户,跳转执行步骤3); .4.6)执行删除目录: .4.6.1)客户端首先在本地缓存中查找目录元数据服务器集群中负责待删除目录的目标节点,如果查找成功,则向目标节点发送删除目录请求,进入步骤4.6.3),否则随机向目录元数据服务器集群中随机选择一个指定节点发送删除目录请求,跳转执行步骤4.6.2); .4.6.2)所述指定节点通过本节点以及其它节点共享的基于计数的布隆过滤器查找负责待删除目录的目标节点,如果所述指定节点并非目标节点,则所述指定节点将删除目录请求转发给目标节点,否则所述指定节点即为目标节点; .4.6.3)所述目标节点执行删除目录,通过本节点以及其它节点共享的布隆过滤器查找负责当前目录下各个子目录的关联节点,并向所述关联节点分别发送删除目录请求; .4.6.4)所述关联节点通过本节点以及其它节点共享的布隆过滤器递归查找负责待删除目录下各个子目录的下一级关联节点,并向所述下一级关联节点分别发送删除目录请求,接收到删除目录请求的关联节点执行删除目录,将操作结果返回给所述目标节点;重复执行上述递归过程,直到当前目录下所有子目录都删除成功;最后,所述目标节点将执行结果返回给用户端; .4.6.5)客户端接收到所述目标节点发送的操作结果并返回给用户,跳转执行步骤3)。
5.根据权利要求4所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述步骤5)的详细步骤如下: 5.1)客户端判断文件操作请求类型,当文件操作请求为创建文件时跳转执行步骤5.2),当文件操作请求为查询文件元数据时跳转执行步骤5.3),当文件操作请求为更新文件元数据时跳转执行步骤5.4),当文件操作请求为重命名文件时跳转执行步骤5.5),当文件操作请求为删除文件时跳转执行步骤5.6); 5.2)执行创建文件: 5.2.1)客户端首先在本地缓存中查找当前文件父目录的目录元数据信息,若找到父目录的目录元数据信息,则查询父目录权限信息判断客户端是否具有创建文件权限,如果客户端没有创建文件权限,则返回消息给用户并跳转执行步骤3);如果客户端有创建文件权限则跳转执行步骤5.2.3);若客户端没有找到父目录的目录元数据信息,则跳转执行.4.3)查询当前文件父目录的目录元数据,收到父目录的目录元数据信息后返回执行步骤.5.2.2); .5.2.2)客户端客户缓存的目录创建消息中的路径权限信息判断当前文件父目录是否允许客户端创建文件,如果不允许客户端创建文件,则返回消息给用户并跳转执行步骤3);否则跳转步骤5.2.3); .5.2.3)根据当前文件的文件名进行哈希,根据哈希值找到在文件元数据服务器集群中所映射的指定节点,发送文件创建请求到所述指定节点,发送的信息包含当前文件完整路径名、父目录全局唯一标识符和父目录所在的目录元数据服务器编号;`5.2.4)所述指定节点根据文件创建请求生成当前文件的元数据,根据父目录全局唯一标识符和文件名将当前文件的元数据提交到对象存储服务器进行存储; ` 5.2.5)所述指定节点将当前文件的元数据存入缓存中,然后将文件创建成功消息发送到负责当前文件父目录的目录元数据服务器,所述目录元数据服务器将当前文件父目录的目录元数据信息更新至指定的对象存储服务器; `5.2.6)所述指定节点将创建新文件成功的消息发给客户端; `5.2.7)客户端接收到文件创建成功消息,向用户提示文件创建成功,跳转执行步骤3); `5.3)执行查询文件元数据: `5.3.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到待查询文件父目录的元数据信息后返回执行步骤5.3.2); ` 5.3.2)客户端将当前文件的文件名进行哈希,在文件元数据服务器集群中根据待查询文件的哈希值找到负责当前文件的目标节点;` 5.3.3)客户端向所述目标节点发送查询文件元数据请求,所述查询文件元数据请求信息包括父目录全局唯一标识符、待查询文件的文件名和文件完整路径; ` 5.3.4)所述目标节点收到客户端的查询文件元数据请求,首先在内存中查找当前文件的文件元数据,如果查找成功则直接跳转执行步骤5.3.5);如果查找失败则使用父目录全局唯一标识符和待查询文件的文件名,在对象存储服务器集群中定位存储所述文件元数据的对象存储服务器,然后从所述对象存储服务器中读取当前文件的文件元数据; `5.3.5)所述目标节点向客户端发送待查询文件的文件元数据; `5.3.6)客户端收到目标节点发送的文件元数据,返回给用户并跳转执行步骤3); `5.4)执行更新文件元数据: ` 5.4.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到当前文件父目录的元数据信息后返回执行步骤5.4.2); `5.4.2)客户端将当前文件的文件名进行哈希,在文件元数据服务器集群中根据待更新文件的哈希值找到负责待更新文件的目标节点; `5.4.3)客户端向所述目标节点发送更新文件元数据请求,所述查询文件元数据请求信息包括父目录全局唯一标识符和新的文件元数据; `5.4.4)所述目标节点收到客户端的更新文件元数据请求,首先在内存中查找当前文件的文件元数据,如果查找失败则使用父目录全局唯一标识符和待更新文件的文件名,在对象存储服务器集群中定位存储所述文件元数据的对象存储服务器,然后从所述对象存储服务器中读取文件元数据;获取更新文件元数据以后,检查客户端是否修改权限,如果没有修改权限则向客户端返回没有权限的更新失败消息,跳转执行步骤3);如果有修改权限则更新文件元数据并向客户端发送更新成功消息; ` 5.4.5)客户端收到目标节点的发送的消息后返回给用户,跳转执行步骤3); `5.5)执行重命名文件: ` 5.5.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到待重命名文件父目录的元数据信息后返回执行步骤5.5.2); ` 5.5.2)根据当前文件父目录的元数据信息判断父目录下是否有待重命名文件新名称相同的文件,如果在父目录下找到相同文件名的文件,则返回存在相同文件名消息给客户端,跳转执行步骤3);否则,将待重命名文件的新文件名进行哈希,在文件元数据服务器集群中根据当前文件的哈希值找到负责当前文件的目标节点; .5.5.3)客户端向所述目标节点发送重命名文件请求,所述查询文件元数据请求信息包括父目录全局唯一标识符、旧文件名、新文件名和父目录所在目录元数据服务器编号; .5.5.4)所述目标节点接收客户端发送的重命名文件请求,首先在内存中查找当前文件的文件元数据,如果查找失败则使用父目录全局唯一标识符和当前文件的文件名,在对象存储服务器集群中定位存储所述文件元数据的对象存储服务器,然后从所述对象存储服务器中读取文件元数据;获取当前文件的元数据以后,检查客户端是否有修改权限,如果没有修改权限则向客户端返回没有权限的重命名失败消息,跳转执行步骤3);如果有修改权限,则更新文件元数据,通过新文件名哈希在文件元数据服务器集群中找到负责新文件名的新目标节点,将文件重命名信息和新文件元数据发送给所述新目标节点,所述新目标节点接收并缓存文件重命名信息和新文件元数据,然后将文件重命名信息和新文件元数据提交到存储到指定的对象存储服务器;同时所述目标节点向负责父目录的目录元数据服务器发送文件重命名请求,负责父目录的目录元数据服务器收到文件重命名请求,根据文件重命名请求更新父目录元数据中对应当前文件的文件名;最后向客户端发送重命名文件成功消息; .5.5.5)客户端收到目标节点发送的消息并返回给用户,跳转执行步骤3); .5.6)执行删除文件: .5.6.1)客户端跳转执行步骤4.3)获取当前文件父目录的元数据信息,收到当前文件父目录的元数据信息后返回执行步骤5.6.2); .5.6.2)将当前文件的文件名进行哈希,在文件元数据服务器集群中根据当前文件的哈希值找到负责待删除文件的目标节点; .5.6.3)客户端向所述目标节点发送删除文件请求,所述删除文件请求包含父目录全局唯一标识符、待删除文件名和负责父目录的目录元数据服务器编号; .5.6.4)所述目标节点接收删除文件请求,首先在内存中查找当前文件的文件元数据,如果查找失败则使用父目录全局唯一标识符和当前文件的文件名,在对象存储服务器集群中定位存储所述文件元数据的对象存储服务器,然后从所述对象存储服务器中读取当前文件的文件元数据;最后获取当前文件的文件元数据以后,检查客户端是否删除权限,如果没有删除权限,则向客户端返回没有权限的删除失败消息,跳转执行步骤3);如果有删除权限,则删除当前文件的元数据,并向父目录所在的目录元数据服务器发送删除文件请求,父目录所在的目录元数据服务器收到删除文件请求,删除父目录元数据信息中的该文件的信息;最后向客户端发送删除文件成功消息; .5.6.5)客户端收到目标节点发送的消息并返回给用户,跳转执行步骤3)。
6.根据权利要求5所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述目录元数据服务器对目录元数据的修改均通过更新日志定时进行,其详细步骤如下:首先目录元数据服务器在需要修改目录元数据时将对目录元数据的修改生成更新日志并缓存,然后目录元数据服务器定时检查本地缓存的更新日志,然后根据更新日志哈希目标目录的完整路径,根据哈希值与对象存储服务器的映射关系表定位负责目标目录的对象存储服务器,并将对目录元数据的修改提交给负责目标目录的对象存储服务器执行对目录元数据的修改。
7.根据权利要求6所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述文件元数据服务器对文件元数据的修改均通过更新日志进行,其详细步骤如下:首先文件元数据服务器在需要修改文件元数据时将对文件元数据的修改生成更新日志并缓存,然后文件元数据服务器定时检查本地缓存的更新日志,然后根据更新日志哈希目标文件父目录的全局唯一标识符和目标文件的文件名,根据哈希值与对象存储服务器的映射关系表定位负责当前文件的对象存储服务器,并将对文件元数据的修改提交给负责目标文件的对象存储服务 器执行对文件元数据的修改。
全文摘要
本发明公开了一种面向高性能计算的分布式文件系统元数据管理方法,方法步骤如下1)建立目录元数据服务器集群、文件元数据服务器集群和对象存储服务器集群;2)在目录元数据服务器集群中建立全局的基于计数的布隆过滤器;3)在客户端的操作请求到来时,跳转执行步骤4)或步骤5);4)所述目录元数据服务器集群响应客户端的目录操作请求对目录元数据进行管理;5)所述文件元数据服务器集群响应客户端的文件操作请求对文件元数据进行管理。本发明能够有效解决目录重命名带来的元数据迁移问题,具有存储性能高、维护开销小、高负载无瓶颈、扩展性好、负载均衡的优点。
文档编号H04L29/08GK103150394SQ20131009681
公开日2013年6月12日 申请日期2013年3月25日 优先权日2013年3月25日
发明者卢宇彤, 王立新, 肖立权, 周恩强, 肖侬, 所光, 张伟, 董勇, 陈海涛 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1