机群文件系统分布式元数据一致性保证方法及系统的制作方法

文档序号:6386382阅读:162来源:国知局
专利名称:机群文件系统分布式元数据一致性保证方法及系统的制作方法
技术领域
本发明涉及机群文件系统分布式元数据操作技术,尤其涉及机群文件系统中保证分布式元数据一致性的方法
背景技术
在大规模机群文件系统中,元数据与数据服务分离已经成为了一种趋势。一方面,数据访问不必通过元数据服务器,而是采用带外方式直接访问存储设备,从而获取较高的数据访问性能;另一方面,元数据服务器专门提供元数据服务,卸载了数据访问负载,从而单台元数据服务器可以支持更高的客户端访问性能,管理更多的存储设备,支持更大的系统规模扩展。然而,随着系统规模的不断扩大,单台元数据服务器逐渐成为制约系统扩展的瓶颈。为了进一步提升机群文件系统的扩展能力,通常采用多台元数据服务器构成元数据服务器机群,以分散元数据负载,支持通过增加元数据服务器数量达到机群文件系统的横向扩展。在元数据服务器机群系统中,机群文件系统的元数据被分散分布在不同的元数据服务器上,不可避免会出现涉及不同元数据服务器的分布式元数据操作,需要在不同的元数据服务器上进行元数据更新子操作。如果分布式元数据操作过程中一些元数据服务器异常宕机,则会造成分布式元数据操作在正常元数据服务器上元数据更新子操作执行成功,而在异常宕机的元数据服务器上元数据更新子操作失败的不一致状态。因此,为了保证机群文件系统中元数据的一致性,需要保证在元数据服务器异常宕机的情况下,分布式元数据操作能够原子提交,即分布式元数据操作能够恢复到如下两种状态之一。要么(I)分布式元数据操作在所有涉及到的元数据服务器上的子操作都为执行完毕状态;要么(2)分布式元数据操作在所有涉及到的元数据服务器上的子操作都为未执行状态。元数据服务器异常宕机后,内存中的信息丢失,只能根据磁盘中持久记录的信息进行一致性恢复。目前采用较多的保证分布式元数据操作一致性的方法主要有两阶段提交方法(2PC,Two Phase Commit)以及基于两阶段提交方法的一些优化方法,比如简化的分布式元数据操作两阶段提交方法(S2PC_MP, Simple 2PC Metadata Processing)以及双向冗余分布式日志优化方法(即异步两阶段提交方法)等。在这些方法中,将所涉及的元数据服务器区分为协调者(Coordinator)和参与者(Participant)两种角色。接收客户端请求的元数据服务器作为协调者,参与操作的其他元数据服务器作为参与者。为方便介绍,协调者进行的元数据状态更新操作称为第一子操作,参与者进行的元数据状态更新称为第二子操作。以上所述的两个子操作要么都执行成功,要么都执行不成功,这样机群文件系统元数据才能处于一致的状态。双向冗余分布式日志方法的过程主要包括(I)协调者首先对第一个子操作的可执行性进行预先检查(Sub-oplPrecheck)。如果检查通过,投赞成票(Vote Yes),协调者为所述分布式元数据操作预先分配编号C-LSN(Log Sequence Number);如果检查不通过,直接结束。(2)协调者向参与者发送请求消息,请求参与者执行第二个子操作(Sub-op2),请求消息中包含协调者的分布式元数据操作编号C_LSN。(3)参与者执行第二个子操作(Sub-op2)。如果执行不成功,则返回撤销“Abort”消息,直接结束;如果执行成功,参与者为所述分布式元数据操作分配编号P_LSN,并将上述编号P_LSN、执行结果记录以及提交“Commit”标志返回给协调者,不必等待将操作结果记录写入日志文件。之后,参与者异步将C_LSN、操作结果记录、“Commit”标志写入日志文件。(4)协调者收到参与者返回消息后,如果是撤销“Abort”消息,直接结束,不必再执行第一个子操作Sub-opl ;如果是提交“Commit”消息,则执行第一个子操作Sub-opl,并返回给应用程序执行的结果,不必等待将第一个子操作的结果记录写入日志文件。之后,协调者异步将P_LSN、操作结果记录、“Commit”标志写入日志文件。(5)协调者异步写入日志文件(磁盘同步)完成后,向参与者发送确认消息ACK(C)。参与者收到确认消息ACK(C)后,表示协调者已经将P_LSN、第一个子操作结果记录、“Commit”持久写入到日志文件中了,参与者可以清除日志文件中所述分布式元数据操作记录。(6)参与者异步写入日志文件(磁盘同步)完成后,向协调者发送确认消息ACK(P)。协调者收到确认消息ACK(P)消息后,表示参与者已经将C_LSN、第二个子操作结果记录、“Commit”持久写入到日志文件中了,协调者可以清除日志文件中所述分布式元数据操作记录。这种双向冗余分布式日志方法在协调者和参与者两端都进行了分布的冗余日志记录,任何一端服务器宕机后,都可以根据另外一端服务器中记录的冗余日志进行重做恢复,与2PC、S2PC_MP相比可有效降低分布式元数据操作一致性保证中磁盘同步等待开销带来的性能影响。但是该方法主要针对单个分布式元数据操作且仅涉及分布式日志。而实际上在元数据服务器机群中,大量的元数据操作仍然是本地元数据操作,也就是仅涉及到一个元数据服务器,不需要跨越多个元数据服务器。每个元数据服务器通常采用本地日志方式来保证本地元数据操作的一致性。当同时存在本地元数据操作以及多个分布式元数据操作时,对于同一元数据服务器而言,必须在保证分布式元数据子操作对该服务器元数据的更新(即对元数据磁盘内容的修改)与本地元数据操作的一致性,以及必须保证分布式元数据操作与本地元数据操作的高效结合,以使得分布式日志能够重做恢复成功,即当分布式日志重做恢复时,其依赖的本地元数据操作已经提交。然而在双向冗余分布式日志方法中没有考虑到上述问题。此夕卜,在双向冗余分布式日志方法中,有可能因为两端节点同时宕机,导致分布式元数据操作状态撤销恢复到完全没有执行的一致状态,然而,如果其他的元数据服务器存在后续分布式操作依赖于该撤销的分布式元数据操作,则导致级联撤销,需要把后续的依赖操作都进行撤销,级联撤销开销较大,并且有可能存在不能完成撤销的情况,因此需要保证多个分布式元数据操作之间不会出现级联撤销,以保证系统能够恢复到一致状态。

发明内容
因此,本发明的目的在于克服上述现有技术的缺陷,提出了一种结合本地日志的机群文件系统分布式元数据一致性保证的方法。
本发明的目的是通过以下技术方案实现的一方面,本发明提供了一种机群文件系统分布式元数据一致性保证的方法,包括步骤1,协调者和参与者将为分布式元数据子操作生成的分布式元数据子操作更新记录作为一个本地事务记录在本地日志中,所述分布式元数据子操作更新记录包括分布式事务和/或分布式元数据更新,在本地事务提交之后,所述分布式事务被写入到分布式日志中,所述分布式元数据更新被写入到元数据磁盘;其中,所述分布式元数据更新包括分布式元数据子操作对文件系统元数据的更新,所述分布式事务包括关于分布式元数据子操作的状态信息;步骤2,协调者和参与者根据所述分布式日志来对机群文件系统元数据操作的一致性进行恢复。上述方法中,所述步骤I还可包括在开始分布式元数据子操作之前对本地日志事务进行强制提交的步骤。上述方法中,所述步骤I可以包括步骤11)协调者预先检查第一子操作能否在协调者端执行,所述第一子操作为协调者端要完成的分布式元数据子操作;步骤12)如果协调者能够执行第一子操作,则为该第一子操作生成分布式事务,为该分布式事务分配分布式日志空间并将该分布式事务作为一个本地事务记录在本地日志中,该分布式事务包括分布式事务号,分布式事务状态、参与者地址、参与者操作类型、操作参数;其中,将分布式事务状态设为PREPARE ;步骤13)协调者向参与者发送请求消息,请求参与者执行第二子操作,该请求消息中包含该协调者端的分布式事务号、分布式事务状态以及参与者地址、参与者操作类型、操作参数;所述第二子操作为参与者要完成的分布式元数据子操作;步骤14)参与者收到来自协调者的请求消息后,检查能否执行第二子操作;如果不能执行第二子操作,则直接向协调者返回失败原因;步骤15)如果检查到参与者端能够执行第二子操作,则为该第二子操作生成分布式元数据更新和分布式事务,并将该分布式元数据更新和分布式事务作为一个本地事务记录在本地日志中,该分布式事务包括分布式事务号,分布式事务状态、协调者地址、协调者分布式事务号、协调者操作类型、操作参数;并且参与者向协调者返回执行成功响应,并将参与者端的分布式事务号捎带返回给协调者;步骤16)当协调者收到来自参与者的执行成功响应后,执行第一子操作,为第一子操作生成分布式元数据更新,以及将所述响应中包含的参与者端的分布式事务信息作为第一子操作的分布式事务的一部分,并将其与该分布式元数据更新作为一个本地事务记录在本地日志中。上述方法中,所述步骤11)中还可包括如果协调者预先检查第一子操作能在协调者端执行,则首先对协调者端本地日志中未提交的本地事务进行强制提交;以及在所述步骤14)中还可包括如果参与者检查能执行第二子操作,则首先参与者端对本地日志中未提交的本地事务进行强制提交。上述方法中,所述步骤15)和步骤16)中分别还可包括下列步骤
注册本地事务的提交回调函数,以备本地事务在持久提交到本地日志后,触发分布式事务提交步骤;所述分布式事务提交步骤包括当分布式事务在本地日志中提交后,设置分布式事务状态为COMMIT ;向另外一端发送分布式事务已经持久提交的确认消息;另外一端收到该确认消息后,设置本地对应的分布式事务的状态为RECEIVE。上述方法中,在所述步骤16)中,如果协调者端收到自参与者返回的执行失败的响应,协调者将分布式事务状态设置为FINISH,表示该分布式事务已结束。上述方法中,还可包括分布式事务清除的步骤,其包括修改分布式日志信息,以释放要清除的分布式事务在分布式日志中所占的空间,其中将对分布式日志信息的修改作为一个本地事务记录到本地日志中,待本地事务持久提交后,对分布式日志信息的修改被同步到分布式日志中;所述要清除的分布式事务为状态为COMMIT和RECEIVE的分布式事务和状态为FINISH的分布式事务。上述方法中,所述步骤2可包括步骤21)当服务器异常宕机后,使用本地日志中记录恢复本地的元数据磁盘和分布式日志;步骤22)从分布式日志文件中读取需要恢复的分布式事务,并根据分布式事务所处的不同状态针对每个分布式事务逐个进行恢复;步骤23)向其他元数据服务器发送协助恢复请求,以通知其他元数据服务器进行与该宕机服务器相关的分布式事务恢复。上述方法中,所述步骤22)中对每个分布式事务进行逐个恢复可包括步骤221)针对每个需要恢复的分布式事务,向分布式事务的另一端发送恢复重做请求,请求中包含该分布式事务编号、事务状态,如果分布式事务处于COMMIT状态,还包含另外一端的分布式事务编号、状态、操作、参数、对象属性;步骤222)另外一端接收到重做请求后,根据该恢复请求发起端的分布式事务状态、以及在本端的本地分布式日志中查找到的对应的分布式事务状态,进行分布式事务恢复操作上述方法中,所述步骤222)可包括如果恢复请求的发起端分布式事务状态为PREPARE,恢复请求的接收端分布式事务状态为COMMIT,则接收端将本地分布式日志中记录的发起端的分布式事务信息返回给接收端,接收端根据这些信息重新完成本端的分布式元数据子操作;如果恢复请求的发起端分布式事务状态为PREPARE,恢复请求的接收端没有找到对应的分布式事务,则接收端返回分布式事务已丢失的消息,发起端收到该消息后撤消该状态为PREPARE的分布式事务;如果恢复请求的发起端分布式事务状态为COMMIT,恢复请求的接收端分布式事务状态为COMMIT,则这两端都向另外一端发送分布式事务已经持久提交的确认消息,并且在收到该确认消息后,设置本地对应的分布式事务的状态为RECEIVE,并执行分布式事务清除的步骤;如果恢复请求的发起端分布式事务状态为COMMIT,恢复请求的接收端没有找到对应的分布式事务,则接收端根据该恢复请求中的操作类型、操作参数、对象属性,进行重做本端分布式元数据子操作;如果恢复请求的发起端分布式事务状态为COMMIT,恢复请求的接收端分布式事务已经提交并被清除,则接收端向发起端返回已经持久提交的确认消息,发起端收到该消息后,将分布式事务状态设为RECEIVE,并执行分布式事务清除步骤。上述方法中,所述步骤23)还可包括其他元数据服务器收到宕机服务器发送的协助恢复请求后,查找涉及该宕机服务器的未完成的分布式事务,以逐项进行恢复;如果未完成的分布式事务状态为PREPARE,并且处于正在允许状态,则向宕机服务器发送正常执行分布式元数据子操作的请求;如果未完成的分布式事务状态为COMMIT,则根据分布式事务中记录的宕机服务器端的分布式事务编号、分布式事务状态、操作类型、操作参数,向宕机服务器发送重做恢复请求,宕机服务器收到该重做恢复请求后,重做分布式元数据子操作以进行恢复。上述方法中,宕机服务器重做分布式元数据子操作可包括为重做的分布式元数据子操作生成分布式元数据子操作更新记录,并作为一个本地事务记录在本地日志中,所述分布式元数据子操作更新记录包括为该重做的分布式元数据子操作生成的分布式事务和分布式元数据更新。又一方面,本发明提供了一种机群文件系统中分布式元数据一致性保证系统,包括协调者和参与者,其中所述协调者和参与者都被配置为将为分布式元数据子操作生成的分布式元数据子操作更新记录作为一个本地事务记录在本地日志中,所述分布式元数据子操作更新记录包括分布式事务和/或分布式元数据更新,在本地事务提交之后,所述分布式事务被写入到分布式日志中,所述分布式元数据更新被写入到元数据磁盘;其中,所述分布式元数据更新包括分布式元数据子操作对文件系统元数据的更新,所述分布式事务包括关于分布式元数据子操作的状态信息;所述协调者和参与者还被配置为根据分布式日志来对机群文件系统元数据操作的一致性进行恢复。上述系统中,所述协调者和参与者还被配置为在开始分布式元数据子操作之前对本地日志事务进行强制提交。上述系统中,所述协调者可被配置为预先检查第一子操作能否在协调者端执行,所述第一子操作为协调者端要完成的分布式元数据子操作;如果能够执行第一子操作,则为该第一子操作生成分布式事务,为该分布式事务分配分布式日志空间并将该分布式事务作为一个本地事务记录在本地日志中,该分布式事务包括分布式事务号,分布式事务状态、参与者地址、参与者操作类型、操作参数;其中,将分布式事务状态设为PREPARE ;向参与者发送请求消息,请求参与者执行第二子操作,该请求消息中包含该协调者端的分布式事务号、分布式事务状态以及参与者地址、参与者操作类型、操作参数;所述第二子操作为参与者要完成的分布式元数据子操作;
当收到来自参与者的执行成功响应后,执行第一子操作,为第一子操作生成分布式元数据更新,以及将所述响应中包含的参与者端的分布式事务信息作为第一子操作的分布式事务的一部分,并将其与该分布式元数据更新作为一个本地事务记录在本地日志中。上述系统中,所述参与者可被配置为当收到来自协调者的请求消息后,检查能否执行第二子操作;如果不能执行第二子操作,则直接向协调者返回失败原因;如果检查到能够执行第二子操作,则为该第二子操作生成分布式元数据更新和分布式事务,并将该分布式元数据更新和分布式事务作为一个本地事务记录在本地日志中,该分布式事务包括分布式事务号,分布式事务状态、协调者地址、协调者分布式事务号、协调者操作类型、操作参数;并且向协调者返回执行成功响应,并将参与者端的分布式事务号捎带返回给协调者。上述系统中,所述协调者还可被配置为如果协调者预先检查第一子操作能在协调者端执行,则首先对协调者端本地日志中未提交的本地事务进行强制提交。上述系统中,所述参与者还可被配置为如果参与者检查能执行第二子操作,则首先参与者端对本地日志中未提交的本地事务进行强制提交。与现有技术相比,本发明的优点在于把分布式元数据子操作产生的分布式元数据子操作更新记录分为两个部分分布式事务和分布式元数据更新。分布式事务将被保存在分布式日志中,而分布式元数据更新将被同步到元数据磁盘。其中,将关于分布式元数据子操作的分布式事务信息和分布式元数据更新信息记录在同一个本地事务中,以保证两者更新的原子性。通过采用分布式日志与本地日志结合,有效复用了本地日志,降低了分布式日志的实现复杂度。此外,通过采用在分布式元数据操作之前强制提交本地日志,避免了当同时存在本地操作和分布式操作或者多个分布式操作时可能产生的级联撤销问题。


以下参照附图对本发明实施例作进一步说明,其中图1为根据本发明实施例的本地日志和分布式日志示意图。
具体实施例方式为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。申请日为2012年5月22日,公布日为2012年10月24日、名称为“一种机群文件系统分布式元数据一致性保证方法和系统”的专利申请201210159837. 8公布了一种机群文件系统分布式元数据一致性保证方法(即双向冗余分布式日志方法),该申请通过引用被全部包含于此。图1给出了根据本发明实施例的本地日志和分布式日志示意图。本地文件系统通常采用本地写前日志WAL (Write Ahead Log)技术保证本地元数据操作的一致性,如Ext3、XFS等本地文件系统。WAL技术首先将本地元数据更新记录按照追加写的方式提交到本地日志中,如果系统异常宕机,则可以根据本地日志中保存的元数据更新记录重新完成元数据更新。本地元数据更新记录是按照事务方式提交到本地日志中的,保证了元数据操作的原子性,因此称为本地事务。本地日志一般具有固定大小,循环使用,本地日志在特定时间将已经提交的本地事务同步到元数据磁盘,从而释放本地日志的空间,以备其他本地事务提交。同时,本地日志还提供本地事务提交的回调函数接口,通过该回调函数接口可知本地事务已经持久记录在本地日志中了。例如,本地日志在将本地事务写到磁盘后,会调用该接口,这样外部就可以很快知道相应的本地事务已经持久记录。在本发明的实施例中,采用了本地日志和分布式日志结合的方法来对分布式元数据子操作更新记录进行管理。分布式日志也具有固定大小,同样可以循环使用。分布式元数据子操作更新记录包括分布式事务和/或分布式元数据更新两个部分。其中,所述分布式事务包括关于分布式元数据子操作的状态信息,例如可以包括分布式元数据子操作编号(也可以称为分布式事务号)、分布式元数据子操作执行阶段(也可以称为分布式事务状态)、分布式元数据子操作的类型(也可以简称为操作类型)、操作参数等状态信息,分布式事务将被保存在分布式日志中,用于在异常宕机情况下对分布式操作一致性进行恢复。所述分布式元数据更新包括分布式元数据子操作对文件系统元数据的更新,即对元数据磁盘内容进行修改,可以将分布式元数据更新按照与本地元数据操作一样的方式被记录在本地日志中。在该实施例中,为保证分布式元数据更新与分布式事务在本地的原子性,将分布式元数据更新与分布式事务统一作为一个本地事务以WAL方式统一预先记录在本地日志中,由本地日志来保证二者的原子性。如图1所示分布式事务和相应的分布式元数据更新被记录在一个本地日志事务中,当该本地日志事务被持久提交之后,其中的分布式事务被持久地记录在分布式日志文件中,而相应的分布式元数据更新被写入到元数据磁盘。由于该分布式事务和相应的分布式元数据更新是在同一本地日志事务中,所以,分布式元数据更新与分布式事务在需要修改时将会被一块儿修改或者如果写磁盘的时候出错本地日志将能保证分布式元数据更新与分布式事务都不会被写,产生二者要么都做要么都不做的效果,不会出现不一致的状态。也就是说以本地日志事务的方式来保证对分布式事务的修改以及相应的分布式元数据更新修改的原子性,以确保将对分布式事务的修改同步到分布式日志中(例如,将新的分布式事务写入到分布式日志中,或者对分布式日志中现有的分布式事务进行修改),同时将相应的分布式元数据更新同步到元数据磁盘(例如,将新的元数据写入到元数据磁盘中,或者对元数据磁盘中现有的元数据进行修改)。而且,通过以本地日志的方式来管理分布式事务和分布式元数据更新减少了同步等待开销,也就是不需要同步等待元数据和/或分布式事务记录写到磁盘上。因为本地日志的实现本身就是异步的方式,无需等待磁盘写。由于本地日志记录的是磁盘块的位置(比如磁盘中唯一标识的块号)和修改后的数据块的内容,然后以块为单位对磁盘中相应的块进行整体写/替换,所以上述的本地事务只要记录需要更新的元数据块和需要更新的分布式日志的数据块就可以了,也就是说本地日志对所有的块都是一视同仁,它不区分是属于哪个文件。因此,只需要在执行具体操作时指定要写入的文件即可。对于每个具体文件,在其元数据部分会记录哪些数据块是属于这个文件的,所以在读取这个文件时读相应的数据块就能读到想要的数据。可见,在本发明的实施例中,无需修改本地日志的结构和操作,而是在本地日志的基础上增加了分布式日志文件,并且将对分布式事务的更新也纳入本地日志管理的范围。对于分布式元数据操作,将其对分布式日志和分布式事务的任何状态更新与相应的分布式元数据更新作为一个本地事务提交到本地日志中,之后才真正分别把分布式元数据更新写入元数据磁盘,把分布式事务更新写入到分布式日志中。更具体地,如图1中所示的分布式日志组织方式,所述分布式日志包含如下内容:超级块、最久偏移、当前偏移、分布式事务记录。其中所述超级块为分布式日志的第O块,记录分布式日志的总体状态和信息,如表I所示,超级块包含如下状态信息:分布式日志异常下线标志(S_flag);分布式日志大小(s_max),以块为单位;下一个可用的分布式事务号(s_sequence);最久尚未清除的分布式事务号(s_last_sequence),表示小于s_last_sequence的分布式事务都已经提交并被清除了 ;最久尚未清除的分布式事务的最久偏移位置(s_last_offset);下一个可用的分布式事务的当前偏移位置(s_transaction_offset);其中,s_last_offset与s_transaction_offset之间的区域为存放分布式事务记录,之外的区域为空闲可用。其中,在协调者端的分布式事务记录例如可包括协调者端的分布式事务号、分布式事务状态等状态信息,还可以记录参与者端的冗余操作信息,例如可包括参与者地址、参与者端的分布式事务号、参与者操作类型、操作参数、操作的对象属性等等。同样,在参与者端的分布式事务中除了包括参与者端的分布式事务号、分布式事务状态等状态信息之外,还可以记录协调者端的冗余操作信息,例如可包括协调者地址、协调者端的分布式事务号、协调者操作类型、操作参数、操作的对象属性等等。在异常宕机情况下可以利用在分布式日志中记录的分布式事务对分布式操作一致性进行恢复。当然,如果在协调者和参与者两端的分布式元数据操作过程中都没有出现服务器异常宕机,则分布式事务被分布式日志直接清除即可。表I
权利要求
1.一种结合本地日志的机群文件系统分布式元数据操作一致性保证方法,所述方法包括: 步骤1,协调者和参与者将为分布式元数据子操作生成的分布式元数据子操作更新记录作为一个本地事务记录在本地日志中,所述分布式元数据子操作更新记录包括分布式事务和/或分布式元数据更新,在本地事务提交之后,所述分布式事务被写入到分布式日志中,所述分布式元数据更新被写入到元数据磁盘; 其中,所述分布式元数据更新包括分布式元数据子操作对文件系统元数据的更新,所述分布式事务包括关于分布式元数据子操作的状态信息; 步骤2,协调者和参与者根据所述分布式日志来对机群文件系统元数据操作的一致性进行恢复。
2.根据权利要求1所述的方法,其中,所述步骤I还包括在开始分布式元数据子操作之前对本地日志事务进行强制提交的步骤。
3.根据权利要求1所述的方法,其中,所述步骤I包括: 步骤11)协调者预先检查第一子操作能否在协调者端执行,所述第一子操作为协调者端要完成的分布式元数据子操作; 步骤12)如果协调者能够执行第一子操作,则为该第一子操作生成分布式事务,为该分布式事务分配分布式日志空间并将该分布式事务作为一个本地事务记录在本地日志中,该分布式事务包括分布式事务号,分布式事务状态、参与者地址、参与者操作类型、操作参数;其中,将分布式事务状态设为PREPARE ; 步骤13)协调者向参与者发送请求消息,请求参与者执行第二子操作,该请求消息中包含该协调者端的分布式事务号、分布式事务状态以及参与者地址、参与者操作类型、操作参数;所述第二子操作为参与者要完成的分布式元数据子操作; 步骤14)参与者收到来自协调者的请求消息后,检查能否执行第二子操作;如果不能执行第二子操作,则直接向协调者返回失败原因; 步骤15)如果检查到参与者端能够执行第二子操作,则为该第二子操作生成分布式元数据更新和分布式事务,并将该分布式元数据更新和分布式事务作为一个本地事务记录在本地日志中,该分布式事务包括分布式事务号,分布式事务状态、协调者地址、协调者分布式事务号、协调者操作类型、操作参数;并且参与者向协调者返回执行成功响应,并将参与者端的分布式事务号捎带返回给协调者; 步骤16)当协调者收到来自参与者的执行成功响应后,执行第一子操作,为第一子操作生成分布式元数据更新,以及将所述响应中包含的参与者端的分布式事务信息作为第一子操作的分布式事务的一部分,并将其与该分布式元数据更新作为一个本地事务记录在本地日志中。
4.根据权利要求3所述的方法,在所述步骤11)中还包括如果协调者预先检查第一子操作能在协调者端执行,则首先对协调者端本地日志中未提交的本地事务进行强制提交;以及在所述步骤14)中还包括如果参与者检查能执行第二子操作,则首先参与者端对本地日志中未提交的本地事务进行强制提交。
5.根据权利要求3所述的方法,所述步骤15)和步骤16)中分别还包括下列步骤: 注册本地事务的提交回调函数,以备本地事务在持久提交到本地日志后,触发分布式事务提交步骤;所述分布式事务提交步骤包括: 当分布式事务在本地日志中提交后,设置分布式事务状态为COMMIT ; 向另外一端发送分布式事务已经持久提交的确认消息; 另外一端收到该确认消息后,设置本地对应的分布式事务的状态为RECEIVE。
6.根据权利要求3或5所述的方法,在所述步骤16)中,如果协调者端收到自参与者返回的执行失败的响应,协调者将分布式事务状态设置为FINISH,表示该分布式事务已结束。
7.根据权利要求6所述的方法,还包括分布式事务清除的步骤,其包括:修改分布式日志信息,以释放要清除的分布式事务在分布式日志中所占的空间,其中将对分布式日志信息的修改作为一个本地事务记录到本地日志中,待本地事务持久提交后,对分布式日志信息的修改被同步到分布式日志中; 所述要清除的分布式事务为状态为COMMIT和RECEIVE的分布式事务和状态为FINISH的分布式事务。
8.根据权利要求7所述的方法,所述步骤2包括: 步骤21)当服务器异常宕机后,使用本地日志中记录恢复本地的元数据磁盘和分布式曰志; 步骤22)从分布式日志文件中读取需要恢复的分布式事务,并根据分布式事务所处的不同状态针对每个分布式事务逐个进行恢复; 步骤23)向其他元数据服务器发送协助恢复请求,以通知其他元数据服务器进行与该宕机服务器相关的分布 式事务恢复。
9.根据权利要求8所述的方法,所述步骤22)中对每个分布式事务进行逐个恢复包括: 步骤221)针对每个需要恢复的分布式事务,向分布式事务的另一端发送恢复重做请求,请求中包含该分布式事务编号、事务状态,如果分布式事务处于COMMIT状态,还包含另外一端的分布式事务编号、状态、操作、参数、对象属性; 步骤222)另外一端接收到重做请求后,根据该恢复请求发起端的分布式事务状态、以及在本端的本地分布式日志中查找到的对应的分布式事务状态,进行分布式事务恢复操作。
10.根据权利要求9所述的方法,所述步骤222)包括: 如果恢复请求的发起端分布式事务状态为PREPARE,恢复请求的接收端分布式事务状态为COMMIT,则接收端将本地分布式日志中记录的发起端的分布式事务信息返回给接收端,接收端根据这些信息重新完成本端的分布式元数据子操作; 如果恢复请求的发起端分布式事务状态为PREPARE,恢复请求的接收端没有找到对应的分布式事务,则接收端返回分布式事务已丢失的消息,发起端收到该消息后撤消该状态为PREPARE的分布式事务; 如果恢复请求的发起端分布式事务状态为COMMIT,恢复请求的接收端分布式事务状态为COMMIT,则这两端都向另外一端发送分布式事务已经持久提交的确认消息,并且在收到该确认消息后,设置本地对应的分布式事务的状态为RECEIVE,并执行分布式事务清除的步骤; 如果恢复请求的发起端分布式事务状态为COMMIT,恢复请求的接收端没有找到对应的分布式事务,则接收端根据该恢复请求中的操作类型、操作参数、对象属性,进行重做本端分布式兀数据子操作; 如果恢复请求的发起端分布式事务状态为COMMIT,恢复请求的接收端分布式事务已经提交并被清除,则接收端向发起端返回已经持久提交的确认消息,发起端收到该消息后,将分布式事务状态设为RECEIVE,并执行分布式事务清除步骤。
11.根据权利要求8所述的方法,所述步骤23)还包括: 其他元数据服务器收到宕机服务器发送的协助恢复请求后,查找涉及该宕机服务器的未完成的分布式事务,以逐项进行恢复; 如果未完成的分布式事务状态为PREPARE,并且处于正在允许状态,则向宕机服务器发送正常执行分布式元数据子操作的请求; 如果未完成的分布式事务状态为COMMIT,则根据分布式事务中记录的宕机服务器端的分布式事务编号、分布式事务状态、操作类型、操作参数,向宕机服务器发送重做恢复请求,宕机服务器收到该重做恢复请求后,重做分布式元数据子操作以进行恢复。
12.根据权利要求11所述的方法,其中,宕机服务器重做分布式元数据子操作包括: 为重做的分布式元数据子操作生成分布式元数据子操作更新记录,并作为一个本地事务记录在本地日志中,所述分布式元数据子操作更新记录包括为该重做的分布式元数据子操作生成的分布式事务和分布式元数据更新。
13.根据权利要求12所述的方法,其中,对在恢复过程中产生的分布式事务执行分布式事务清除的步骤。
14.一种结合本地日志的机群文件系统分布式元数据操作一致性保证系统,所述系统包括协调者和参与者,其中 所述协调者和参与者被配置为:将为分布式元数据子操作生成的分布式元数据子操作更新记录作为一个本地事务记录在本地日志中,所述分布式元数据子操作更新记录包括分布式事务和/或分布式元数据更新,在本地事务提交之后,所述分布式事务被写入到分布式日志中,所述分布式元数据更新被写入到元数据磁盘; 其中,所述分布式元数据更新包括分布式元数据子操作对文件系统元数据的更新,所述分布式事务包括关于分布式元数据子操作的状态信息; 所述协调者和参与者还被配置为根据分布式日志来对机群文件系统元数据操作的一致性进行恢复。
15.根据权利要求14所述的系统,其中,所述协调者和参与者还被配置为:在开始分布式元数据子操作之前对本地日志事务进行强制提交。
16.根据权利要求14所述的系统,其中,所述协调者被配置为: 预先检查第一子操作能否在协调者端执行,所述第一子操作为协调者端要完成的分布式元数据子操作; 如果能够执行第一子操作,则为该第一子操作生成分布式事务,为该分布式事务分配分布式日志空间并将该分布式事务作为一`个本地事务记录在本地日志中,该分布式事务包括分布式事务号,分布式事务状态、参与者地址、参与者操作类型、操作参数;其中,将分布式事务状态设为PREPARE ; 向参与者发送请求消息,请求参与者执行第二子操作,该请求消息中包含该协调者端的分布式事务号、分布式事务状态以及参与者地址、参与者操作类型、操作参数;所述第二子操作为参与者要完成的分布式元数据子操作; 当收到来自参与者的执行成功响应后,执行第一子操作,为第一子操作生成分布式元数据更新,以及将所述响应中包含的参与者端的分布式事务信息作为第一子操作的分布式事务的一部分,并将其与该分布式元数据更新作为一个本地事务记录在本地日志中。
17.根据权利要求16所述的系统,其中,所述参与者被配置为: 当收到来自协调者的请求消息后,检查能否执行第二子操作;如果不能执行第二子操作,则直接向协调者返回失败原因; 如果检查到能够执行第二子操作,则为该第二子操作生成分布式元数据更新和分布式事务,并将该分布式元数据更新和分布式事务作为一个本地事务记录在本地日志中,该分布式事务包括分布式事务号,分布式事务状态、协调者地址、协调者分布式事务号、协调者操作类型、操作参数;并且向协调者返回执行成功响应,并将参与者端的分布式事务号捎带返回给协调者。
18.根据权利要求16所述的 系统,所述协调者还被配置为: 如果协调者预先检查第一子操作能在协调者端执行,则首先对协调者端本地日志中未提交的本地事务进行强制提交。
19.根据权利要求17所述的系统,所述参与者还被配置为: 如果参与者检查能执行第二子操作,则首先参与者端对本地日志中未提交的本地事务进行强制提交。
全文摘要
本发明提供一种结合本地日志的机群文件系统分布式元数据操作一致性保证方法。其中,协调者和参与者将为分布式元数据子操作生成的分布式元数据子操作更新记录作为一个本地事务记录在本地日志中,所述分布式元数据子操作更新记录包括分布式事务和/或分布式元数据更新,在本地事务提交之后,所述分布式事务被写入到分布式日志中,所述分布式元数据更新被写入到元数据磁盘。该方法还包括在开始分布式元数据子操作之前对本地日志事务进行强制提交的步骤。该方法有效地复用了本地日志,降低了分布式日志的实现复杂度,此外,还能够避免出现级联撤销。
文档编号G06F17/30GK103077222SQ20121059106
公开日2013年5月1日 申请日期2012年12月31日 优先权日2012年12月31日
发明者郑彩平, 邵冰清, 张军伟, 刘振军, 王利虎, 张 浩 申请人:中国科学院计算技术研究所, 天津中科蓝鲸信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1