CN103150394B - 面向高性能计算的分布式文件系统元数据管理方法 - Google Patents
面向高性能计算的分布式文件系统元数据管理方法 Download PDFInfo
- Publication number
- CN103150394B CN103150394B CN201310096811.1A CN201310096811A CN103150394B CN 103150394 B CN103150394 B CN 103150394B CN 201310096811 A CN201310096811 A CN 201310096811A CN 103150394 B CN103150394 B CN 103150394B
- Authority
- CN
- China
- Prior art keywords
- directory
- file
- metadata
- client
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种面向高性能计算的分布式文件系统元数据管理方法,方法步骤如下:1)建立目录元数据服务器集群、文件元数据服务器集群和对象存储服务器集群;2)在目录元数据服务器集群中建立全局的基于计数的布隆过滤器;3)在客户端的操作请求到来时,跳转执行步骤4)或步骤5);4)所述目录元数据服务器集群响应客户端的目录操作请求对目录元数据进行管理;5)所述文件元数据服务器集群响应客户端的文件操作请求对文件元数据进行管理。本发明能够有效解决目录重命名带来的元数据迁移问题,具有存储性能高、维护开销小、高负载无瓶颈、扩展性好、负载均衡的优点。
Description
技术领域
本发明涉及分布式文件系统体系结构领域,具体涉及一种面向高性能计算的分布式文件系统元数据管理方法。
背景技术
随着各种I/O密集型应用的需求和高速网络的发展,当今高性能计算机集群计算节点的规模已达上万个,性能亦已达PFlops。底层存储系统的规模不断增大,PB级甚至更大规模的系统不断出现。分布式文件系统中文件的数目可以达到上亿个,快速高效的处理成千上万个客户端对文件元数据的并发访问是一个亟需解决的问题。元数据服务器( Metadata Server, MDS)用来管理文件系统的元数据,在存储系统规模非常大时,一台MDS会成为整个系统的性能瓶颈,于是人们就把多台MDS连接在一起,构成元数据服务集群来提升文件系统的元数据处理能力。
在文件系统中,文件的元数据用以记录文件数据对象的存储位置和访问控制信息,目录是包含文件列表信息的文件,用以实现文件系统的目录层次和权限管理。目前MDS集群中的元数据分布方法,主要可以分为目录子树分割方法和散列方法两大类。
目录子树分割(Subtree Partitioning)方法是将文件系统的全局目录层次结构按照目录子树划分,每个MDS负责管理一个或多个目录子树,所有的MDS共同维护一个完整的文件系统目录层次结构。该方法设计简单,实现难度较小。其主要缺点是负载均衡能力较差。在大量客户端同时访问某个目录下的不同文件这种情况时,容易出现该目录子树成为“热点”的问题,从而导致负责该子树的MDS成为整个系统的瓶颈。
散列方法是将文件的某个特定标识(如文件名,文件路径名等)进行哈希计算,每个MDS负责一段哈希值范围内的文件元数据。该方法的优点是能够较好的将同一目录下不同文件的元数据均匀的映射到各个MDS上,具有良好的负载均衡性。其缺点是每个MDS需要保存大量的前缀目录元数据信息,减少了每个MDS用来保存文件元数据的可用内存容量,同时这些目录元数据信息的一致性维护需要一定的代价。同时,对一个目录的重命名操作和增减MDS将导致原先文件与MDS之间映射关系被破坏,可能需要迁移重命名目录下的各个文件和子目录的元数据。
综上所述,上述现有技术都存在或不能良好处理热点目录的访问问题,或不能有效解决目录的重命名问题和重迭保存前缀目录元数据信息带来的内存利用率和一致性维护问题,严重制约了分布式文件系统在高性能计算领域的应用。
发明内容
本发明要解决的技术问题是提供一种存储性能高、维护开销小、高负载无瓶颈、扩展性好、负载均衡、能够有效解决目录重命名带来的元数据迁移问题的面向高性能计算的分布式文件系统元数据管理方法。
为了解决上述技术问题,本发明采用的技术方案为:
一种面向高性能计算的分布式文件系统元数据管理方法,其实施步骤如下:
1)建立用于管理目录元数据的目录元数据服务器集群、用于管理文件元数据的文件元数据服务器集群,建立用于为目录元数据服务器集群和文件元数据服务器集群提供对象接口数据存储服务的对象存储服务器集群;
2)在所有目录元数据服务器集群中建立布隆过滤器,所述目录元数据服务器集群中的目录元数据服务器之间共享布隆过滤器;
3)在客户端的操作请求到来时,若操作请求为目录操作请求时跳转执行步骤4);若操作请求为文件操作请求时跳转执行步骤5);
4)所述目录元数据服务器集群响应客户端的目录操作请求对目录元数据进行管理,为每个目录分配一个全局唯一标识符,根据布隆过滤器数组记录来判断负责目录请求的目录元数据服务器,并根据目录的完整路径名哈希访问对象存储服务器中存储的目录元数据;
5)所述文件元数据服务器集群响应客户端的文件操作请求对文件元数据进行管理,根据请求文件的文件名哈希来判断负责文件元数据的文件元数据服务器,并根据请求文件的父目录全局唯一标识符和文件名的哈希访问对象存储服务器中存储的文件元数据。
作为本发明上述技术方案的进一步改进:
所述步骤1)建立的对象存储服务器集群中存储的目录元数据结构为:DirId、DirName、ACLf、ACLp、AtFMDS和InodePointer,DirId代表目录在被创建时生成的全局唯一标识符,DirId的生存周期和目录本身一样;DirName代表目录的完整路径名;ACLf代表在创建目录时给目录赋予的文件权限;ACLp代表目录的路径权限,ACLp由目录自身的文件权限ACLf与父目录的路径权限ACLp相与操作得到;AtFMDS代表目录下文件存放的型别标识,用于判断目录下所有文件的文件元数据在文件元数据服务器集群中的分布类型;InodePointer代表目录层次结构指针,用于指向目录包含的文件和子目录构成的树形结构,所述目录包含的文件和子目录构成的B树通过目录的全局唯一标识符进行索引;所述步骤1)建立的对象存储服务器集群中存储的文件元数据结构包括DirId、FileName和FileMeta,其中DirId代表文件所在目录的全局唯一标识符,FileName代表文件的文件名,FileMeta代表包括文件长度、读写权限、修改时间和文件数据的布局信息在内的文件具体元数据信息。
所述步骤2)建立的布隆过滤器为基于计数的布隆过滤器,所述基于计数的布隆过滤器使用一个m比特的整数数组来保存信息,使用k个独立的哈希函数将集合中的每一个目录元素映射到{1,…,m}的范围中,初始化时{1,…,m}中的每一位整数都设置为0,每个哈希函数对应一个大小为m/k位的位数组,k个位数组构成基于计数的布隆过滤器的布隆过滤器位数组;当目录元数据服务器添加一个目录时,所述目录元数据服务器通过多个哈希函数对添加目录的完整路径进行哈希运算得到k个哈希值,将所述k个哈希值在整数数组中对应k个整数位置的整数值分别加1;当目录元数据服务器删除一个目录时,所述目录元数据服务器通过多个哈希函数对删除目录进行哈希运算得到k个哈希值,将所述k个哈希值在整数数组中对应k个整数位置的整数值分别减1;当判定目录元数据服务器是否为负责指定目录的节点时,通过多个哈希函数对指定目录进行哈希运算得到的k个哈希值,判断所述目录元数据服务器的整数数组中对应k个整数位置的整数值是否都大于0,如果都大于0则判定该目录元数据服务器为负责指定目录的节点。
所述步骤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)组成的文件元数据服务器集群、多个对象存储服务器(多个OST)组成的对象存储服务器集群组成;DMDS和FMDS分别将相应的元数据持久化存储到对应的OST上。本实施例通过目录元数据服务器和文件元数据服务器的分工协作为整个存储系统提供统一且一致的名字空间,管理客户端的文件目录访问权限,来达到管理文件系统元数据的目的;客户端则通过高速网络向目录元数据服务器集群执行目录元数据访问、向文件元数据服务器集群执行文件元数据访问,对象存储服务器位于目录元数据服务器集群和文件元数据服务器集群的极端,对于客户端而言是透明的。对象存储服务器(Object Storage Target,简称OST)负责底层数据块分配、布局,验证、响应相应的数据请求,提供一个基于对象接口的数据存储服务。目录元数据服务器集群包含多个通过网络相连的目录元数据服务器,目录元数据服务器(Directory Metadata Server,简称DMDS)负责管理目录元数据,包括查询、创建、更新、删除和存储元数据到OST上等功能。文件元数据服务器集群包含多个通过网络相连的文件元数据服务器,文件元数据服务器(File Metadata Server,简称FMDS)负责管理文件元数据,包括查询、创建、更新、删除和存储元数据到OST上等功能。目录元数据服务器和文件元数据服务器均通过网络与对象存储服务器相连。在面向高性能计算的PB级(以及更高级的)文件系统中,目录对象的数量较文件对象的数量小,但只采用一台DMDS来提供目录元数据服务会让该台DMDS成为整个分布式文件系统的性能瓶颈,而本实施例由多台DMDS组成的目录元数据服务器集群来提供目录元数据服务,由多台FMDS组成的文件元数据服务器集群来提供文件元数据服务,目录元数据服务器集群、文件元数据服务器集群、对象存储服务器集群中的节点数量可以根据需要进行定制,从而能够解决现有技术的目录元数据服务成为整个分布式文件系统瓶颈的问题,而且具有扩展性好的优点。
如图3所示,本实施例步骤1)建立的对象存储服务器集群中存储的目录元数据结构为:DirId、DirName、ACLf、ACLp、AtFMDS和InodePointer,DirId代表目录在被创建时生成的全局唯一标识符,DirId的生存周期和目录本身一样;DirName代表目录的完整路径名;ACLf代表在创建目录时给目录赋予的文件权限;ACLp代表目录的路径权限,ACLp由目录自身的文件权限ACLf与父目录的路径权限ACLp相与操作得到;AtFMDS代表目录下文件存放的型别标识,用于判断目录下所有文件的文件元数据在文件元数据服务器集群中的分布类型;InodePointer代表目录层次结构指针,用于指向目录包含的文件和子目录构成的树形结构,目录包含的文件和子目录构成的B树通过目录的全局唯一标识符进行索引。
本实施例中目录元数据结构信息的具体含义如下:(1) DirId,目录的全局唯一标识符,在创建目录时生成。DirId的生存周期和目录本身一样,除非目录被删除,而修改目录名等操作DirID都不会发生变化;(2) DirName,目录的完整路径名,如/usr/wl/d1等;(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下新建目录d1为例,生成/home/bgp/d1路径权限的过程如下:
(1)查询/home/bgp的路径权限,假设为rwxr-xr-x,则表明客户端具有在/home/bgp目录下创建新目录的权限;
(2)客户端设定的新建目录d1的访问权限属性为rwxr--r--;即表明目录d1的文件权限ACLf为rwxr--r--;
(3)根据父目录/home/bgp的路径权限和d1的文件权限构造目录/home/bgp/d1的路径权限为rwxr--r--。
本实施例通过上述权限处理操作,生成目录的路径权限ACLp只能在父目录的路径权限ACLp内进行继承,并且在继承时通过目录新建请求中指定的文件权限ACLf进行有限选择,使得目录安全管理的可靠性更好。
本实施例步骤1)建立的对象存储服务器集群中存储的文件元数据结构包括DirId、FileName和FileMeta,其中DirId代表文件所在目录的全局唯一标识,FileName代表文件的文件名(不包含路径项),FileMeta代表包括文件长度、读写权限、修改时间和文件数据的布局信息在内的文件具体元数据信息。
如图4(a)所示,布隆过滤器(BF)的基本思想是源于通过引入多个哈希函数来解决单个哈希函数时的冲突问题,当每个哈希函数都告诉我们该元素在集合中时,才能确定该元素存在于集合之中。BF使用一个m比特的数组来保存信息,使用k个独立的哈希函数将集合中的每一个元素映射到{1,…,m}的范围中。初始时,位数组的每一位都设置为0。添加一个元素x时,使用k个哈希函数得到k个哈希值,然后将数组中对应的比特位设置为1,即第i个哈希函数将Hashi(x)位置设置为1;在判断一个元素y是否属于集合时,对y使用k个哈希函数得到k个哈希值,如果所有Hashi(y)对应的位置都是1(1≤i≤k),可以认为y是集合中的元素,否则y就不是集合中的元素,显然判断某个元素一定在集合中存在一定的错判概率。
本实施例采用布隆过滤器(Bloom Filter,简称BF)来反映当前有哪些目录的元数据存储在该DMDS的内存中,而且DMDS之间通过布隆过滤器共享实现全局信息的快速查询。BF是一种空间效率很高的随机数据结构,是一个判断元素是否存在于集合之中的快速概率算法。它利用位数组简洁的表示一个集合,并判断一个元素是否属于这个集合。如果判断元素不在集合中,那么可以肯定不在。如果判断一个元素存在于集合之中,会有一定的概率判断错误。由于客户端对于目录元数据的访问强度没有文件元数据高,通过在判断错误的情况下进行相应的错误处理,亦能够保证正确处理请求。但BF带来的性能效益会远远高出其判断错误时的性能损失。但是,这种传统的BF还存在一个问题即不能从集合中删除元素,因为该元素对应的位会牵动到其它的元素,在DMDS中直接使用传统的BF是不合适的,因为客户端会有删除某个目录的需求,一般在删除目录时需要借助包括标记在内的其它手段才能实现目录元数据信息的伪删除,导致存储资源的利用率较低。
本实施例中,步骤2)建立的布隆过滤器为基于计数的布隆过滤器,基于计数的布隆过滤器使用一个m比特的整数数组来保存信息,使用k个独立的哈希函数将集合中的每一个目录元素映射到{1,…,m}的范围中,初始化时{1,…,m}中的每一位整数都设置为0,每个哈希函数对应一个大小为m/k位的位数组,k个位数组构成基于计数的布隆过滤器的布隆过滤器位数组;当目录元数据服务器添加一个目录时,目录元数据服务器通过多个哈希函数对添加目录的完整路径进行哈希运算得到k个哈希值,将k个哈希值在整数数组中对应k个整数位置的整数值分别加1;当目录元数据服务器删除一个目录时,目录元数据服务器通过多个哈希函数对删除目录进行哈希运算得到k个哈希值,将k个哈希值在整数数组中对应k个整数位置的整数值分别减1;当判定目录元数据服务器是否为负责指定目录的节点时,通过多个哈希函数对指定目录进行哈希运算得到的k个哈希值,判断目录元数据服务器的整数数组中对应k个整数位置的整数值是否都大于0,如果都大于0则判定该目录元数据服务器为负责指定目录的节点。
如图4(b)所示,每个哈希函数Hashi对应一个大小为m/k的位数组BFi(BF1,BF2,BF3),k个BFi构成一个BF位数组(即BF Array,简称BFA)。添加一个元素x1时,使用k个哈希函数得到k个哈希值,然后将对应的位数组BFi的对应位置(BF1的第3个,BF2的第4个,BF3的第2个)设置为1。如果添加下一个元素x2,发生与x1冲突的情况时,则将冲突位置(BF2的第4个)的值加1。这样设计的好处是可以删除一个元素,同时不会发生在某一位置不同哈希函数发生冲突的情况(即Hashi(x)=Hashj(y)的情形),代价是比原先的m比特空间有所增大,每一个位不能只使用一个比特来表示了,而需要几个比特来记录发生冲突的次数。参见图4中下半部分,第2个BFA中从上往下第4个整数数值为2,两个目录在该整数位置发生冲突,当其中一个目录被删除时,该整数位置减1后,该整数位置变成1,仍然能够保留另一个目录的位置信息。但是,这样的代价是比原先的m比特空间有所增大,每一个位不能只使用一个比特来表示了,而需要几个比特来记录发生冲突的次数。但是,通过基于计数的BF,能够方便实现对目录元数据的删除,目录删除后OST的存储空间能够得到回收,存储资源的利用率较高。
本实施例中,采用下述三种哈希策略:
(1)使用文件名哈希来确定该文件的元数据由哪台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的OST,第101-200个哈希值对应编号为#2的OST,第201-300个哈希值对应编号为#3的OST,第301-400个哈希值对应编号为#4的OST,本实施例仅以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所示,本实施例中目录元数据服务器1(DMDS1)并非负责父目录元数据信息的节点,父目录元数据信息由目录元数据服务器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),否则随机向目录元数据服务器集群中随机选择一个指定节点DMDS1发送删除目录请求,跳转执行步骤4.6.2);
4.6.2)指定节点DMDS1通过本节点以及其它节点共享的基于计数的布隆过滤器查找负责待删除目录的目标节点(目标节点对应目录的BFA的k个位置的整数都大于0,则目录由目标节点负责),如果指定节点DMDS1并非目标节点,则指定节点DMDS1将删除目录请求转发给目标节点,否则指定节点即为目标节点;本实施例中,目标节点为DMDS2,指定节点DMDS1将删除目录请求转发给目标节点DMDS2;
4.6.3)目标节点DMDS2执行删除目录,通过本节点以及其它节点共享的基于计数的布隆过滤器查找负责待删除目录下各个子目录的关联节点,并向关联节点分别发送删除目录请求;
4.6.4)关联节点通过本节点以及其它节点共享的基于计数的布隆过滤器递归查找负责待删除目录下各个子目录的下一级关联节点,并向下一级关联节点分别发送删除目录请求,接收到删除目录请求的关联节点执行删除目录;重复执行上述递归过程,直到待删除目录下所有子目录都删除成功后,将操作结果返回给目标节点DMDS2;最后目标节点DMDS2将操作结果返回给客户端;
4.6.5)客户端接收到目标节点DMDS2发送的操作结果并返回给用户,跳转执行步骤3)。
本实施例在上述执行重命名目录时,所有对于元数据的修改都将被提交到更新日志,由更新日志定期将元数据持久化存储到底层OST上。在进行目录重命名时,本发明只需要对所有目录路径名包含该目录的目录进行重命名操作,而无需移动相关的目录元数据和文件元数据,最大程度的降低了重命名目录的开销。
本实施例中,目录元数据服务器对目录元数据的修改均通过更新日志定时进行,其详细步骤如下:首先目录元数据服务器在需要修改目录元数据时将对目录元数据的修改生成更新日志并缓存,然后目录元数据服务器定时检查本地缓存的更新日志,然后根据更新日志哈希目标目录的完整路径,根据哈希值与对象存储服务器的映射关系表定位负责目标目录的对象存储服务器,并将对目录元数据的修改提交给负责目标目录的对象存储服务器执行对目录元数据的修改;通过上述步骤,使得DMDS所有对于目录元数据的修改(包括创建、更新、重命名、删除)都将被提交到更新日志,由更新日志定期将元数据持久化存储到底层OST上。
本实施例中,客户端收到目录元数据信息后会立即缓存目录的元数据信息,以便在下次访问相同目录的时候先从缓存中查找目录元数据信息,若命中,则不需要再次访问DMDS。根据局部性原理,用户接着访问同一目录下文件的概率很高,所以访问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所示,本实施例中客户端没有找到父目录的目录元数据信息,首先请求目录元数据服务器1(DMDS1)父目录的目录元数据信息,DMDS1仍未查找到并转发查找请求给负责父目录的目录元数据服务器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上。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (6)
1.一种面向高性能计算的分布式文件系统元数据管理方法,其特征在于实施步骤如下:
1)建立用于管理目录元数据的目录元数据服务器集群、用于管理文件元数据的文件元数据服务器集群,建立用于为目录元数据服务器集群和文件元数据服务器集群提供对象接口数据存储服务的对象存储服务器集群;所述步骤1)建立的对象存储服务器集群中存储的目录元数据结构为:DirId、DirName、ACLf、ACLp、AtFMDS和InodePointer,DirId代表目录在被创建时生成的全局唯一标识符,DirId的生存周期和目录本身一样;DirName代表目录的完整路径名;ACLf代表在创建目录时给目录赋予的文件权限;ACLp代表目录的路径权限,ACLp由目录自身的文件权限ACLf与父目录的路径权限ACLp相与操作得到;AtFMDS代表目录下文件存放的型别标识,用于判断目录下所有文件的文件元数据在文件元数据服务器集群中的分布类型;InodePointer代表目录层次结构指针,用于指向目录包含的文件和子目录构成的树形结构,所述目录包含的文件和子目录构成的B树通过目录的全局唯一标识符进行索引;所述步骤1)建立的对象存储服务器集群中存储的文件元数据结构包括DirId、FileName和FileMeta,其中DirId代表文件所在目录的全局唯一标识符,FileName代表文件的文件名,FileMeta代表包括文件长度、读写权限、修改时间和文件数据的布局信息在内的文件具体元数据信息;
2)在所有目录元数据服务器集群中建立布隆过滤器,所述目录元数据服务器集群中的目录元数据服务器之间共享布隆过滤器;
3)在客户端的操作请求到来时,若操作请求为目录操作请求时跳转执行步骤4);若操作请求为文件操作请求时跳转执行步骤5);
4)所述目录元数据服务器集群响应客户端的目录操作请求对目录元数据进行管理,为每个目录分配一个全局唯一标识符,根据布隆过滤器数组记录来判断负责目录请求的目录元数据服务器,并根据目录的完整路径名哈希访问对象存储服务器中存储的目录元数据;
5)所述文件元数据服务器集群响应客户端的文件操作请求对文件元数据进行管理,根据请求文件的文件名哈希来判断负责文件元数据的文件元数据服务器,并根据请求文件的父目录全局唯一标识符和文件名的哈希访问对象存储服务器中存储的文件元数据。
2.根据权利要求1所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述步骤2)建立的布隆过滤器为基于计数的布隆过滤器,所述基于计数的布隆过滤器使用一个m比特的整数数组来保存信息,使用k个独立的哈希函数将集合中的每一个目录元素映射到{1,…,m}的范围中,初始化时{1,…,m}中的每一位整数都设置为0,每个哈希函数对应一个大小为m/k位的位数组,k个位数组构成基于计数的布隆过滤器的布隆过滤器位数组;当目录元数据服务器添加一个目录时,所述目录元数据服务器通过多个哈希函数对添加目录的完整路径进行哈希运算得到k个哈希值,将所述k个哈希值在整数数组中对应k个整数位置的整数值分别加1;当目录元数据服务器删除一个目录时,所述目录元数据服务器通过多个哈希函数对删除目录进行哈希运算得到k个哈希值,将所述k个哈希值在整数数组中对应k个整数位置的整数值分别减1;当判定目录元数据服务器是否为负责指定目录的节点时,通过多个哈希函数对指定目录进行哈希运算得到的k个哈希值,判断所述目录元数据服务器的整数数组中对应k个整数位置的整数值是否都大于0,如果都大于0则判定该目录元数据服务器为负责指定目录的节点。
3.根据权利要求2所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述步骤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)。
4.根据权利要求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)。
5.根据权利要求4所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述目录元数据服务器对目录元数据的修改均通过更新日志定时进行,其详细步骤如下:首先目录元数据服务器在需要修改目录元数据时将对目录元数据的修改生成更新日志并缓存,然后目录元数据服务器定时检查本地缓存的更新日志,然后根据更新日志哈希目标目录的完整路径,根据哈希值与对象存储服务器的映射关系表定位负责目标目录的对象存储服务器,并将对目录元数据的修改提交给负责目标目录的对象存储服务器执行对目录元数据的修改。
6.根据权利要求5所述的面向高性能计算的分布式文件系统元数据管理方法,其特征在于,所述文件元数据服务器对文件元数据的修改均通过更新日志进行,其详细步骤如下:首先文件元数据服务器在需要修改文件元数据时将对文件元数据的修改生成更新日志并缓存,然后文件元数据服务器定时检查本地缓存的更新日志,然后根据更新日志哈希目标文件父目录的全局唯一标识符和目标文件的文件名,根据哈希值与对象存储服务器的映射关系表定位负责当前文件的对象存储服务器,并将对文件元数据的修改提交给负责目标文件的对象存储服务器执行对文件元数据的修改。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310096811.1A CN103150394B (zh) | 2013-03-25 | 2013-03-25 | 面向高性能计算的分布式文件系统元数据管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310096811.1A CN103150394B (zh) | 2013-03-25 | 2013-03-25 | 面向高性能计算的分布式文件系统元数据管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103150394A CN103150394A (zh) | 2013-06-12 |
CN103150394B true CN103150394B (zh) | 2014-07-23 |
Family
ID=48548471
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310096811.1A Active CN103150394B (zh) | 2013-03-25 | 2013-03-25 | 面向高性能计算的分布式文件系统元数据管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103150394B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI576703B (zh) * | 2015-03-27 | 2017-04-01 | 宏碁股份有限公司 | 電子裝置及其資料暫存方法 |
CN106844584A (zh) * | 2017-01-10 | 2017-06-13 | 清华大学 | 元数据结构和基于其的操作方法、定位方法、切分方法 |
Families Citing this family (83)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103235754B (zh) * | 2013-04-24 | 2016-10-05 | 曙光信息产业(北京)有限公司 | 分布式文件系统中请求的处理方法和装置 |
CN103279568A (zh) * | 2013-06-18 | 2013-09-04 | 无锡紫光存储系统有限公司 | 一种元数据管理系统及方法 |
CN104462124B (zh) * | 2013-09-22 | 2018-04-06 | 中国电信股份有限公司 | 基于线性哈希表的数据存储平台组织方法和数据存储平台 |
US9917891B2 (en) * | 2013-09-27 | 2018-03-13 | Intel Corporation | Distributed in-order load spreading resilient to topology changes |
CN103500129B (zh) * | 2013-10-16 | 2017-08-11 | 华为技术有限公司 | 一种备份对象的发送、备份方法、生产端、灾备端及系统 |
CN103559224A (zh) * | 2013-10-18 | 2014-02-05 | 华为技术有限公司 | 一种对元数据对象进行散列的方法及装置 |
CN103544322A (zh) * | 2013-11-08 | 2014-01-29 | 北京邮电大学 | 基于服务器集群的热点元数据管理方法 |
US9256549B2 (en) * | 2014-01-17 | 2016-02-09 | Netapp, Inc. | Set-associative hash table organization for efficient storage and retrieval of data in a storage system |
CN104113587B (zh) * | 2014-06-23 | 2017-08-01 | 华中科技大学 | 一种分布式文件系统客户端元数据缓存优化方法 |
CN104123359B (zh) * | 2014-07-17 | 2017-03-22 | 江苏省邮电规划设计院有限责任公司 | 一种分布式对象存储系统的资源管理方法 |
CN104657115B (zh) * | 2015-03-12 | 2017-04-19 | 浪潮集团有限公司 | 一种集群文件系统客户端多核并发负载实现方法 |
CN106326239B (zh) * | 2015-06-18 | 2020-01-31 | 阿里巴巴集团控股有限公司 | 分布式文件系统及其文件元信息管理方法 |
CN105554122A (zh) * | 2015-12-18 | 2016-05-04 | 畅捷通信息技术股份有限公司 | 信息更新方法、信息更新装置、终端和服务器 |
CN105550371A (zh) * | 2016-01-27 | 2016-05-04 | 华中科技大学 | 一种面向大数据环境的元数据组织方法和系统 |
US11301422B2 (en) | 2016-02-23 | 2022-04-12 | Samsung Electronics Co., Ltd. | System and methods for providing fast cacheable access to a key-value device through a filesystem interface |
CN107239480B (zh) * | 2016-03-28 | 2021-01-29 | 阿里巴巴集团控股有限公司 | 用于分布式文件系统执行重命名操作的方法和设备 |
CN107463577B (zh) * | 2016-06-06 | 2021-01-29 | 华为技术有限公司 | 一种数据存储系统以及数据查找方法 |
CN106101093B (zh) * | 2016-06-08 | 2019-03-12 | 东南大学 | 基于Bloom Filter的智能电网属性访问控制方法 |
CN107969153B (zh) * | 2016-08-19 | 2021-06-22 | 华为技术有限公司 | 一种资源分配方法、装置及numa系统 |
CN107783988B (zh) * | 2016-08-26 | 2021-12-03 | 阿里巴巴集团控股有限公司 | 一种目录树的加锁方法及设备 |
CN106446197B (zh) * | 2016-09-30 | 2019-11-19 | 华为数字技术(成都)有限公司 | 一种数据存储方法、装置及系统 |
CN106776783B (zh) * | 2016-11-24 | 2019-10-01 | 福建亿榕信息技术有限公司 | 非结构化数据存储管理方法和系统 |
CN106599102A (zh) * | 2016-11-29 | 2017-04-26 | 郑州云海信息技术有限公司 | 一种基于目录切分机制的元数据性能提升方法 |
CN106649608A (zh) * | 2016-11-29 | 2017-05-10 | 郑州云海信息技术有限公司 | 分布式文件系统小文件性能提升方法、目录生成器及系统 |
CN106815334A (zh) * | 2016-12-30 | 2017-06-09 | 晶赞广告(上海)有限公司 | 一种用于终端的数据查询方法及装置 |
CN106874383B (zh) * | 2017-01-10 | 2019-12-20 | 清华大学 | 一种分布式文件系统元数据的解耦合分布方法 |
US11360942B2 (en) * | 2017-03-13 | 2022-06-14 | Wandisco Inc. | Methods, devices and systems for maintaining consistency of metadata and data across data centers |
CN106960055B (zh) * | 2017-04-01 | 2020-08-04 | 广东浪潮大数据研究有限公司 | 一种文件删除方法及装置 |
CN107037988B (zh) * | 2017-04-06 | 2019-08-30 | 华中科技大学 | 一种基于文件级粒度的闪存安全删除方法及系统 |
CN107169126B (zh) * | 2017-05-31 | 2021-01-15 | 华为技术有限公司 | 一种日志处理方法及相关设备 |
CN107193989B (zh) * | 2017-05-31 | 2021-05-28 | 郑州云海信息技术有限公司 | 一种nas集群缓存处理方法和系统 |
CN107341207B (zh) * | 2017-06-23 | 2020-03-17 | 深圳市盛路物联通讯技术有限公司 | 一种节点信息管理方法及装置 |
CN107506371A (zh) * | 2017-07-07 | 2017-12-22 | 北京奇虎科技有限公司 | 一种分布式消息系统中的数据处理方法和装置 |
CN107861842B (zh) * | 2017-11-08 | 2021-10-15 | 郑州云海信息技术有限公司 | 一种元数据损坏检测方法、系统、设备及存储介质 |
CN107885829A (zh) * | 2017-11-08 | 2018-04-06 | 郑州云海信息技术有限公司 | 对象存储对接Hadoop的重命名方法、装置、设备和存储介质 |
CN108319634B (zh) * | 2017-12-15 | 2021-08-06 | 深圳创新科技术有限公司 | 分布式文件系统的目录访问方法和装置 |
CN108388604B (zh) * | 2018-02-06 | 2022-06-10 | 平安科技(深圳)有限公司 | 用户权限数据管理装置、方法及计算机可读存储介质 |
CN108491549B (zh) * | 2018-04-09 | 2022-02-01 | 深圳市茁壮网络股份有限公司 | 一种分布式存储系统中文件目录的创建方法及装置 |
CN108614976A (zh) * | 2018-04-28 | 2018-10-02 | 苏州科达科技股份有限公司 | 权限配置方法、装置及存储介质 |
CN108763323B (zh) * | 2018-05-03 | 2022-03-15 | 华风象辑(北京)气象科技有限公司 | 基于资源集和大数据技术的气象格点文件应用方法 |
CN109284424B (zh) * | 2018-09-21 | 2021-10-19 | 长沙学院 | 构造滑动情况表的方法 |
CN109241004B (zh) * | 2018-09-26 | 2022-02-18 | 郑州云海信息技术有限公司 | 元数据文件大小恢复方法、系统、装置及可读存储介质 |
CN109508324B (zh) * | 2018-10-22 | 2023-06-09 | 浪潮软件集团有限公司 | 一种基于对象存储组件的超大文件管理方法及系统 |
CN109408474B (zh) * | 2018-11-09 | 2021-11-19 | 郑州云海信息技术有限公司 | 一种文件创建方法及客户端 |
CN111209259B (zh) * | 2018-11-22 | 2023-09-05 | 杭州海康威视系统技术有限公司 | Nas分布式文件系统及数据处理方法 |
CN109684282B (zh) * | 2018-11-23 | 2021-01-01 | 华为技术有限公司 | 一种构建元数据缓存的方法及装置 |
CN109783449A (zh) * | 2018-12-13 | 2019-05-21 | 深圳壹账通智能科技有限公司 | 数据查询处理方法、平台、系统及可读存储介质 |
US20200192872A1 (en) * | 2018-12-13 | 2020-06-18 | Zoox, Inc. | Device message framework |
CN111694808B (zh) * | 2019-03-15 | 2023-12-29 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置及计算设备 |
CN109960630B (zh) * | 2019-03-18 | 2020-09-29 | 四川长虹电器股份有限公司 | 一种快速从大批量压缩文件中提取日志的方法 |
CN110046133B (zh) * | 2019-04-12 | 2020-09-04 | 苏州浪潮智能科技有限公司 | 一种存储文件系统的元数据管理方法、装置及系统 |
CN110263060B (zh) * | 2019-06-06 | 2021-04-23 | 零搜科技(深圳)有限公司 | 一种erp电子附件管理方法及计算机设备 |
CN110532058B (zh) * | 2019-07-26 | 2022-07-15 | 济南浪潮数据技术有限公司 | 容器集群服务的管理方法、装置、设备及可读存储介质 |
CN110909076B (zh) * | 2019-10-31 | 2023-05-23 | 北京浪潮数据技术有限公司 | 一种存储集群数据同步方法、装置、设备及存储介质 |
CN111125024B (zh) * | 2019-11-29 | 2022-05-24 | 浪潮电子信息产业股份有限公司 | 一种分布式系统文件的删除方法、装置、设备及存储介质 |
CN111212111B (zh) * | 2019-12-17 | 2022-05-13 | 腾讯科技(深圳)有限公司 | 对象存储服务管理方法及电子设备 |
CN111078153B (zh) * | 2019-12-20 | 2023-08-01 | 同方知网数字出版技术股份有限公司 | 一种基于文件的分布式存储方法 |
CN113127419B (zh) * | 2019-12-30 | 2023-09-22 | 腾讯科技(深圳)有限公司 | 文件检出方法、装置、计算机设备及存储介质 |
CN113127558B (zh) * | 2019-12-31 | 2024-08-06 | 北京懿医云科技有限公司 | 元数据同步方法、系统、设备及存储介质 |
CN111309680A (zh) * | 2020-02-17 | 2020-06-19 | 湖南天河国云科技有限公司 | 基于布隆过滤器的对象存储文件检索方法及系统 |
CN113448921A (zh) * | 2020-03-28 | 2021-09-28 | 华为技术有限公司 | 一种存储管理方法、装置及存储系统 |
CN111638853A (zh) * | 2020-05-08 | 2020-09-08 | 杭州海康威视系统技术有限公司 | 数据存储方法、装置、存储集群、网关设备及主设备 |
CN111597146B (zh) * | 2020-05-20 | 2023-04-07 | 浙江大华技术股份有限公司 | 视频文件处理方法及装置、存储介质、电子装置 |
CN112035420B (zh) * | 2020-09-03 | 2023-03-14 | 西北工业大学 | 数据共享方法、共享设备和系统 |
CN112286889B (zh) * | 2020-09-22 | 2022-07-26 | 北京航空航天大学 | 一种面向广域网的分布式文件系统元数据副本同步方法 |
CN112181591A (zh) * | 2020-09-25 | 2021-01-05 | 北京浪潮数据技术有限公司 | 一种集群命名空间管理方法、系统、电子设备及存储介质 |
CN112650729B (zh) * | 2020-12-17 | 2023-06-13 | 深圳点宽网络科技有限公司 | 一种分布式文件系统的权限管理方法、系统以及存储介质 |
CN112632342A (zh) * | 2020-12-29 | 2021-04-09 | 北京大米科技有限公司 | 数据查询方法、装置、存储介质及电子设备 |
CN112579543A (zh) * | 2020-12-29 | 2021-03-30 | 航天科工网络信息发展有限公司 | 分布式文件系统的元数据动态管理方法及分布式文件系统 |
CN112860628A (zh) * | 2021-02-18 | 2021-05-28 | 北京明略昭辉科技有限公司 | 一种文件系统规模管理方法及系统 |
CN113157209B (zh) * | 2021-04-09 | 2024-07-02 | 北京易华录信息技术股份有限公司 | 一种文件系统到对象存储的数据重建方法及装置 |
CN113282539B (zh) * | 2021-05-14 | 2024-09-06 | 北京达佳互联信息技术有限公司 | 信息加载方法、装置、电子设备及存储介质 |
CN113468267B (zh) * | 2021-06-28 | 2024-06-18 | 康键信息技术(深圳)有限公司 | 双机房的数据同步方法、装置、设备及存储介质 |
CN113923213B (zh) * | 2021-08-26 | 2023-09-22 | 新华三大数据技术有限公司 | 目录级服务质量控制方法、系统及接入节点 |
CN114116613B (zh) * | 2021-11-26 | 2024-07-02 | 北京百度网讯科技有限公司 | 基于分布式文件系统的元数据查询方法、设备和存储介质 |
CN114401280B (zh) * | 2022-01-14 | 2022-10-28 | 北京天云融创软件技术有限公司 | 一种作业数据同步方法和系统 |
CN114610680A (zh) * | 2022-03-07 | 2022-06-10 | 平安科技(深圳)有限公司 | 分布式文件系统元数据管理方法、装置、设备及存储介质 |
CN115098466A (zh) * | 2022-07-18 | 2022-09-23 | 重庆紫光华山智安科技有限公司 | 元数据管理方法、装置、存储节点及可读存储介质 |
CN115145943B (zh) * | 2022-09-06 | 2023-02-28 | 北京麦聪软件有限公司 | 多数据源元数据快速比对方法、系统、设备和存储介质 |
CN116010348B (zh) * | 2023-01-31 | 2023-10-03 | 北京基调网络股份有限公司 | 一种分布式海量对象的管理方法和装置 |
CN116521744B (zh) * | 2023-06-30 | 2023-09-12 | 杭州拓数派科技发展有限公司 | 全双工元数据传输方法、装置、系统和计算机设备 |
CN116756096B (zh) * | 2023-08-23 | 2024-01-16 | 苏州浪潮智能科技有限公司 | 元数据处理方法、装置、电子设备及存储介质 |
CN117149708B (zh) * | 2023-08-31 | 2024-06-04 | 中电云计算技术有限公司 | 一种文件访问方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692239A (zh) * | 2009-10-19 | 2010-04-07 | 浙江大学 | 一种分布式文件系统元数据分配方法 |
CN102523258A (zh) * | 2011-11-30 | 2012-06-27 | 广东电子工业研究院有限公司 | 一种面向云操作系统的数据存储架构及其负载均衡方法 |
CN102541985A (zh) * | 2011-10-25 | 2012-07-04 | 曙光信息产业(北京)有限公司 | 一种分布式文件系统中客户端目录缓存的组织方法 |
-
2013
- 2013-03-25 CN CN201310096811.1A patent/CN103150394B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692239A (zh) * | 2009-10-19 | 2010-04-07 | 浙江大学 | 一种分布式文件系统元数据分配方法 |
CN102541985A (zh) * | 2011-10-25 | 2012-07-04 | 曙光信息产业(北京)有限公司 | 一种分布式文件系统中客户端目录缓存的组织方法 |
CN102523258A (zh) * | 2011-11-30 | 2012-06-27 | 广东电子工业研究院有限公司 | 一种面向云操作系统的数据存储架构及其负载均衡方法 |
Non-Patent Citations (3)
Title |
---|
刘群等.基于层次结构的元数据动态管理方法的研究.《计算机研究与发展》.2009,(第46期),摘要,第79页左栏第1段,右栏第1节,第80页右栏第2节第3段-第81页左栏第1段,右栏最后一段. |
基于层次结构的元数据动态管理方法的研究;刘群等;《计算机研究与发展》;20091231(第46期);同上 * |
基于层次结构的元数据动态管理方法的研究;刘群等;《计算机研究与发展》;20091231(第46期);摘要,第79页左栏第1段,右栏第1节,第80页右栏第2节第3段-第81页左栏第1段,右栏最后一段 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI576703B (zh) * | 2015-03-27 | 2017-04-01 | 宏碁股份有限公司 | 電子裝置及其資料暫存方法 |
US9836468B2 (en) | 2015-03-27 | 2017-12-05 | Acer Incorporated | Electronic apparatus and method for temporarily storing data thereof |
CN106844584A (zh) * | 2017-01-10 | 2017-06-13 | 清华大学 | 元数据结构和基于其的操作方法、定位方法、切分方法 |
CN106844584B (zh) * | 2017-01-10 | 2019-12-17 | 清华大学 | 元数据结构和基于其的操作方法、定位方法、切分方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103150394A (zh) | 2013-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103150394B (zh) | 面向高性能计算的分布式文件系统元数据管理方法 | |
US11947510B2 (en) | System and method for clustering distributed hash table entries | |
CN110399373B (zh) | 一种区块链账本存储系统、存储查询方法及删除方法 | |
US10528537B2 (en) | System and method for fetching the latest versions of stored data objects | |
US10002148B2 (en) | Memory-aware joins based in a database cluster | |
JP6198210B2 (ja) | コンピュータ実装された動的シャーディング方法 | |
CN101354726B (zh) | 一种机群文件系统的内存元数据管理方法 | |
CN104025010B (zh) | 存储系统中的可变长度编码 | |
US7194492B2 (en) | Method and apparatus for efficiently copying distributed data files | |
CN103023982B (zh) | 一种云存储客户端的低延迟元数据访问方法 | |
CN106294190B (zh) | 一种存储空间管理方法及装置 | |
CN104850572A (zh) | HBase非主键索引构建与查询方法及其系统 | |
CN104067216A (zh) | 用于实施可扩展数据存储服务的系统和方法 | |
CN102053982A (zh) | 一种数据库信息管理方法和设备 | |
US10503693B1 (en) | Method and system for parallel file operation in distributed data storage system with mixed types of storage media | |
CN106775446A (zh) | 基于固态硬盘加速的分布式文件系统小文件访问方法 | |
CN116541427B (zh) | 数据查询方法、装置、设备及存储介质 | |
US20160092454A1 (en) | Sparse file access | |
WO2020215580A1 (zh) | 一种分布式全局数据去重方法和装置 | |
CN104166661A (zh) | 数据存储系统和数据存储方法 | |
CN109597903A (zh) | 图像文件处理装置和方法、文件存储系统及存储介质 | |
JP4891657B2 (ja) | データ記憶システム、ファイル検索装置およびプログラム | |
CN104951475A (zh) | 分布式文件系统和实现方法 | |
JP2015114913A (ja) | ストレージ装置、ストレージシステム及びデータ管理プログラム | |
CN105046162A (zh) | 在内容可寻址存储系统中维护并使用子对父映射的缓存 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |