用于在多节点环境中实施日志处理的系统和方法

文档序号:6432028阅读:107来源:国知局
专利名称:用于在多节点环境中实施日志处理的系统和方法
技术领域
本发明一般地涉及计算机系统。特别地,本发明涉及那些诸如共享存储器这类资源的计算机系统。
背景技术
服务器通常用于例如那些与大型万维网服务和制造相结合的大型应用程序和工作负荷。通常,一个单独的服务器没有足够能力来执行必要的应用。为了适应这些大型应用,几台服务器可以与存储区网络(SAN)中的若干共享存储设备一起使用。此外还将服务器集合在了一起,由此实现了更好的可用性和易管理性,这样做也是很有价值的。
随着系统变大,以高性能和高效行为来协调针对共享数据结构的多个组件更新将变得更加困难。当硬件只能在单块更新的级别上提供原子性时,对遍布在多个数据块上的数据结构的原子更新进行综合处理将会是非常有益的。由于系统有可能发生故障,因此产生了对于原子更新的需要,此外,寻找和修复部分完成的更新所引入的不一致性有可能是成本很高并且无法实现的。一种协调更新的方法是通过使用一个日志。所述日志提供了一种将更新原子化并使之持久的机制。
目前需要一种用于在多节点环境中管理日志的系统和方法,其可以综合处理对遍布在多个数据块上的数据结构所进行的原子更新。本发明旨则在处理这种需要。
附图简述通过以下结合附图所进行的详细说明,可以很容易地理解本发明,在这些附图中,相同的参考数字标明的是相同的结构成分,并且其中

图1是适合有助于本发明实施例的共享存储系统的框图。
图2A~2C是依照本发明实施例的日志条目的实例。
图3A~3B是根据本发明实施例而在日志中创建一个事务的实例的流程图。
图4是用于依照本发明一个实施例来进行锁定和日志管理的方法的状态图。
图5A~5B显示的是根据本发明一个实施例而在多节点环境中进行的日志处理(journaling)方法的实例。
图6A~6C显示的是根据本发明一个实施例而在多节点环境中进行的日志处理方法的另一个实例。
图7A~7B显示的是根据本发明一个实施例而由驱动第二节点中的任务的第一节点来进行锁定状态改变的另一个实例。
图8A~8B显示的是根据本发明一个实施例而由驱动第二节点中的任务的第一节点来进行锁定状态改变的另外的实例。
详细说明应该理解,本发明可以借助于多种方式来实现,其中包括将其作为一种方法、一种设备、一种系统或是一种计算机可读介质,例如计算机可读存储介质或是经由光学或电子通信链路发送程序指令的计算机网络。应该指出的是,在本发明范围以内可以改变所公开的方法步骤的顺序。
在下文中,关于本发明一个或多个优选实施例的详细描述是与那些借助实例来描述本发明原理的附图一起提供的。虽然本发明是结合这些实施例而被描述的,但是应该理解,本发明并不局限于任何实施例。与此相反,本发明的范围只受限于权利要求并且包含了众多的替换、修改和等价物。出于例证目的,在以下描述中阐述了很多特定细节,以便提供关于本发明的全面理解。而本发明可以依照权利要求而在没有某些或全部这些特定细节的情况下得到实施。为了清楚起见,在这里并未对与本发明有关的技术领域中已知的技术资料进行详细描述,以免不必要地导致本发明不清楚。
本发明的一个实施例是将日志管理与用于控制多节点访问数据的锁定管理相结合。
图1是一个适合有助于本发明实施例的共享存储系统的框图。在这个实例中,节点102A~102D通过一个网络转接100耦合在一起的。所述网络转接100可以代表任何网络架构,例如以太网、InfiniBand(无限带宽)网络或是能够执行主机到主机的通信的光纤信道网络。此外,在这里将节点102A~102D显示成与一个存储数据互连104相耦合。所述数据存储互连104的一个实例可以是光纤信道交换机,例如Brocade 3200光纤信道交换机。作为选择,数据存储网络也可以是一个iSCSI或其他IP存储网络、InfiniBand网络或是另一种主机-存储器网络。此外,网络转接100和数据存储器互连104可以在一个单独的互连中实现。节点102A~102D的实例包括而不局限于计算机、服务器以及可以共享存储器或数据的其他任何处理单元或应用。出于示范目的,有时也将节点102A~102D称为服务器。而数据互连104则显示成与共享存储器106A~106D相耦合。共享存储器106A~106D的实例则包括任何形式的存储器,例如硬盘、光盘、磁带和随机存取存储器。
共享存储器可以是任何一种存储设备,例如硬盘、光盘、磁带和随机存取存储器。文件系统是在共享存储器上构造的一个逻辑实体。尽管通常是将共享存储器视为一个物理设备,而将文件系统视为是覆盖在所述存储器一部分之上的逻辑结构,但是简单起见,在这里有时也将文件系统称为共享存储器。例如,在叙述共享存储器出现故障的时候,所述故障有可能是文件系统中的一部分的故障,也可以是一个或多个文件系统的故障,还可能是文件系统所覆盖的物理存储设备的故障。因此,这里使用的共享存储器可以是指物理存储设备、文件系统的一部分、一个文件系统、多个文件系统或是上述这些成分的组合。
图2A~2C是依照本发明一个实施例的日志条目的实例。在这里使用了一种日志处理机制,即使是在更新会影响到多个块并且硬件不能以原子方式更新多个块的情况下,所述机制也允许多个独立处理节点以原子方式来更新一个公共数据结构集。而日志则以一种在系统故障之后易于定位的方式来记录那些与可能影响到多个块的更新有关的信息。用于创建一组优选以原子形式发生的这类更新的行为称为一个事务。在日志中,每一个事务都是用一个日志条目来记录的。日志条目包含了一组写入日志的块;这些块包含了将要作为更新的一部分而被写入的块值拷贝,以及规定了这些新值所要写入的位置的信息。对所述更新来说,有时也将这些位置称为最终位置,从而将其与处在日志条目本身的块值拷贝加以区分。
日志是通过以原子方式写入单个的块来完成一个日志条目,由此确定了在共享存储器中执行一个多块更新的意图。这种处理称为使日志条目有效。在日志条目有效之前,不会有块值在其最终位置中得到更新;一旦日志条目有效,则可以根据需要而在块值的最终位置更新所述块值。因此,如果在使日志条目有效之前发生一个故障,则系统可以恢复一个状态,其中不包括与所述日志条目相对应的已恢复事务中的更新部分;在执行了完成一个日志条目的写入并且所述日志条目有效之后,则可以恢复这个包括事务更新的所有部分的状态。换句话说,即使将更新部分地写入了日志条目,但是如果产生日志条目的节点在条目有效之前出现故障,则不会进行任何更新。在条目有效之后,即使出现故障,最终也会完成所述有效更新。因此,如果所有多块更新都是以原子方式进行的,那么,通过在出现故障之后检查日志,可以将数据结构恢复到一种已有的状态。
在将一个特定日志条目的所有新值全都写入其最终位置之后,可以将所述日志条目标记为终止。终止的日志条目没有必要得到保持,因为它所记录的全部更新都已得到执行;它所占据的空间也可以重新用于其他用途。
在图2A显示的实例中,在时间1,节点3将信息保持在其本地存储器中,此外还准备将块B更新成3,000并将块C更新成1,500。在这个简化实例中,其中将每一个块都假设成只保存一个整数并且使用字母来命名这些块。举例来说,块B和C可以表示两个独立的银行帐户,其中用户将钱从银行帐户B转移到银行帐户C。节点3具有所述信息但却仍未将所述信息记录在日志中。
节点1将块X设定为750并且将块Y设定成1250,此外记录这个事务的日志已经是有效的。节点7将块Q设定为50。需要指出的是,节点7正处于写入事务的中间并且所述日志条目仍未有效。而节点4则将信息保留在存储器中并且希望将块A更新为500。
在时间1(图2A)与时间2(图2B)之间,节点4希望在同一事务的一部分将块A更新成500的时候更新块B。而块B则是来自节点3的仍未有效的事务的一部分(如图2A所示)。因此,节点4要求节点3使所述事务有效,以使节点4能够更新块B。在图2B所示的时间2,节点3完成一个日志条目的写入,其中所述条目记录的是将块B设定成3000并将块C设定为1500的更新,而这个事务现在将是有效的。此外,节点3还完成了关于先前事务的日志条目写入,其中所述事务将块C设定成1000并将块D设定成250。由于节点7仍未结束写下其事务,因此节点7的日志条目仍未有效。节点4的日志条目则仍旧是空的。
在时间2(图2B)与时间3(图2C)之间,由于节点3结束了相对于块B的事务,因此节点4可以写入一个用于所述事务的日志条目。应该注意的是,依照本发明的一个实施例,有效日志条目不必是连续的。在时间3,节点3、1和4已经写入了有效事务,而节点7的事务则仍旧保持无效。
图3A~3B是依照本发明实施例而在日志中创建事务的实例的流程图。在这个实例中,为了创建一个事务数据结构,节点将会确定是否存在需要更新的块(300)。如果存在应该更新的块,则获取所述块以及关于所述块的新值(302)。然后则判定这个块是否包含在一个关于一个或多个其他节点的仍未有效的事务中(304)。这个实例是结合图2而在节点4需要更新块B但却判定节点3正在计划更新块B的时候描述的。
如果这个块包含在一个关于另一个节点的仍未有效的事务中,则迫使所述另一个节点开始令其事务有效(306)。在图2给出的实例中,举例来说,节点4通过为关于节点3的事务产生一个更高优先级来令节点3继续进行其事务。
然后,执行图3A~3B所示方法的这个节点将会等待所述事务变得有效(308)。
如果这个块不包含在关于其他节点的仍未有效的事务中(304),则确定是否存在更多将要更新的块。如果没有将要更新的块(300),则通过调度针对所述日志的更新来记录这个事务(320)。然后则判定是否存在一个来自另一种模式的使所述事务有效的请求(322)。如果没有这种来自另一个节点的请求,那么这个节点可以“缓慢地”写入日志更新(324)。换句话说,所述日志更新具有一个很低的优先级,因此可以在便利的时候更新所述日志。没有立即写入日志更新的优点是可以在节点之间存在很高事务负载的时候减少日志中的瓶颈。
如果存在来自另一个节点并使所述事务有效的请求(322),则立即写入所述日志条目(326)。举例来说,所述日志条目将会在优先级上有提升。由此则将更新写入最终位置(328)。然后则把写入的日志条目标记为有效(330)。
图2和3描述了如何依照本发明的一个实施例来使用日志处理,以便在多节点环境中允许以原子方式来执行多个块更新。图4~8则描述了如何依照本发明的一个实施例来有效使用锁定机制控制何时向日志中写入条目,从而对来自多个节点的日志访问进行协调并且在节点之间共享日志处理数据。
图4是依照本发明一个实施例的锁定和日志管理方法的状态图。在这个实例中显示了三种锁定模式独占模式(400)、共享模式(404)和不保持模式(408)。为了简化起见,图4所示实例只显示了除了不保持模式之外的两种模式,其中独占模式是由写入模式400来例证的,而共享模式则是由读取模式(404)来例证的。然而,本发明也适应于多种模式。这些模式是那些节点通过对一个块加以锁定来对数据进行访问的模式,其中所述数据访问包括读取一个块或是写入一个快。在这个实例中,几个节点可以在保持锁定在共享/读取模式的同时读取同一个块,而为了写入一个块,只有一个节点可以获得在写入/独占模式锁定。
在这个实例中,当节点从具有独占锁定400迁移至共享锁定404的时候,将会对一个降级例程402进行调用。而在节点从保持一个共享锁定404移至不保持一个锁定408的时候则调用一个解锁例程406。此外,在节点从保持一个独占锁定400移至不保持锁定408的时候,那么不但调用降级例程402’,而且还会调用解锁例程406’。
在节点从不保持一个锁定408迁移到保持一个共享锁定404的时候,将会对一个捕获例程414进行调用。同样,在节点从不保持锁定迁移到保持独占锁定400的时候,则会调用一个捕获例程414′。举例来说,如下所述,捕获例程414~414′可用于完成读取一个块的处理。在希望读取一个块时,将会产生一个关于覆盖了所述块的读取(共享)锁定的请求。在稍后的点上,当锁定请求得到许可的时候将会调用捕获例程。然后,捕获例程可以继续读取所述块。相似的处理同样适用于写入一个块其中产生了一个关于写入(独占)锁定的请求;随后在所述锁定得到许可的时候将会调用捕获例程并且由此可以写入所述块。
解锁例程406~406′的一个实例是保持高速缓存相关性。当节点在存储器中高速缓存了一个由读取或写入锁定所覆盖的块并且另一个节点希望更新所述块时,在第一节点上将会撤消所述锁定。这将导致调用解锁例程406~406′;这个例程可以从存储器中清除所述块的高速缓存的拷贝。
在图4所示的实例中,降级例程402~402′可能导致节点将经过更新的块写入共享存储器中,使之保持的锁定不再是独占的。解锁例程406~406′可以从这个节点中放弃锁定。在无论何时,只要需要独占性的等级,那么捕获例程414-414′就可以获得锁定。
因此,在本发明的这个实施例中,锁定状态中的变化可用于将请求从一个节点传递到另一个节点,以便执行那些作为降级/解锁/捕获例程一部分的多种任务。
图5A~5B显示的是依照本发明一个实施例而在多节点环境中进行的日志处理方法。这个实例显示了两个节点之间的交互作用,其中节点A请求改变锁定状态,而这将在节点B中触发一个响应。
为了读取一个特定的块,节点A会在共享/读取锁定模式中尝试获取一个锁定。节点A请求对一个对所述块进行的读取锁定(500),并且等待向其许可所述锁定(502),此外还从盘中读取所述块(504)。如果节点A尝试写入一个块,那么它请求对所述块执行一个写入锁定而不是读取锁定,并且等待所述锁定得到许可,此外还从盘中读取所述块。
当节点A请求一个针对所述块的读取锁定时(图5A的500),所述请求会在节点B中引发一个副作用。在这里使用了副作用来表示一个与正在发生的某些其他事件相关联的预定操作——也就是与第一事件相关联的一个事件或任务。在这个实例中,假设节点B在节点A请求的块上保持一个独占模式锁定,那么节点A发出的读取锁定请求会在节点B中启动一个降级例程。节点B则通过写入日志条目来使这个块的事务以及所有相关事务有效(510)。相关事务包括了这样一些事务,这些事务处在对A所请求的块加以更新的事务之前,其中包含了对也由所述事务所更新的块执行的更新。如果P是在Q之前执行的并且P和Q共同更新了至少一个块,则它是关于事务集的联系的传递闭包,其中事务P与事务Q是相关的。也就是说,在这里需要遵循这样一个规则,其中在任何还未有效的先前事务中都没有包含那些在有效事务中出现的块。“相关事务”则是那些必须依照这个规则而变得有效,从而保持与这个规则相一致的事务。举例来说,在图2中,节点3更新块C和D的事务就是一个相关事务。
如果还未将块写入盘,那么,倘若有必要,则节点B会将新值写入所述块中(512)。何时有必要将新值写入所述块的一个实例是在假设节点B相对所述块保持一个写入锁定并且所述块在最后一次写入盘之后已经发生了变化的情况下。在这里有必要将发生变化的值写入所述块,以使下一节点能够访问该块的更新版本。举例来说,在图2B中,如果节点3没有将值3000写入块B,那么,鉴于节点4请求访问块B,节点3会把值3000写入块B。
节点B也可以在事务中将新值其他块(514)。例如在图2B中,节点3可以选择在这个时间将值1500写入块C。然后,节点B将会释放相对于所述块的锁定(516)。
图6A~6C显示的是依照本发明实施例而在多节点环境中执行的日志处理方法的另一个实例。在这个实例中,节点A在锁定状态上做出的改变将会在节点B上产生一个副作用任务,其中事务终止是通过耗尽日志空间来引发的。
图6A显示了一个循环构造的日志,在这个日志中,新条目在一个方向上增长并且将在尾部终止和删除旧的条目。当节点A需要写入一个新条目时,它必须在日志顶部分配空间,但是如果顶部延伸到尾部,则没有空间可以使用。这时,所述节点必须要求一个或多个节点终止日志尾部的事务。这个处理可以借助于一个降级例程来实现。
在这个实例中,节点A请求对处于日志顶部在日志空间加以锁定(图6B的600)。之后,所述节点等待所述锁定请求得到满足(602),接着则使用所述日志空间(604)。当节点A请求锁定日志空间时(图6B的600),所述请求在节点B上启动一个降级例程,其中节点B是一个在尾部写入日志条目并保持一个或多个覆盖了日志这一部分的锁定的节点。节点B会确保将处于尾部的日志条目中的所有块都写入其最终位置(图6C中的610)。然后所述事务标记为终止(612)。由此释放关于所述事务日志空间的锁定(614)。
图7A~7B显示了依照本发明实施例并通过第一节点驱动第二节点中的任务来改变锁定状态的另一个实例。在这个实例中,节点A和B使用了协作高速缓存技术,例如_________提交的名为“System andMethod for Collaborative Caching in a Multinode Filesystem”的美国专利申请________(律师案卷号为POLYP003)中公开的系统和方法,所述申请在此引入以便用于多种用途。
在这个实例中,节点A通过请求对一个块实施读取锁定来读取所述块(700)。然后它会等待锁定得到许可(702)并且确定锁定授予者是否发送了被请求的块数据(704)。如果锁定授予者发送了数据块,那么节点A会将所发送的块数据接受到其高速缓存中(706)。然而如果锁定授予者没有发送块数据(704),则节点A将从共享盘中读取所述块(708)。
由节点A做出的对所述块进行读取锁定的请求(图7A的700)会在锁定被请求块的节点B上引发一个副作用。在这个实例中,所述副作用是一个降级。与图5B一样,这个降级将会导致节点B写入日志条目,以使这个块的事务以及所有相关事务有效(720)。如果需要,还会将一个新值写入共享盘(722)。何时需要写入新值的一个实例是假设节点B保持相对于所述块的写入锁定并且节点B在最后一次写入之后改变了数据。然后,节点B可选地在事务中将新值写入其他块(724)。在当前时间,这个操作是可选的,这是因为一旦日志条目有效并且完整,则无论节点是否方便写入,都可以将所述值写入最终位置。
然后判定这个块数据是否仍然保留在节点B的高速缓存中(726)。如果还处于缓存中,则将块数据从节点B发送到发出请求的节点A(728)。然后,无论被请求的块数据是否处在高速缓存中(726),节点B都会释放相对于所述块的锁定(730)。
图8A~8B显示了依照本发明一个实施例并由第一节点驱动第二节点中的任务来改变锁定状态的另外的实例。在这个实例中,节点A和B都包含在了用于协作高速缓存的事务转发中。
节点A通过请求对一个块进行读取锁定来尝试读取这个块(800)。然后,所述节点等待锁定得到许可(802)并确定锁定授予者是否发送了所述块和事务数据(804)。如果锁定授予者没有发送所述块和事务数据,则节点A从共享盘中读取该块(806)。如果锁定授予者发送了所述块和事务数据(804),则将事务添加到这个节点(节点A)的未完成事务列表中(808)。然后,节点A将块数据接受到其高速缓存中(810)。
当节点A请求读取锁定的时候(图8A的800),它会启动一个用于节点B的降级例程,在这个例程中将会确定是否被请求的数据处于节点B的高速缓存中(820)。如果不在高速缓存中,则节点B写入日志条目,以使这个块的事务和所有相关事务有效(822)。作为选择,节点B也可以将新值写入事务中的其他块(826)。这与图5B是一样的。
如果被请求的块数据处于节点B的缓存中(820),那么如上所述,节点B预备一个事务日志条目列表,其修改了被请求的块以及所有相关事务(824)。这个事务列表与步骤822中成为有效的列表是同一列表。然后,关于上述事务列表的日志条目内容以及块数据都发送至发出请求的节点(828)。
尽管出于清楚理解的目的而对前述发明进行了描述,但是很明显,在权利要求的范围以内可以进行某些修改和变化。应该指出的是,存在多种备选方法来实施本发明的方法和设备。因此,本实施例将被视为是说明性的而不是限制性的,并且本发明并不局限于这里给出的细节,而是可以在权利要求的范围和等价物以内得到修改。
权利要求
1.一种用于在计算机环境中进行日志处理的方法,包括提供一个第一节点和一个第二节点;提供一个日志,其中所述日志可以由第一节点和第二节点来进行访问;第一节点请求改变锁定状态;以及响应于第一节点对于改变锁定状态的请求,由第二节点来执行一个任务。
2.权利要求1的方法,其中所述任务与日志处理相关联。
3.权利要求1的方法,其中请求改变锁定状态是请求一个锁定。
4.权利要求3的方法,其中所述任务是写入日志条目,以使一个事务有效。
5.权利要求3的方法,其中所述任务是写入日志条目并且将块数据发送到第一节点。
6.权利要求3的方法,其中所述是预备一个日志条目列表并且将关于所述列表的事务数据发送到第一节点。
7.权利要求1的方法,其中请求改变锁定状态是请求对日志中的空间进行锁定。
8.权利要求7的方法,其中所述任务是释放对于事务日志空间的锁定。
9.权利要求7的方法,其中所述任务是在事务中将一个块写入盘中并且将所述事务标记为终止。
10.一种用于在计算机环境中进行日志处理的系统,包括一个配置成请求改变锁定状态的第一节点;一个配置成响应于第一节点对于改变锁定状态的请求来执行一个任务的第二节点;以及一个日志,其中所述日志可以由第一节点和第二节点访问。
11.一种用于在计算机环境中进行日志处理的计算机程序产品,所述计算机程序产品包含在一个计算机可读介质中并且包含了用于执行以下操作的计算机指令第一节点请求改变锁定状态;响应于第一节点对于改变锁定状态的请求,由第二节点来执行一个任务;以及第一节点访问一个日志。
12.一种用于在计算机环境中进行日志处理的方法,包括调度一个更新来记录一个事务;接收一个使所述事务有效的请求;以及将这个事务记录在一个日志中。
13.权利要求12的方法,其中记录事务是响应于接收使所述事务有效的请求而出现的。
全文摘要
在这里公开了一种用于在计算机环境中提供日志处理的系统和方法。本发明的一个实施例包括提供一个第一节点和一个第二节点;提供一个日志,其中所述日志可以由第一节点和第二节点访问;第一节点请求改变锁定状态;以及响应于第一节点产生的对于改变锁定状态的请求,由第二节点来执行一个任务。
文档编号G06F15/173GK1589448SQ02823231
公开日2005年3月2日 申请日期2002年9月20日 优先权日2001年9月21日
发明者B·A·金斯博里, S·雷维奇, T·M·罗科普 申请人:泛伺服公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1