CN103150225B - 基于应用级代理的对象并行存储系统磁盘满异常容错方法 - Google Patents
基于应用级代理的对象并行存储系统磁盘满异常容错方法 Download PDFInfo
- Publication number
- CN103150225B CN103150225B CN201310096834.2A CN201310096834A CN103150225B CN 103150225 B CN103150225 B CN 103150225B CN 201310096834 A CN201310096834 A CN 201310096834A CN 103150225 B CN103150225 B CN 103150225B
- Authority
- CN
- China
- Prior art keywords
- file
- disk
- application level
- full
- supplementary
- 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
Images
Abstract
本发明公开了一种基于应用级代理的对象并行存储系统磁盘满异常容错方法,实施步骤如下:1)在客户端的顶层应用和文件系统客户端之间建立应用级代理层,设置补充文件保存策略;2)应用级代理层接收顶层应用的文件操作请求,根据文件操作请求以及文件系统客户端返回的信息维护操作文件的“磁盘满”标志和补充文件描述符列表,应用级代理层在执行写文件请求时如果遇到“磁盘满”错误则在对象并行存储系统中建立新补充文件并将写文件请求数据写入新补充文件;应用级代理层在执行写文件请求以外的文件操作请求时,同时访问操作文件及其补充文件,并将操作结果返回给顶层应用。本发明具有磁盘满容错性能好、容错成本低的优点。
Description
技术领域
本发明涉及对象并行存储系统领域,具体涉及一种基于应用级代理的对象并行存储系统磁盘满异常容错方法。
背景技术
对象并行存储系统是基于对象存储系统的一种并行存储结构,是大规模并行计算机系统中的重要组成部分。如图1所示,对象并行存储系统由客户端、文件元数据服务、元数据存储和文件数据服务、数据存储通过网络互连构成并通过互联网络进行数据传递,其中客户端运行于计算结点,元数据服务和文件数据服务分别运行于元数据存储结点和数据存储结点上(统称为存储结点),元数据存储和数据存储放在独立磁盘设备上,集群文件中的任意文件数据内容分布存放在一个或多个存储结点管理的磁盘上,分布决策由元数据服务负责,详细分布信息记录在元数据磁盘上。其中,元数据服务器负责维护文件的元数据信息,包括文件的所有者、创建时间、修改时间、文件大小以及文件在对象存储服务器上的分布等信息。对象存储服务器负责保存文件的具体数据内容,通常情况下,一个文件被划分成一个或多个对象,存储在一个或多个对象存储服务器中。而客户端则负责向应用提供标准的I/O接口,并实现I/O请求的转发。当应用发起I/O访问请求时,该请求首先被提交给元数据服务器,待获取到对应的元数据信息后,再将其转发给相关的对象服务器,继续后续的数据访问过程。对象并行存储系统因其并行性高、存取速度快等优点,已经在高性能计算领域取得了很好的应用效果。
为减轻元数据服务器的工作负载,提高存储系统的可扩展性,通常情况下对象并行存储系统的元数据服务器不会存储数据文件复杂的位置信息,一个文件常常只存储于某一个指定的对象存储服务器,或以规则的条带方式存储于若干个指定的对象存储服务器。因此,当某个对象存储服务器的全部存储资源被连续的数据文件“写请求”占满时,后面继续针对该对象存储服务器的“写请求”将会产生“磁盘满”错误,导致作业后续的执行过程无法正常进行。
为解决这一问题,现有方法通常考虑对象存储服务器之间的负载均衡策略,一方面为元数据服务器设定调度策略,若某一个对象存储服务器的剩余空间低于一定的比例,则在创建新文件时屏蔽该对象存储服务器;另一方面实施周期性的负载均衡检查,将负载重的对象存储服务器上的数据文件定期地迁移到负载轻的对象存储服务器上去。上述方法虽然在一定程度上降低了“磁盘满”错误发生的概率,但是当作业处理的数据文件较大时,特别是系统任务数较多,多个作业同时对一个对象存储服务器连续产生“写请求”时,虽然在创建文件时该存储服务器的剩余空间仍然满足调度比例限制,但多个作业的连续“写请求”仍可能会导致剩余存储空间被完全占满,进而导致多个作业的执行失败。
解决该问题的另一个思路是改变现有对象并行存储系统的数据文件布局方式,将现有的静态布局方式修改为动态布局方式。在处理数据文件连续的“写请求”时,元数据服务器按照预设的数据块大小将其动态的指定到负载小的对象存储服务器上去,从而通过动态调度的方式避免“磁盘满”错误的发生。然而,要实现该方法,元数据服务器需要为每个数据文件保存其详细的数据布局位图,从而加重了元数据服务器的工作量,影响了整个并行存储系统的可扩展性。
目前,伴随着并行计算机系统规模的不断增大,计算任务的复杂性不断提高,存储系统的I/O压力也不断增大,一旦在长时间作业中发生“磁盘满”错误,将严重影响作业的正常运行,甚至由于超时导致计算结果失效。因此,如何在不改变现有对象并行存储系统的数据文件管理方式的条件下,从根本上消除“磁盘满”错误的情况,保证加载作业顺利执行已经成为了影响现有对象并行存储系统可用性的关键问题。
发明内容
本发明要解决的技术问题是提供一种磁盘满容错性能好、容错成本低的基于应用级代理的对象并行存储系统磁盘满异常容错方法。
为了解决上述技术问题,本发明采用的技术方案为:
一种基于应用级代理的对象并行存储系统磁盘满异常容错方法,其实施步骤如下:
1)在客户端的顶层应用和用于访问对象并行存储系统的文件系统客户端之间建立应用级代理层,用于代理顶层应用访问对象并行存储系统的操作;在所述应用级代理层中构造用于存储请求文件信息的代理层文件描述符,所述代理层文件描述符包括文件的描述符、打开方式、路径、文件名、“磁盘满”标志和补充文件描述符列表,所述“磁盘满”标志默认为假,所述补充文件描述符列表用于记录文件的所有补充文件的描述符列表;
2)在客户端的顶层应用发出文件操作请求时,所述应用级代理层接收顶层应用的文件操作请求并判断是否为写请求,如果是写请求则跳转执行步骤3),否则跳转执行步骤4);
3)判断写请求对应操作文件的“磁盘满”标志是否为真,如果非真则所述应用级代理层直接将写请求通过文件系统客户端发送给对象并行存储系统执行对操作文件的写操作,否则所述应用级代理层通过文件系统客户端获取操作文件及其补充文件,通过文件系统客户端对操作文件及其补充文件进行写操作;所述应用级代理层接收对象并行存储系统返回的写操作结果,如果写操作结果返回“磁盘满”错误则将操作文件的“磁盘满”标志设置为真,通过文件系统客户端为操作文件新建补充文件,将新建的补充文件加入操作文件的补充文件描述符列表,然后通过文件系统客户端获取操作文件及其补充文件,通过文件系统客户端对操作文件及其补充文件进行写操作,如果写操作结果未返回“磁盘满”错误则将写操作结果返回给顶层应用并退出;
4)判断操作请求对应操作文件的“磁盘满”标志是否为真,如果非真则所述应用级代理层直接将操作请求通过文件系统客户端发送给对象并行存储系统执行对操作文件的操作,否则所述应用级代理层通过文件系统客户端获取操作文件及其补充文件,通过文件系统客户端对操作文件及其补充文件进行操作;所述应用级代理层接收到对象并行存储系统返回的操作结果后判断操作文件的“磁盘满”标志,如果操作文件的“磁盘满”标志为真,则根据操作文件及其补充文件的操作结果合并生成操作文件的操作结果并返回给顶层应用,否则直接将操作文件的操作结果返回给顶层应用。
作为本发明上述技术方案的进一步改进:
所述步骤3)中通过文件系统客户端对操作文件及其补充文件进行写操作的详细步骤如下:
3.1)通过文件系统客户端将写操作的数据写入操作文件最后新建的补充文件;
3.2)将写操作的数据按照对象并行存储系统的底层数据块大小的整数倍拆分为多个子写请求,将所述多个子写请求针对操作文件和除最后新建的补充文件以外的其它补充文件进行写操作将所述操作文件和其它补充文件中的过时数据进行写操作覆盖。
所述步骤4)的详细步骤如下:
4.1)判断文件操作请求的类型,如果操作请求为创建文件请求,则跳转执行步骤4.2);如果操作请求为打开文件请求,则跳转执行步骤4.3);如果操作请求为读文件请求,则跳转执行步骤4.4);如果操作请求为关闭文件请求,则跳转执行步骤4.5);如果操作请求为删除文件请求,则跳转执行步骤4.6);如果操作请求为修改文件名请求,则跳转执行步骤4.7);如果操作请求为读取文件属性请求,则跳转执行步骤4.8);
4.2)代理执行创建文件请求:所述应用级代理层通过文件系统客户端将创建文件请求直接转发给对象并行存储系统,对象并行存储系统选择磁盘利用率较低的数据服务器创建文件,并向应用级代理层返回操作结果,所述应用级代理层通过代理层文件描述符记录返回的创建文件信息,设置操作文件的“磁盘满”标志为假,并将操作结果返回给顶层应用并退出;
4.3)代理执行打开文件请求:所述应用级代理层通过文件系统客户端将打开文件请求转发给对象并行存储系统,并通过代理层文件描述符记录对象并行存储系统返回的操作结果;同时根据预设的补充文件保存策略通过文件系统客户端查找操作文件是否有补充文件判断操作文件的“磁盘满”标志,如果操作文件有补充文件,则依次打开这些补充文件、设置操作文件的“磁盘满”标志为真,将返回补充文件的描述符加入操作文件的补充文件描述符列表;如果操作文件没有补充文件,则设置操作文件的“磁盘满”标志为假;最终所述应用级代理层将操作结果返回给顶层应用并退出;
4.4)代理执行读文件请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则所述应用级代理层通过文件系统客户端读取操作文件及其补充文件描述符列表中记录的所有补充文件,然后将读取的操作文件数据和补充文件数据进行位或操作并返回给顶层应用;如果“磁盘满”标志为假,则所述应用级代理层直接通过文件系统客户端读取操作文件数据并返回给顶层应用并退出;
4.5)代理执行关闭文件请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则关闭操作文件及其补充文件描述符列表中记录的所有补充文件,否则仅关闭操作文件;最终所述应用级代理层将操作结果返回给顶层应用;
4.6)代理执行删除文件请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则所述应用级代理层直接通过文件系统客户端删除操作文件及其补充文件描述符列表中记录的所有补充文件,否则仅删除操作文件;最终所述应用级代理层将操作结果返回给顶层应用并退出;
4.7)代理执行修改文件名请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则所述应用级代理层通过文件系统客户端修改操作文件的文件名及其补充文件描述符列表中记录的所有补充文件的文件名,否则仅修改操作文件的文件名;最终所述应用级代理层将操作结果返回给顶层应用并退出;
4.8)代理执行读取文件属性请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则所述应用级代理层通过文件系统客户端读取操作文件的文件属性,通过文件系统客户端获取操作文件及其补充文件描述符列表中记录所有补充文件中的文件大小的最大值修改所述文件属性中的文件大小,通过文件系统客户端获取操作文件及其补充文件描述符列表中记录所有补充文件占据磁盘空间的块数总和修改所述文件属性中的占据磁盘空间块数,最终所述应用级代理层将修改后的文件属性作为操作结果返回给顶层应用;如果“磁盘满”标志为假,则所述应用级代理层通过文件系统客户端读取操作文件的文件属性作为返回的操作结果,并将操作结果返回给顶层应用并退出。
本发明基于应用级代理的对象并行存储系统磁盘满异常容错方法具有下述优点:
1、本发明在客户端的顶层应用和用于访问对象并行存储系统的文件系统客户端之间建立应用级代理层,通过应用级代理层处理写入时对象并行存储系统返回的“磁盘满”错误,并自动实现对对象并行存储系统“磁盘满”错误的容错写入处理,在不修改应用逻辑和底层并行文件系统工作流程的前提下,通过应用级代理层的应用级代理方法实现了针对“磁盘满”错误的容错,有效保证了海量I/O请求情况下计算任务的正常执行,具有磁盘满容错性能好的优点,能够提高对象并行存储系统的健壮性。
2、本发明通过设置补充文件描述符列表和补充文件保存以及读取策略,应用级代理层在执行写文件请求时如果遇到文件系统客户端返回的“磁盘满”错误则自动通过文件系统客户端在对象并行存储系统中建立新补充文件并将写文件请求数据写入新补充文件,通过文件系统客户端对操作文件及其补充文件进行写操作,应用级代理层在执行写文件请求以外的文件操作请求时,同时访问操作文件及其补充文件并将操作结果返回给顶层应用,充分利用并行文件系统架构中多数据服务器的特点,通过将出错的大文件打散成多个小文件分别存储,实现了数据输出过程中的资源重新调度,避免配置硬件多路径带来的成本代价,达到了低成本容错的目的,具有容错成本低的优点。
附图说明
图1为现有技术中对象并行存储系统的结构示意图。
图2为本发明实施例的方法流程示意图。
图3为本发明实施例的原理框架结构示意图。
图4为本发明实施例中应用级代理层的工作原理示意图。
图5为本发明实施例中操作文件及其补充文件的读写操作原理示意图。
图6为本发明实施例中代理执行写文件请求的方法流程示意图。
具体实施方式
如图2和图3所示,本实施例基于应用级代理的对象并行存储系统磁盘满异常容错方法的实施步骤如下:
1)在客户端的顶层应用和用于访问对象并行存储系统的文件系统客户端之间建立应用级代理层,用于代理顶层应用访问对象并行存储系统的操作;在应用级代理层中构造用于存储操作文件信息的代理层文件描述符,代理层文件描述符包括文件的描述符、打开方式、路径、文件名、“磁盘满”标志和补充文件描述符列表,“磁盘满”标志默认为假,补充文件描述符列表用于记录文件的所有补充文件的描述符列表;
2)在客户端的顶层应用发出文件操作请求时,应用级代理层接收顶层应用的文件操作请求并判断是否为写请求,如果是写请求则跳转执行步骤3),否则跳转执行步骤4);
3)判断写请求对应操作文件的“磁盘满”标志是否为真,如果非真则应用级代理层直接将写请求通过文件系统客户端发送给对象并行存储系统执行对操作文件的写操作,否则应用级代理层通过文件系统客户端获取操作文件及其补充文件,通过文件系统客户端对操作文件及其补充文件进行写操作;应用级代理层接收对象并行存储系统返回的写操作结果,如果写操作结果返回“磁盘满”错误则将操作文件的“磁盘满”标志设置为真,通过文件系统客户端为操作文件新建补充文件,将新建的补充文件加入操作文件的补充文件描述符列表,然后通过文件系统客户端获取操作文件及其补充文件,通过文件系统客户端对操作文件及其补充文件进行写操作,如果写操作结果未返回“磁盘满”错误则将写操作结果返回给顶层应用并退出;
4)判断操作请求对应操作文件的“磁盘满”标志是否为真,如果非真则应用级代理层直接将操作请求通过文件系统客户端发送给对象并行存储系统执行对操作文件的操作,否则应用级代理层通过文件系统客户端获取操作文件及其补充文件,通过文件系统客户端对操作文件及其补充文件进行操作;应用级代理层接收到对象并行存储系统返回的操作结果后判断操作文件的“磁盘满”标志,如果操作文件的“磁盘满”标志为真,则根据操作文件及其补充文件的操作结果合并生成操作文件的操作结果并返回给顶层应用,否则直接将操作文件的操作结果返回给顶层应用。
如图3和图4所示,对象并行存储系统包括元数据服务器和对象数据服务器,每一个“磁盘满”标志为真的文件通过写补充文件以后,其文件组成包括原始文件和多个补充文件(补充文件1、补充文件2、……补充文件n)。应用级代理层工作在对象并行存储系统客户端的I/O请求入口处,位于顶层应用和并行文件系统客户端之间。通常情况下,顶层应用和存储系统间通过标准Posix接口实现访问。因此,为保持接口一致性,应用级代理层实现了对Posix接口的完整封装,对于和“磁盘满”错误无关的I/O请求直接转发给下层的工作逻辑,而和“磁盘满”错误相关的I/O请求则解释为新的工作流程,通过I/O请求的代理转发实现异常的隐藏。为保持“磁盘满”错误处理过程的连续性,应用级代理层需要维护与I/O请求相关的数据结构。对于顶层应用的各项I/O请求,应用级代理层根据前述逻辑转化成一个或多个I/O请求,发送给文件系统客户端,一旦发生错误,则在代理层对错误进行处理,实现了对顶层应用的异常隐藏,有效的保证上层计算任务的正常执行。应用级代理层的总体流程如下所述:①、顶层应用将I/O请求发送给应用级代理;②、应用级代理根据容错逻辑翻译该I/O请求;③、应用级代理将翻译后的I/O请求通过文件系统客户端交给并行文件系统;④、并行文件系统将操作结果返回给应用级代理;⑤、若返回结果出错,应用级代理根据容错逻辑重新翻译该I/O请求,转回③;⑥、应用级代理将结果返回给顶层应用,处理过程结束。通常情况下,顶层应用针对数据文件的操作都是通过文件描述符进行,即在对文件进行open操作时,获得系统返回的整数型文件描述符fd,此后针对该文件的读写操作都以fd作为标识。因此应用级代理层需要构造与该数据文件相对应的代理层描述符,记录该数据文件的标识信息,并存储相关的异常处理标记,用以支持后续的容错功能,代理层文件描述符的结构主要包括{fd, flags, path, name, complement_flag , complement_fd}六个域,其中fd、flags、path、name分别保存文件的描述符、打开方式、路径以及文件名,complement_flag是“磁盘满”错误情况标志,complement_fd保存补充文件的描述符列表。
本实施例中,步骤3)中通过文件系统客户端对操作文件及其补充文件进行写操作(writev命令)的详细步骤如下:
3.1)通过文件系统客户端将写操作的数据写入操作文件最后新建的补充文件;
3.2)将写操作的数据按照对象并行存储系统的底层数据块大小的整数倍拆分为多个子写请求,将多个子写请求针对操作文件和除最后新建的补充文件以外的其它补充文件进行写操作将操作文件和其它补充文件中的过时数据进行写操作覆盖,从而确保文件中过时数据被新数据覆盖,保证数据写入过程的正确性。
本实施例中并行文件系统底层数据块大小为4kB,将写操作的数据按照对象并行存储系统的底层数据块大小的整数倍(4K)拆分为多个子写请求。
如图5所示,(1)假设在新数据写入前,操作文件的原始文件data1保存着该文件在地址[0kB-8KB]以及地址[13kB-16kB]的有效数据,补充文件data1.complt001保存着在地址[9kB-12KB]上的有效数据(需要说明的是,出现该状态是由于posix标准语义支持先写文件后面部分,后写文件前面部分,因此data1文件在写完地址[13kB-16kB]上的数据后发生了“磁盘满”错误,从而将后写的地址[9kB-12KB]上的数据保存到了补充文件data1.complt001内)。(2)在新数据(对应操作文件的地址为[7kB-15kB])写入时,发生了“磁盘满”错误,因此新建了补充文件data1.complt002,并将[7kB-15kB]按照4K拆分为多个子写请求(数据分别为:new data2、new data3、new data4);将多个子写请求的数据分别写入data1.complt002文件的[7kB-15kB]的地址,实现新数据的有效保存;此外,为了保证数据读出时的正确性,还需要清空或者修改data1以及data1.complt001文件内对应地址的数据。然而,如果将该写入请求不经过拆分直接发送给data1,则在该请求执行完[7kB-8kB]的复写过程之后,在写入[9kB-12kB]的数据时,由于data1之前没有保存该数据,因此需要申请新的4k的块来保存该数据,而此时保存data1文件的数据服务器已经发生磁盘满情况,因此该请求将失败返回,从而造成后面[13kB-16kB]对应的过时数据没有被新数据覆盖,同样情况在复写data1.complt001文件时也会发生。在这种情况下,后续针对该地址的读请求将无法判断有效数据的保存位置,从而无法获得正确的数据信息。因此本实施例中在写入数据时,将写入的数据进行拆分,将多个子写请求(数据分别为:new data2、new data3、new data4)分别发送给针对操作文件和除最后新建的补充文件以外的其它补充文件。(3)在新数据写入后,原始文件data1被写入new data2和new data4将过时数据进行写操作覆盖,补充文件data1.complt001被写入new data3将过时数据进行写操作覆盖,从而能够保证将文件各个块的过时数据进行正确的复写。(4)在读取操作文件时,则分别将操作文件的原始文件data1、补充文件data1.complt001、补充文件data1.complt002读取,在文件读出时,从各个文件读出的数据要么是被复写的正确数据,要么是空洞返回的全0信息,因此通过位或操作(OR操作)即可生成正确的数据信息,从而能够保证数据的正确性。
本实施例中,步骤4)的详细步骤如下:
4.1)判断文件操作请求的类型,如果操作请求为创建文件请求(create命令),则跳转执行步骤4.2);如果操作请求为打开文件请求(open命令),则跳转执行步骤4.3);如果操作请求为读文件请求(readv命令),则跳转执行步骤4.4);如果操作请求为关闭文件请求(close命令),则跳转执行步骤4.5);如果操作请求为删除文件请求(unlink命令),则跳转执行步骤4.6);如果操作请求为修改文件名请求(rename命令),则跳转执行步骤4.7);如果操作请求为读取文件属性请求(stat命令),则跳转执行步骤4.8);
4.2)代理执行创建文件请求(create命令):应用级代理层通过文件系统客户端将创建文件请求直接转发给对象并行存储系统,对象并行存储系统选择磁盘利用率较低的数据服务器创建文件,并向应用级代理层返回操作结果,应用级代理层通过代理层文件描述符记录返回的创建文件信息,设置操作文件的“磁盘满”标志为假,并将操作结果返回给顶层应用并退出;
4.3)代理执行打开文件请求(open命令):应用级代理层通过文件系统客户端将打开文件请求转发给对象并行存储系统,并通过代理层文件描述符记录对象并行存储系统返回的操作结果;同时根据预设的补充文件保存策略通过文件系统客户端查找操作文件是否有补充文件判断操作文件的“磁盘满”标志,如果操作文件有补充文件,则依次打开这些补充文件、设置操作文件的“磁盘满”标志为真,将返回补充文件的描述符加入操作文件的补充文件描述符列表;如果操作文件没有补充文件,则设置操作文件的“磁盘满”标志为假;最终应用级代理层将操作结果返回给顶层应用并退出;
4.4)代理执行读文件请求(readv命令):应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则应用级代理层通过文件系统客户端读取操作文件及其补充文件描述符列表中记录的所有补充文件,然后将读取的操作文件数据和补充文件数据进行位或操作并返回给顶层应用;如果“磁盘满”标志为假,则应用级代理层直接通过文件系统客户端读取操作文件数据并返回给顶层应用并退出;
4.5)代理执行关闭文件请求(close命令):应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则关闭操作文件及其补充文件描述符列表中记录的所有补充文件,否则仅关闭操作文件;最终应用级代理层将操作结果返回给顶层应用;
4.6)代理执行删除文件请求(unlink命令):应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则应用级代理层直接通过文件系统客户端删除操作文件及其补充文件描述符列表中记录的所有补充文件,否则仅删除操作文件;最终应用级代理层将操作结果返回给顶层应用并退出;
4.7)代理执行修改文件名请求(rename命令):应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则应用级代理层通过文件系统客户端修改操作文件的文件名及其补充文件描述符列表中记录的所有补充文件的文件名,否则仅修改操作文件的文件名;最终应用级代理层将操作结果返回给顶层应用并退出;
4.8)代理执行读取文件属性请求(stat命令):应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则应用级代理层通过文件系统客户端读取操作文件的文件属性,通过文件系统客户端获取操作文件及其补充文件描述符列表中记录所有补充文件中的文件大小的最大值修改文件属性中的文件大小,通过文件系统客户端获取操作文件及其补充文件描述符列表中记录所有补充文件占据磁盘空间的块数总和修改文件属性中的占据磁盘空间块数,最终应用级代理层将修改后的文件属性作为操作结果返回给顶层应用;如果“磁盘满”标志为假,则应用级代理层通过文件系统客户端读取操作文件的文件属性作为返回的操作结果,并将操作结果返回给顶层应用并退出。
参见前述步骤3)和步骤4),本实施例的应用级代理层的容错流程主要涉及以下八种文件操作请求的流程:
(1)创建文件的流程(create命令)
应用级代理层通过文件系统客户端将创建文件请求直接转发给对象并行存储系统,对象并行存储系统创建文件时,并行存储系统调度器通常会将文件创建在磁盘利用率相对较低的数据服务器,不会发生“磁盘满”错误,因此应用级代理层只需记录所操作文件相应的标识信息,将操作文件的 “磁盘满”标志设置为假并将操作结果返回给顶层应用即可。
(2)打开文件的流程(open命令)
打开文件时,应用级代理层同样要记录所操作文件相应的标识信息,并通过查找其对应的补充文件是否存在来判定该文件是否处于“磁盘满”错误状态,本实施例中补充文件的保存位置和命名规则在应用级代理层初始化时进行配置,与所操作文件处于同一目录,其命名按照一定规则在原始文件名后增加后缀,例如第一个补充文件命名是在原始文件名添加后缀.complt001,第二个补充文件后缀为.complt002,以此类推。若补充文件不存在,则设置“磁盘满”标志为假;若补充文件存在,则依次打开这些文件,并将返回的补充文件描述符保存到补充文件的描述符列表中,同时设置“磁盘满”标志为真。
(3)写文件的流程(writev命令)
如图6所示,应用级代理层接收用户级文件写请求后,首先判断所操作文件的“磁盘满”标志是否为真。若标志为真,则将写数据请求发送给最后一个补充文件,同时,将写数据请求按照并行文件系统底层数据块的块大小拆分成多个写请求,多个写请求按照块大小的整数倍地址进行切分,此后将这些请求发送给原始文件以及除了最后一个补充文件之外的其他补充文件。例如,一个数据文件data1包含两个补充文件data1.complt001,data1.complt002,写入请求地址为[7kB-15kB],假设并行文件系统底层数据块大小为4kB,则将该请求发送给data1.complt002,并把请求拆分成[7kB-8kB]、[9kB-12kB]、[13kB-15kB]三个子请求同时发送给data1和data1.complt001。若标志为假,则应用级代理层将正常的写请求发送给底层文件系统。然后,应用级代理层接收底层文件系统操作结果,并判断是否返回“磁盘满”错误,如果返回“磁盘满”错误则设置“磁盘满”标志为真、增加补充文件、修改补充文件描述符列表并进入容错流程,否则将操作结果返回给顶层应用。容错流程包括以下几个步骤:a)按照规则创建新的补充文件,此时并行存储系统调度器会选择一个空间相对充裕的数据服务器保存该补充文件;b)将该补充文件的描述符存入补充文件的描述符列表;c)设置所操作文件“磁盘满”标志为真;d)按照“磁盘满”标志为真重新执行写流程。
(4)读文件的流程(readv命令)
首先判断所操作文件的“磁盘满”标志是否为真。
若标志为真,从原始文件和所有补充文件的对应地址中读取出请求数据,并将所有文件返回的数据进行位或操作,再将结果返回,由于底层文件系统针对空洞数据解释为0,因此通过或操作可以获取到对应地址的正确的文件数据。
若标志为假,直接读取所操作文件。
(5)关闭文件的流程(close命令)
首先判断所操作文件的“磁盘满”标志是否为真。
若标志为真,同时关闭原始文件和所有的补充文件。
若标志为假,直接关闭所操作文件。
(6)删除文件的流程(unlink)
首先判断所操作文件的“磁盘满”标志是否为真。
若标志为真,同时删除原始文件和所有的补充文件。
若标志为假,直接删除所操作文件。
(7)修改文件名的流程(rename命令)
首先判断所操作文件的“磁盘满”标志是否为真。
若标志为真,将正常文件和所有的补充文件都按照规则进行修改。
若标志为假,直接修改所操作文件的文件名。
(8)读取文件属性的流程(stat命令)
首先判断所操作文件的“磁盘满”标志是否为真。
若标志为真,将正常文件和所有补充文件的文件大小的最大值作为返回的文件大小,将正常文件和所有补充文件的占据磁盘空间块数的和作为返回的占据磁盘空间块数,其他属性值取自正常文件。
若标志为假,直接读取所操作文件的属性。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (3)
1.一种基于应用级代理的对象并行存储系统磁盘满异常容错方法,其特征在于实施步骤如下:
1)在客户端的顶层应用和用于访问对象并行存储系统的文件系统客户端之间建立应用级代理层,用于代理顶层应用访问对象并行存储系统的操作;在所述应用级代理层中构造用于存储操作文件信息的代理层文件描述符,所述代理层文件描述符包括文件的描述符、打开方式、路径、文件名、“磁盘满”标志和补充文件描述符列表,所述“磁盘满”标志默认为假,所述补充文件描述符列表用于记录文件的所有补充文件的描述符列表;
2)在客户端的顶层应用发出文件操作请求时,所述应用级代理层接收顶层应用的文件操作请求并判断是否为写请求,如果是写请求则跳转执行步骤3),否则跳转执行步骤4);
3)判断写请求对应操作文件的“磁盘满”标志是否为真,如果非真则所述应用级代理层直接将写请求通过文件系统客户端发送给对象并行存储系统执行对操作文件的写操作,否则所述应用级代理层通过文件系统客户端获取操作文件及其补充文件,通过文件系统客户端对操作文件及其补充文件进行写操作;所述应用级代理层接收对象并行存储系统返回的写操作结果,如果写操作结果返回“磁盘满”错误则将操作文件的“磁盘满”标志设置为真,通过文件系统客户端为操作文件新建补充文件,将新建的补充文件加入操作文件的补充文件描述符列表,然后通过文件系统客户端获取操作文件及其补充文件,通过文件系统客户端对操作文件及其补充文件进行写操作,如果写操作结果未返回“磁盘满”错误则将写操作结果返回给顶层应用并退出;
4)判断操作请求对应操作文件的“磁盘满”标志是否为真,如果非真则所述应用级代理层直接将操作请求通过文件系统客户端发送给对象并行存储系统执行对操作文件的操作,否则所述应用级代理层通过文件系统客户端获取操作文件及其补充文件,通过文件系统客户端对操作文件及其补充文件进行操作;所述应用级代理层接收到对象并行存储系统返回的操作结果后判断操作文件的“磁盘满”标志,如果操作文件的“磁盘满”标志为真,则根据操作文件及其补充文件的操作结果合并生成操作文件的操作结果并返回给顶层应用,否则直接将操作文件的操作结果返回给顶层应用。
2.根据权利要求1所述的基于应用级代理的对象并行存储系统磁盘满异常容错方法,其特征在于,所述步骤3)中通过文件系统客户端对操作文件及其补充文件进行写操作的详细步骤如下:
3.1)通过文件系统客户端将写操作的数据写入操作文件最后新建的补充文件;
3.2)将写操作的数据按照对象并行存储系统的底层数据块大小的整数倍拆分为多个子写请求,将所述多个子写请求针对操作文件和除最后新建的补充文件以外的其它补充文件进行写操作将所述操作文件和其它补充文件中的过时数据进行写操作覆盖。
3.根据权利要求2所述的基于应用级代理的对象并行存储系统磁盘满异常容错方法,其特征在于,所述步骤4)的详细步骤如下:
4.1)判断文件操作请求的类型,如果操作请求为创建文件请求,则跳转执行步骤4.2);如果操作请求为打开文件请求,则跳转执行步骤4.3);如果操作请求为读文件请求,则跳转执行步骤4.4);如果操作请求为关闭文件请求,则跳转执行步骤4.5);如果操作请求为删除文件请求,则跳转执行步骤4.6);如果操作请求为修改文件名请求,则跳转执行步骤4.7);如果操作请求为读取文件属性请求,则跳转执行步骤4.8);
4.2)代理执行创建文件请求:所述应用级代理层通过文件系统客户端将创建文件请求直接转发给对象并行存储系统,对象并行存储系统选择磁盘利用率较低的数据服务器创建文件,并向应用级代理层返回操作结果,所述应用级代理层通过代理层文件描述符记录返回的创建文件信息,设置操作文件的“磁盘满”标志为假,并将操作结果返回给顶层应用并退出;
4.3)代理执行打开文件请求:所述应用级代理层通过文件系统客户端将打开文件请求转发给对象并行存储系统,并通过代理层文件描述符记录对象并行存储系统返回的操作结果;同时根据预设的补充文件保存策略通过文件系统客户端查找操作文件是否有补充文件判断操作文件的“磁盘满”标志,如果操作文件有补充文件,则依次打开这些补充文件、设置操作文件的“磁盘满”标志为真,将返回补充文件的描述符加入操作文件的补充文件描述符列表;如果操作文件没有补充文件,则设置操作文件的“磁盘满”标志为假;最终所述应用级代理层将操作结果返回给顶层应用并退出;
4.4)代理执行读文件请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则所述应用级代理层通过文件系统客户端读取操作文件及其补充文件描述符列表中记录的所有补充文件,然后将读取的操作文件数据和补充文件数据进行位或操作并返回给顶层应用;如果“磁盘满”标志为假,则所述应用级代理层直接通过文件系统客户端读取操作文件数据并返回给顶层应用并退出;
4.5)代理执行关闭文件请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则关闭操作文件及其补充文件描述符列表中记录的所有补充文件,否则仅关闭操作文件;最终所述应用级代理层将操作结果返回给顶层应用并退出;
4.6)代理执行删除文件请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则所述应用级代理层直接通过文件系统客户端删除操作文件及其补充文件描述符列表中记录的所有补充文件,否则仅删除操作文件;最终所述应用级代理层将操作结果返回给顶层应用并退出;
4.7)代理执行修改文件名请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则所述应用级代理层通过文件系统客户端修改操作文件的文件名及其补充文件描述符列表中记录的所有补充文件的文件名,否则仅修改操作文件的文件名;最终所述应用级代理层将操作结果返回给顶层应用并退出;
4.8)代理执行读取文件属性请求:所述应用级代理层判断操作文件的“磁盘满”标志是否为真,如果“磁盘满”标志为真,则所述应用级代理层通过文件系统客户端读取操作文件的文件属性,通过文件系统客户端获取操作文件及其补充文件描述符列表中记录所有补充文件中的文件大小的最大值修改所述文件属性中的文件大小,通过文件系统客户端获取操作文件及其补充文件描述符列表中记录所有补充文件占据磁盘空间的块数总和修改所述文件属性中的占据磁盘空间块数,最终所述应用级代理层将修改后的文件属性作为操作结果返回给顶层应用;如果“磁盘满”标志为假,则所述应用级代理层通过文件系统客户端读取操作文件的文件属性作为返回的操作结果,并将操作结果返回给顶层应用并退出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310096834.2A CN103150225B (zh) | 2013-03-25 | 2013-03-25 | 基于应用级代理的对象并行存储系统磁盘满异常容错方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310096834.2A CN103150225B (zh) | 2013-03-25 | 2013-03-25 | 基于应用级代理的对象并行存储系统磁盘满异常容错方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103150225A CN103150225A (zh) | 2013-06-12 |
CN103150225B true CN103150225B (zh) | 2014-04-09 |
Family
ID=48548323
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310096834.2A Active CN103150225B (zh) | 2013-03-25 | 2013-03-25 | 基于应用级代理的对象并行存储系统磁盘满异常容错方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103150225B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6403140B2 (ja) | 2014-10-22 | 2018-10-10 | 華為技術有限公司Huawei Technologies Co.,Ltd. | オブジェクト・ベース記憶システムにおけるサービス・フロー制御のための方法、コントローラ、およびシステム |
CN107360218B (zh) * | 2017-06-22 | 2020-06-02 | 浙江力石科技股份有限公司 | 面向智慧旅游的大数据一体化并行存储调度方法及系统 |
CN107277144B (zh) * | 2017-06-22 | 2021-02-09 | 浙江力石科技股份有限公司 | 一种分布式高并发云存储数据库系统及其负荷均衡方法 |
CN108924212B (zh) * | 2018-06-27 | 2021-06-29 | 郑州云海信息技术有限公司 | 一种负载均衡方法、系统、装置及计算机可读存储介质 |
CN109388616B (zh) * | 2018-08-27 | 2020-09-11 | 郑州信大捷安信息技术股份有限公司 | 一种智能卡文件系统的管理方法 |
CN116627352B (zh) * | 2023-06-19 | 2024-03-08 | 深圳市青葡萄科技有限公司 | 一种分布式存储器下的数据管理方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100389406C (zh) * | 2006-01-16 | 2008-05-21 | 深圳创维数字技术股份有限公司 | 在嵌入系统的非易失存储器中进行数据操作的方法 |
US20090112921A1 (en) * | 2007-10-31 | 2009-04-30 | Fernando Oliveira | Managing files using layout storage objects |
US7805412B1 (en) * | 2008-01-11 | 2010-09-28 | Panasas, Inc. | Systems and methods for parallel reconstruction of files and objects |
-
2013
- 2013-03-25 CN CN201310096834.2A patent/CN103150225B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN103150225A (zh) | 2013-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10956601B2 (en) | Fully managed account level blob data encryption in a distributed storage environment | |
US10657008B2 (en) | Managing a redundant computerized database using a replicated database cache | |
US10764045B2 (en) | Encrypting object index in a distributed storage environment | |
CA2929776C (en) | Client-configurable security options for data streams | |
US10659225B2 (en) | Encrypting existing live unencrypted data using age-based garbage collection | |
CA2930101C (en) | Partition-based data stream processing framework | |
CA2930026C (en) | Data stream ingestion and persistence techniques | |
CN103150225B (zh) | 基于应用级代理的对象并行存储系统磁盘满异常容错方法 | |
US10157214B1 (en) | Process for data migration between document stores | |
US11652883B2 (en) | Accessing a scale-out block interface in a cloud-based distributed computing environment | |
CA2929777A1 (en) | Managed service for acquisition, storage and consumption of large-scale data streams | |
US11080253B1 (en) | Dynamic splitting of contentious index data pages | |
CN103166785A (zh) | 基于Hadoop的分布式日志分析系统 | |
US10650013B2 (en) | Access operation request management | |
US11294931B1 (en) | Creating replicas from across storage groups of a time series database | |
US11818012B2 (en) | Online restore to different topologies with custom data distribution | |
WO2015015339A1 (en) | A method for a logging process in a data storage system | |
CN104519103A (zh) | 网络数据的同步处理方法、服务器及相关系统 | |
US10387384B1 (en) | Method and system for semantic metadata compression in a two-tier storage system using copy-on-write | |
US8886867B1 (en) | Method for translating virtual storage device addresses to physical storage device addresses in a proprietary virtualization hypervisor | |
US20230169048A1 (en) | Detecting idle periods at network endpoints for management actions at processing clusters for managed databases | |
Chullipparambil | Big data analytics using Hadoop tools | |
US10628391B1 (en) | Method and system for reducing metadata overhead in a two-tier storage architecture | |
US11609933B1 (en) | Atomic partition scheme updates to store items in partitions of a time series database | |
GB2502288A (en) | Modifying the order of checking virtual machines for cached disc data |
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 |