CN101800763B - 使用网络和基于碟片上的方案的混合锁定 - Google Patents

使用网络和基于碟片上的方案的混合锁定 Download PDF

Info

Publication number
CN101800763B
CN101800763B CN2009102540944A CN200910254094A CN101800763B CN 101800763 B CN101800763 B CN 101800763B CN 2009102540944 A CN2009102540944 A CN 2009102540944A CN 200910254094 A CN200910254094 A CN 200910254094A CN 101800763 B CN101800763 B CN 101800763B
Authority
CN
China
Prior art keywords
lock
node
heartbeat
metadata
described lock
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
Application number
CN2009102540944A
Other languages
English (en)
Other versions
CN101800763A (zh
Inventor
马扬克·拉瓦特
李金远
穆拉利·维莱阿努尔
丹尼尔·J·斯凯尔斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Weirui LLC
Original Assignee
VMware LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by VMware LLC filed Critical VMware LLC
Publication of CN101800763A publication Critical patent/CN101800763A/zh
Application granted granted Critical
Publication of CN101800763B publication Critical patent/CN101800763B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/52Indexing scheme relating to G06F9/52
    • G06F2209/523Mode

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及使用网络和基于碟片上的方案的混合锁定。公开了一种由节点获取在多个互连节点的系统中的共享资源上的锁的方法。竞争共享资源上的锁的每个节点维护节点当前拥有的锁的列表。在共享存储上维护锁元数据,该共享存储可以被竞争共享资源上的锁的所有节点访问。在对应于每个节点的共享资源上维护心跳区,这样节点可以注册其活性。在共享存储的锁元数据中维护锁状态。锁状态可以指示:锁被排他持有、锁空闲或锁处于管理模式。如果锁是以管理模式被持有的,则可以不使用诸如SCSI保留的互斥原语,将锁的所有权转移给另一节点。

Description

使用网络和基于碟片上的方案的混合锁定
相关申请的交叉引用
本申请要求2009年2月5日提交的美国临时申请No.61/150,094的权益。本申请是2007年2月16日提交的名称为“System and Method forImplemented Distributed Locks via On-Disk Heartbeating”的美国专利申请No.11/676,109的部分继续申请,以及2004年2月6日提交的名称为“Providing multiple concurrent access to a file system”的美国专利申请No.10/773,613的部分继续申请,以引用的方式将这两个申请并入本文。
背景技术
分布式(或跨主机的)锁可以用于同步多个节点(即主机)的操作。可以使用网络锁管理器(NLM),或替代地,在更加可靠的存储区域网络(SAN)可用的系统中,使用碟片上基于租用的锁(on-disklease-based lock)来实施分布式锁。
网络容易出故障,并且当主机的IP网络不工作或者管理锁的主机崩溃时,必须选出用于锁的新管理器,而且有很多复杂的实施问题。这些系统还必须从网络分区中恢复,这会导致所谓的“脑分裂”问题,其中集群可能分裂为两个或更多的子集群,每个子集群可能对重要的碟片上资源要求独占。因此,NLM对节点失效的最大数量有限制。NLM可以将到“仲裁(quorum)”碟片的心跳选作为帮助确定节点是否宕机的额外途径,诸如Red HatTM Cluster Suite和VERITASTM ClusterService的集群软件在过去已经使用“仲裁”碟片的概念,尽管它们不具体实施锁。
碟片上基于租用的锁依赖于互斥原语(mutual exclusionprimitives),诸如为绝大多数碟片阵列控制器所支持的SCSI-2保留/释放或SCSI-3持久性保留/释放。碟片阵列控制器管理物理碟片驱动,并将它们作为逻辑数据存储单元(DSU)向连接的计算机系统呈现,每个物理碟片驱动用逻辑单元号(LUN)来标识。碟片上基于租用的锁的性能取决于这些存储系统所提供的互斥原语的功效。
具体地,SCSI-2保留可能与LUN粒度上的那些操作一样花费大,并将对DSU的访问限制到持有保留的节点。因此,连附到DSU的任何其他计算机系统在保留持续结束之前,不能进行到LUN的输入输出。同时,基于SCSI-3的保留允许来自持有保留的节点之外的节点/起始器的输入输出,但是SCSI保留/释放的开销可能仍然被禁止。
发明内容
在一个实施例中,公开了一种由节点获取在多个互连节点的系统中的共享资源上的锁的方法。竞争共享资源上的锁的每个节点维护该节点当前所拥有的锁的列表。锁元数据被维护在共享存储上,可能竞争共享资源上的锁的所有节点可以访问该共享存储。在对应于每个节点的共享资源上维护心跳区,这样节点可以注册其活性。锁状态被维护在共享存储内的锁元数据中。锁状态可以指示:锁被排他持有、锁空闲或锁处于管理模式(managed mode)。如果锁是以管理模式被持有,则可以不必使用互斥原语,将锁的所有权转移给另一节点。
在另一实施例中,公开了一种在第一节点从第二节点接收释放锁的请求的方法。该方法包括检查第一节点的本地锁元数据。如果本地锁元数据包括指示该锁正由第一节点以排他模式所拥有的信息,则向第二节点发送指示该锁正被使用的消息。如果本地锁元数据包括指示该锁正由第一节点持有但不被使用的信息,则第二节点将该锁的信息从本地锁元数据移除,并且更新在对应于该锁的心跳区中的信息,以将该锁授予给第二节点。向第二节点返回指示该锁被授予的消息。在一个实施例中,释放请求经由IP网络被接收。
在又一实施例中,公开了一种用于存储以执行以下方法步骤的程序指令的计算机可读介质:(a)探查节点的本地锁元数据,以确定在本地锁元数据中是否存在该锁的锁元数据,其中锁元数据包括锁的标识和锁状态;(b)如果在所述本地锁元数据中不存在所述锁元数据,则执行步骤(i)到(iv),(i)从共享存储中读取所述锁的共享锁元数据,所述读取包括识别所述锁的当前拥有者和所述锁的当前状态;(ii)探查所述锁的所述当前拥有者的心跳区,以确定所述当前拥有者是否活着,其中如果所述当前拥有者不是活着的,则等待锁租用时间流逝,然后获取所述锁,并更新所述共享锁元数据以指示所述锁现在由所述节点拥有;(iii)如果所述锁的所述当前状态指示所述当前拥有者正以排他模式持有所述锁,则向所述节点返回消息以通知所述锁不是空闲的;(iv)如果所述锁的当前状态指示所述当前拥有者正以管理模式持有所述锁,则向所述当前拥有者发送释放所述锁的请求,其中如果所述当前拥有者还没有将所述锁释放给另一请求节点,则将所述锁授予给所述节点而不在所述共享资源上执行互斥原语操作,并且更新所述共享锁元数据以指示新的锁所有权和锁状态;(c)如果在所述本地锁元数据中存在所述节点的所述锁元数据,则探查在所述本地锁元数据中的所述锁的所述锁状态,如果在所述本地锁元数据中的所述锁的锁状态指示所述锁正以管理模式被拥有,则改变本地锁元数据中的所述锁的锁状态以指示所述节点对所述锁的排他使用,并更新所述共享锁元数据(而不用执行互斥原语)以指示所述锁正以排他模式被所述节点拥有。所述管理模式意指所述锁正由所述节点拥有,但是所述锁未被所述节点使用。
附图说明
图1图示了根据本发明一个或多个实施例的用于提供混合锁定的系统的逻辑图。
图2图示了根据本发明一个或多个实施例的用于存储锁信息的存储段的逻辑图。
图3从概念上图示了根据本发明一个或多个实施例的多个节点、节点实例、锁、和心跳之间的逻辑组织和关系。
图4从概念上图示了根据本发明一个或多个实施例的锁、心跳区和心跳段之间的逻辑组织和关系。
图5-9图示了根据本发明一个或多个实施例的用于获取锁的流程图。
具体实施方式
图1图示了用于提供对共享资源的混合锁定的系统。资源可以是必须控制对其的共享访问的实体,典型地是文件、记录、或共享存储器的区域,但是也可以是应用设计者选择的任何实体。节点是有资源所有权能力的任何实体。另外,节点可以具有由系统内的持久性标识符识别的可选特性,并且具有对共享资源保持基于租用的锁的能力。在一个或多个实施例中,每次节点被重启或重新初始化,创建该节点的不同实例。
如在此所使用的,术语“节点”意指连接到计算机网络的任何设备。节点可以是计算机、个人数字助理(PDA)、蜂窝电话、或多种其他网络装置。在IP网络上,节点是具有IP地址的任何设备。
在图1图示的系统中,任何计算机102均可以是节点。当在虚拟机环境中实施本发明时,可以将任何虚拟机100认为是节点。在一个或多个实施例中,节点用锁获取对资源的控制。特定节点实例所获取的锁与单个心跳相关联。心跳被实施为碟片上的数据结构,其包含用于识别特定节点实例的各种信息。锁也被实施为碟片上的数据结构,其包含用于识别拥有锁的节点实例的信息和对应于心跳的节点的地址。
图1的系统包括共享存储104,其包括用来存储锁定信息的心跳区106。共享资源和节点使用局域网(LAN)108和存储区域网络(SAN)110互连,局域网108可以是因特网、局域网或广域网。在一个实施例中,SAN 110和LAN 108可以是同一网络。应当注意,可以在非虚拟化环境以及虚拟化环境中实践此处描述的实施例。
图2图示了在共享存储中的心跳区106的逻辑图。心跳区106包括存储结构,用于存储心跳数据130、锁元数据132和实施本文档以下将要描述的锁定方法可能需要的其他锁相关数据134。在一个实施例中,网络108中的所有节点都可以访问心跳数据存储130和锁元数据存储132。然而,该可访问性易遭受到网络故障。在其他实施例中,还可以将锁元数据存储在与心跳区相分离的区中。
在一个或多个实施例中,每个主机或节点具有用于每个文件系统的心跳区106,以指示节点的活性。在一个实施例中,节点的活性由节点更新心跳区中的节点心跳数据的能力所指示。例如,如果因故障或负载大或从网络断开连接,节点变得不可操作,则节点可能失去其更新心跳数据的能力。节点在获取锁之后改变特定锁元数据区的状态,使得其他节点在给定的时间能够确定特定锁的拥有者。类似地,当锁被释放时,在对应的锁元数据区更新锁状态。
图3示出多个节点、锁、资源和心跳之间的逻辑组织和关系。在一个实施例中,节点是与其他节点共享相同资源的任何实体。如所图示,节点280可以已与一个或多个锁290a,290b,290c,...290n相关联,每个锁与资源相关联。节点280所持有的锁290a,290b,290c,...290n中的每个已与指针数据相关联,指针数据识别与节点280的实例唯一关联的心跳区342a。同样,节点282所持有的锁292a,292b,292c,...292n中的每个已与指针数据相关联,指针数据识别与节点282的实例唯一关联的心跳区342b。通过要求所有节点在系统级时间常数内刷新其各自的心跳区,使得其他节点能够确定心跳及其各自的锁是否为有效或失效的协议是可能的。例如,在图3中,从节点280和282中的每个到其各自心跳的实曲线指示心跳数据结构的刷新。以虚线图示的节点N是节点的过期实例。节点N不再刷新其心跳,但是与该节点相关联的锁仍旧指向其各自的心跳342n。如从节点280出发的虚线所图示的,如果节点280希望获取节点282当前持有的锁,则节点280可以通过监视心跳数据结构来确定心跳342b是否存活,其在该实例中是仍然“心跳着”。因而,节点280将必须为获取锁而等待。在另一实施例中,获取锁的失败导致锁操作的失败。相反,如从节点282出发的虚线所图示的,如果来自节点282的过程希望获取当前由节点N锁定的资源,则节点282可以通过监视心跳数据结构来确定心跳342n是否仍然存活,其在该实例中是“失效”,因而,节点282可以通过修改其状态值来清除心跳342n,并且此后节点282可以自由地获取与心跳342n相关联的锁中的一个或多个。
在一个实施例中,碟片用于存储心跳段340。通过分配大到足够容纳多个心跳区342的例如10M字节的碟片的段340,来实现心跳分配。在该心跳段340中,系统的每个心跳区342a,342b,...342n通常可以至少与碟片上的最小扇区大小一样大。例如,在SCSI碟片上,每个心跳区可以是512字节。替代性地,设计者自行选择各个心跳区342a,342b,...342n以及整个心跳段可以具有的大小,以优化存储器使用并容纳与系统内的节点相关联的心跳的预计数目。在本发明中,心跳段340内的心跳区342的数目典型地大于系统内的活动节点的最大数目。在本文中除非另外指出,否则术语“心跳”可互换使用来指代数据结构345和数据结构驻留的心跳区342。
在此公开的动态心跳分配算法避免了任何将节点提前配置为群集的一部分的要求。一旦节点分配了心跳区,则其也可以将关于自身的配置信息,比如其IP地址或主机名,存储在心跳区345的“其他特定于节点的信息”区354中。
在图4中,占据心跳区342a,342b,...342n的心跳数据结构345包括以下字段:拥有者标识符、心跳状态、心跳产生数、脉冲字段、其他特定于节点的信息和心跳超时。
也称为拥有者的拥有者标识符字段344唯一地标识拥有心跳区的节点,并且可以用包括但不限于字母数字或二进制的任何数据类型来实施,该数据类型的长度被选择为允许系统内的充足的唯一标识符。可以使用任何数量的不同标识方案,只要系统内的所有节点可以识别当前拥有特定心跳区342的节点。在优选实施例中,通用唯一标识符(UUID)用于识别节点。在替代实施例中,在仅使用心跳区的地址和心跳产生数就可以唯一地标识节点实例时,可以省略拥有者字段。然而应当注意,拥有者字段使得能够进行多种优化并简化调试。
心跳状态字段346指示心跳的当前状态,并且可以用能够采取多种状态的枚举数据类型来实施。在说明性实施例中,心跳状态值可以采取任何以下状态:
CLEAR-心跳当前未被使用;
IN_USE-心跳结构正由节点使用;
BREAKING-心跳已超时,并正由另一节点清除。
心跳产生数348是可修改的值,其指示心跳区已被初始化的次数,并可以用64位整数数据类型来实施。心跳产生数348可以被修改,典型地是每次将心跳区分配给节点时递增。与心跳区的地址一起,心跳产生数348可以用于唯一地识别心跳的特定实例。例如,心跳产生数348可以用于确定节点是否已经解除分配心跳区,然后重新分配同一区域。因此,心跳产生数使其他节点能够确定心跳是否被与锁数据结构中记录的节点相同的实例(instance)拥有。
脉冲字段350是每次心跳由其各自的拥有者更新(心跳着)时改变的值,并且可以用64位整数数据类型实施。在一个实施例中,脉冲字段350可以用时间戳来实施。替代地,脉冲字段350可以用另一值来实施,其可以不是时间格式,但是确保心跳每次更新时改变。其他节点可以通过观察脉冲字段350中的变化来获悉拥有者节点是否在心跳。可以使用多种技术更新脉冲字段350的值。例如,脉冲字段350可以相对从系统内部得到的初始启动值而递增。替代地,在更新时刻等,可以将脉冲字段350设置为本地时间的值。在说明性实施例中,为使在此公开的锁租用技术工作,不需要时钟跨主机同步。
其他特定于节点的信息区354是未定义的附加存储,其不需要与特定的数据类型相关联。数据结构345的该区允许将其他有用的数据与特定于心跳的数据一起存储,并且可以包括对当前拥有心跳的节点唯一或与之相关联的数据。例如,在分布式文件系统的环境中,可以将到用于主题节点的日志文件的指针存储在心跳数据结构345的其他特定于节点的信息区354内,如果该节点崩溃可以重放该日志文件。
在说明性实施例中,碟片上锁365可以用包含以下内容的数据结构来实施:持有锁的节点的地址、到持有锁的节点实例的心跳区342的指针、和获取锁时的心跳的产生数。以此方式,其他节点可以验证该锁定节点是否仍在心跳,并且自获取锁之后没有崩溃。可以将锁典型地存储在与心跳段340相同的故障域诸如相同的碟片内。在本发明中,锁数据结构365与系统内的每个资源相关联并且可以保持在碟片上。
在图4中,可以与系统内的每个资源相关联的锁数据结构365包括以下字段:拥有者标识符(拥有锁的节点)或拥有者通用唯一标识符(UUID)、心跳地址、心跳产生数、锁类型、其他特定于锁的信息。
可以用类似于心跳数据结构345的拥有者标识符字段344的方式实施拥有者标识符字段364。在预期的系统中,拥有者标识符字段364和拥有者标识符字段344对没有失效或过期的心跳可以具有相同的值,即拥有心跳的节点也拥有与该心跳相关联的所有锁。该要求在其中在心跳中没有指定拥有者的替代实施例中不存在,即使出于优化和调试的原因锁包含拥有者。
可以用类似于心跳数据结构345的心跳产生数348的方式实施心跳产生数366。在预期的系统中,心跳产生数348和心跳产生数366对于还没有成为失效的心跳可以具有相同的值。
锁类型字段368指示与资源相关联的锁的类型,并且可以用能够采取多个状态的任何枚举数据类型来实施。在说明性实施例中,锁类型字段典型地可以具有将由在系统内可用的锁的数目和类型限定的多个值。诸如这些值留待系统设计者决定。可以使用任何锁类型实施此处描述的系统。
典型的锁类型可以包括空、并发读、并发写、读保护、写保护、或排他锁类型中的任何一个。
心跳地址字段372识别锁拥有者心跳区的位置,并且可以用到心跳段340的特定心跳区342的指针来实施,该特定心跳区342包含对应于与锁相关联的心跳的拥有者的心跳数据结构345。
可选地,锁数据结构365可以进一步包括用于与其相关联的其他数据类型的其他特定于锁的信息区(未示出)。数据结构365的该区允许将其他有用的数据与锁数据一起存储,并且可以包括对当前拥有锁的节点唯一或与之相关联的数据。在本发明中,锁数据结构365与系统内的每个资源相关联并且可以保持在SAN的碟片上。在说明性实施例中,每个锁数据结构365与其对应的资源驻留在一起,所以映射系统资源或与其相关联。当节点试图获取对资源的访问时,该节点可以通过从碟片读取锁数据结构来立刻确定资源是否被锁定。取决于此处描述的技术是与传统计算机系统还是与完全或部分虚拟化的计算机系统一起使用,资源到锁的映射可以随设计者的决定而变化,只要在两者之间保持某种关联。例如,可以使用存储在碟片上或与心跳段340相同的故障域内的一个或多个表实施这样的映射。
如以上所描述的,在共享存储的锁元数据区中维护用于每个锁的锁状态或类型。在一个实施例中,锁类型包括三个值:“空闲”、“管理”和“锁定”。应当注意,这些名称值(例如,空闲、管理和锁定)仅是用来说明管理锁的方法。只要遵循在本文档全文中描述的管理和获取锁的过程,不论是所述的过程还是等效的过程,可以代替使用任何其他值或名称。如果锁处于“空闲”状态,则任何节点可以使用诸如SCSI保留的互斥原语来获取锁。当节点获取锁时,该锁的锁状态在锁元数据中变为“锁定”。“锁定”状态还意指锁的当前拥有者正以排他模式持有锁。然而,由于在存储区域网络中通过互斥原语获取锁的该过程代价高昂,所以在一个实施例中,如果节点不再需要锁,则该锁的状态在锁元数据中变为“管理”,以指示尽管当前拥有者仍然持有该锁,但如果请求,当前拥有者将释放该锁。此外,维护锁元数据中的指针,以识别当前拥有锁的节点。通过使用“管理”这种中间状态,大大减少了在获取锁中互斥原语的使用。当节点需要获取锁时,探查锁元数据以识别1)谁是该锁的当前拥有者,和2)该锁的当前状态是什么。如果该锁处于“空闲”状态,则将该锁授予请求节点。如果该锁处于“锁定”状态,则探查当前拥有该锁的节点的心跳区,以确定拥有节点是否仍然是活着的。如果该节点仍然活着,则将消息发送给请求节点,以通知请求节点该锁不是空闲的。然而,如果拥有节点不是活着的,则释放该锁,并将该锁的所有权传递给请求节点。如果该锁处于“管理”状态,则这意指拥有节点不再需要该锁但仍持有它以供其他节点获取该锁。在该情况中,通知拥有节点并将该锁授予给请求节点,并且相应地更新锁元数据。如果锁处于“锁定”或“管理”状态,则在一个实施例中,可以使用租用超时(典型地以较高的毫秒或秒为单位)值来释放锁。在正常操作中,拥有节点将更新心跳以延长租用超时。然而,如果拥有节点更新其心跳失败并因而没能延长锁租用(例如,由于SAN故障或节点故障),则可以在经过租用时间之后释放该锁。以下描述将详细描述本段中描述的过程。
在优选实施例中,当节点需要共享资源上的锁时,该节点检查在该节点之中的本地锁元数据中的锁的状态。在其他实施例中,可以将本地锁元数据存储在节点外。如果在该节点的本地锁元数据中找到锁元数据,并且锁状态指示该锁正以“管理”模式被持有,则该节点将本地锁元数据和碟片上(即共享存储)锁元数据存储中的锁状态改变为“持有”,并且获取该锁而不触发诸如SCSI保留过程的互斥原语。如果该节点的本地锁元数据不包含该锁的锁元数据,并且碟片上元数据指示该锁是空闲的,则该节点尝试通过诸如SCSI保留的互斥原语获取该锁。如果获取该锁的这种尝试成功,则在该节点的本地锁元数据中产生具有锁状态为“持有”的锁条目。如果另一节点在该节点之前成功获取了该锁,则该尝试将会失败。如果碟片上锁元数据指示该锁由另一节点排他持有,则该节点对另一节点发送消息以尝试获取该锁。如果另一节点仍使用该锁,则其可以通知该节点该锁不是空闲的。如果另一节点正以“管理”模式持有该锁,则其可以将该锁释放给该节点。在该情况中,该节点不执行SCSI保留过程就获取该锁,并且更新碟片上和本地锁元数据以指示该锁的所有权和状态。在一个示例中,可能有第三节点也对另一节点做出同样的请求,并成功获取该锁。在该情况中,另一节点将通知该节点自己不再是该锁的拥有者了。在另一节点未能对该节点的请求成功响应情况下,该节点首先检查碟片上存储以验证另一节点是否仍在心跳。在该情况中,节点在发起获取该锁的另一请求之前,等候选定的时间段。然而,如果另一节点不响应也不心跳,则该节点尝试通过SCSI保留过程破解(break)该锁。
图5图示了由节点获取锁的过程400。在一个实施例中,节点维护自己拥有的所有锁的本地锁元数据。在一个实施例中,在存储器缓存中维护本地锁元数据。在步骤402,节点开始获取在共享资源上的锁。在步骤404,检查本地锁元数据以确定正被获取的锁是否是已由该节点拥有,或该节点是否已对相同的锁做出了另一锁获取请求。在决定步骤406,确定正被获取的锁的锁状态是否存在于本地锁元数据中。如果否,则在步骤408,将锁状态设置为“锁请求”。回到决定步骤406,如果是,则在决定步骤410,确定该锁是否处于“管理”状态并且锁租用还未超时。如果否,则在步骤414,将锁状态改变为“锁请求”。在步骤416,从心跳区读取锁信息。
如果是(在决定步骤410),接着在步骤422,在锁元数据的共享存储中更新锁状态,并且将本地缓存中的锁状态改变为“持有”并返回“成功”消息。换言之,不经过诸如SCSI保留的互斥原语的过程,获取该锁。在决定步骤428,确定请求的锁是否空闲,或者存储在锁元数据中的拥有者UUID是否与请求节点的UUID相同,或者该锁是否指向失效的心跳区。如先前所描述的,锁元数据包括用于锁的心跳区的位置。如果该锁是空闲的,则该锁不指向心跳区。否则,该锁正由节点持有,该节点将定期更新心跳区以指示该节点是活着的并连接到网络。如果是,则在步骤412,如在图9中进一步描述地发起获取该锁的过程。如果否,则在步骤420,如图6中描述地将对该锁释放的请求发送给该锁的当前拥有者。
图6图示了接收请求锁释放的过程450。在步骤452,从网络中的另一节点接收锁释放的请求。在步骤454,检查当前拥有或请求的锁的本地锁元数据。在决定步骤456,检查本地锁元数据以确定本地锁元数据中是否有锁状态条目。如果否,则在步骤458,通知请求节点该节点不是锁的当前拥有者。在决定456,如果是,则该锁或者已被拥有或者由接收节点请求。在决定步骤460,如果锁状态指示该锁正由接收节点“持有”,则在步骤462,发送消息给请求节点以指示该锁非空闲。如果否,且在决定步骤464,若锁状态是“管理”,那么在步骤466,将锁状态条目从本地锁元数据移除,并将碟片上锁授予给请求节点,接着在步骤470,将“已获取锁”消息发送给请求节点以指示该锁被授予给请求节点。如果在决定步骤464,回答是否,则在步骤468,读取碟片上锁。在决定步骤472,如果该锁已被授予,则在步骤478,将锁状态设置为“持有”,接着在步骤480,将消息发送给请求节点以指示该锁非空闲。如果在决定步骤472,回答是否,则在步骤474,将消息发送给请求节点以指示正请求释放该锁的节点不是该锁的拥有者。
图7图示了释放锁的过程500。当节点需要释放锁时,在步骤502,节点将本地锁元数据中的锁状态改变为“管理”,并更新该锁的时间戳。进一步,在步骤504,节点将共享存储中的心跳区的锁状态改变为“管理”,并用新的时间戳更新锁元数据。应当注意,使用词“管理”仅是为了说明目的。可以使用任何其他合适的标记或指示符来代替。对锁状态的该更新确保其他请求该锁的节点在尝试获取该锁时,将对该节点发送网络消息,而不是使用诸如SCSI保留的互斥原语。在锁租用时间内,该节点继续持有“管理”状态的锁。如果该节点在租用时间内请求锁,则租用可以展期。一旦在该“管理”锁上的租用期满,则在步骤506,从该节点中的本地锁元数据中移除锁状态,并且在步骤508,改变碟片上锁状态(共享存储中)以指示该锁现在空闲。
图8A图示了对来自另一节点的“非拥有者”(见图6,元素458)消息进行处理的过程550。在步骤552,响应于节点的释放锁的请求,节点从另一节点接收“非拥有者”消息。在步骤554,节点重新读取该锁以确定该锁现在是否可用,因为在节点发送请求之前,该锁可能在此期间已被另一节点释放。在决定步骤558,如果锁状态与上次读取的不同,则在决定步骤560,确定该锁是否空闲。如果是,则控制移动到步骤556以尝试通过图9描述的过程来破解该锁。如果否,则在步骤562,返回消息以指示该锁非空闲。回到决定步骤558,如果是,在步骤556,尝试通过图9描述的过程来破解该锁。在决定步骤564,如果破解该锁的尝试成功,则在步骤566,本地缓存中的锁状态变为“持有”,并且返回“成功”消息。如果否,则在步骤562,返回消息以指示该锁非空闲。
图8B图示了节点处理“非空闲”消息的过程。当节点向另一节点发送请求以请求锁时,该节点在其本地缓存中产生已经对特定锁做出请求的条目。在步骤580,节点接收从另一节点返回的“非空闲”消息。在步骤582,从本地锁元数据移除锁状态,并且在步骤584,将“非空闲”消息发送给请求锁的应用或代码。
图8C图示了子系统处理“已获取锁”消息的过程。在步骤590,接收指示根据节点的锁请求已获取锁的消息。在步骤592,更新节点的本地锁元数据以指示该锁正由该节点持有。在步骤594,将成功消息返回给请求该锁的应用或代码。
图9图示了尝试破解锁的过程600。在步骤602,在需要时,尝试破解锁(例如,见图8A,元素556)。在步骤604,检查共享存储内的心跳区和锁元数据以识别该锁的当前状态。在决定步骤606,如果锁元数据指示该锁空闲,则在步骤608,通过诸如SCSI保留的互斥原语来尝试获取该锁。在获取该锁之后,如果需要则重放文件系统或其他类型的日志以保持数据的完整性。如果否,则在决定步骤610,将存储在锁元数据中的锁拥有者UUID与请求节点的UUID进行比较。如果UUID匹配,则在步骤616,将指示已获取该锁的消息发送给请求该锁的应用或代码。如果否,在步骤612,检查当前锁模式。
回到决定步骤614,如果破解该锁的尝试成功,则在步骤616,将共享缓存更新为“持有”,并发送指示已获取该锁的消息。如果破解该锁的尝试不成功,则在步骤614,发送指示该锁非空闲的消息。这种获取该锁的失败可能是由于步骤606和608之间的事实,即另一节点可能获取该锁。
在决定步骤612,确定当前锁模式是否是排他的。在一个实施例中,“排他”锁模式意指该锁正由一个节点持有。如果是,在步骤622,再次读取心跳和锁元数据。在决定步骤626,确定锁状态是否改变。如果否,在决定步骤632,确定是否已发生心跳超时。如果锁的拥有者在选定的时间段内未能成功更新共享存储中的心跳数据,则心跳超时可能产生。如果是,重复步骤608,其包括清除该锁的当前拥有者,该拥有者因为没能心跳,所有失去其租用。如果否,在步骤634,在选定的时间段内使过程进入休眠,然后重复步骤622。如果决定步骤626的答案为是,则在决定步骤650,确定是否仅有心跳已改变。如果是,在步骤652,移除锁缓存条目,并返回“非空闲”消息。如果在决定步骤650是否,则在决定步骤654,确定锁状态是否已变为“管理”。如果是,则控制前进到决定步骤624。如果否,则控制前进到决定步骤632。
在决定步骤624,确定该锁是否处于“管理”模式。在一个实施例中,如果先前获取该锁的节点不再需要该锁,但在其他节点请求该锁之前一直持有该锁,则该锁可以是处于管理模式的。如果否,则在步骤628,发送指示该锁非空闲的消息。如果是,在步骤630,读取锁元数据。在决定步骤638,确定自从上次读取,锁状态是否已改变。如果是,执行步骤640。在决定步骤640,将锁拥有者UUID与本地UUID进行比较。如果UUID匹配,则在步骤642,将共享缓存更新为“持有”并发送“已获得锁”消息。如果UUID不匹配,则在步骤628,将共享缓存更新为“持有”并发送“非空闲”消息。如果否,在决定步骤644,确定该锁是否超时。如果当前拥有者没能成功延长锁租用,则锁可能超时。如果是,执行步骤608。如果否,在步骤648,在选定的时间段内使破解该锁的过程进入休眠,然后重复步骤630。
考虑以上实施例,应当理解本发明可以采用各种计算机实施的涉及存储在计算机系统内的数据的操作。这些操作是需要对物理量进行物理操控的。任何此处描述的构成本发明一部分的操作是有用的机器操作。本发明还涉及用于执行这些操作的设备或装置。在一个实施例中,该装置可以是为了所需目的而专门构建的(例如专用机器),或者该装置可以是由存储在计算机中的计算机程序选择性激活或配置的通用计算机。具体而言,各种通用机器可以与根据本文的教导所编写的计算机程序一起使用,或者更便利地是构建更加专用的装置来执行所需的操作。
还可以将本发明的实施例定义为将数据从一种状态变换为另一种状态的机器。可以将变换后的数据存储在存储中,然后由处理器操控。于是,处理器将数据从一个形态变换为另一形态。进一步,可以由一个或多个可以通过网络互连的机器或处理器来处理本方法。还可以虚拟化本机器,以将对存储的物理访问和处理能力提供给一个或多个用户、服务器或客户端。于是,可以将虚拟化的系统认为是可以作为一个或多个通用机器操作或可以被配置为专用机器的机器。每个机器或机器的虚拟表示可以将数据从一种状态或形态变换为另一种,并且还可以处理数据、将数据存储在存储中、显示结果、或将结果通信给其他机器。
还可以将本发明实施为在计算机可读介质上的计算机可读代码。计算机可读介质是可以存储此后可以由计算机系统读取的数据的任何数据存储设备。计算机可读介质的示例包括:硬盘驱动、网络附加存储(NAS)、只读存储器、随机存取存储器、CD-ROM、CD-R、CD-RW、磁带和其他光和非光数据存储设备。计算机可读介质可以包括分布在联网计算机系统上的计算机可读有形介质,使得可以以分布式方式存储和执行计算机可读代码。
尽管以特定顺序描述了本方法操作,但是应当理解,在操作之间可以执行其他辅助操作,或者可以调整操作以使得操作发生的时间略有不同,或者可以将操作分布在允许处理操作在与处理相关联的各种时间间隔上发生的系统中,只要重叠操作的处理是按期望的方式来执行的。
尽管已经为了理解上的清楚,在某些细节上描述了以上发明,但是很显然,可以在所附权利要求的范围内实践特定变化和修改。因此,将本实施例认为是说明性而不是限制性的,并且本发明不受限于本文给出的细节,而是可以在所附权利要求的范围和等效内容进行修改。

Claims (20)

1.一种由获取节点获取在多个互连节点的系统中的共享资源上的锁的方法,所述方法包括:
(a)探查所述获取节点的本地锁元数据,以确定在所述本地锁元数据中是否存在所述锁的锁元数据,其中所述锁元数据包括所述锁的标识和锁状态;
(b)如果在所述本地锁元数据中不存在所述锁元数据,则执行步骤(i)到(iv),
(i)从共享存储中读取所述锁的共享锁元数据,所述读取包括识别所述锁的当前拥有者和所述锁的当前状态;
(ii)探查所述锁的所述当前拥有者的心跳区,以确定所述当前拥有者是否活着,其中如果所述当前拥有者不是活着的,则等待锁租用时间流逝,然后获取所述锁,并更新所述共享锁元数据以指示所述锁现在由所述获取节点拥有;
(iii)如果所述锁的所述当前状态指示所述当前拥有者正以排他模式持有所述锁,则向所述获取节点返回消息以通知所述锁不是空闲的;
(iv)如果所述锁的所述当前状态指示所述当前拥有者正以管理模式持有所述锁,则向所述当前拥有者发送释放所述锁的请求,其中如果所述当前拥有者还没有将所述锁释放给另一请求节点,则将所述锁授予给所述获取节点而不在所述共享资源上执行互斥原语操作,并且更新所述共享锁元数据以指示新的锁所有权和锁状态;以及
(c)如果在所述本地锁元数据中存在所述获取节点的所述锁元数据,则探查在所述本地锁元数据中的所述锁的所述锁状态,如果在所述本地锁元数据中的所述锁的所述锁状态指示所述锁正以管理模式被拥有,则改变所述本地锁元数据中的所述锁的所述锁状态以指示所述获取节点对所述锁的排他使用,并更新所述共享锁元数据以指示所述锁正以排他模式被所述获取节点拥有,
其中所述管理模式意指所述锁正由所述获取节点拥有,但是所述锁未被所述获取节点使用。
2.如权利要求1所述的方法,其中等待所述锁租用时间流逝包括:在选定的时间间隔内,探查所述锁的所述当前拥有者的所述心跳区以确定所述当前拥有者是否活着,其中所述选定的时间间隔是小于所述锁租用时间的时间段。
3.如权利要求1所述的方法,其中如果所述获取节点的所述本地锁元数据未指示所述锁正由所述获取节点拥有,则更新所述本地锁元数据以指示所述锁正被请求。
4.如权利要求1所述的方法,其中获取所述锁包括:更新所述本地锁元数据以包括所述获取节点拥有所述锁的信息,并且更新所述共享存储中的所述锁元数据以添加指向所述心跳区的指针。
5.如权利要求4所述的方法,其中更新所述锁元数据包括更新锁时间戳。
6.如权利要求4所述的方法,其中更新所述锁元数据包括更新所述锁的状态。
7.如权利要求1所述的方法,其中识别所述锁租用是否期满的过程包括:在存储中维护至少一个心跳数据结构,所述心跳数据结构包括:拥有者数据,识别所述心跳的当前拥有者;状态数据,识别所述心跳的当前状态;脉冲数据,识别所述心跳的上次更新的时间;以及如果所述脉冲数据在选定的时间段内没有改变,则允许所述心跳被修改。
8.如权利要求7所述的方法,所述心跳数据结构进一步包括识别所述心跳的版本的产生数据。
9.如权利要求8所述的方法,进一步包括:
维护与多个共享资源中的一个相关联的锁数据结构,所述锁数据结构包括识别心跳的数据。
10.如权利要求9所述的方法,其中识别所述心跳的所述数据包括识别所述心跳的当前拥有者的拥有者数据和识别所述心跳的位置的地址数据中的一个。
11.一种在第一节点从第二节点接收释放锁的请求的方法,所述方法包括:
检查所述第一节点的本地锁元数据;
如果所述本地锁元数据包括指示所述锁正以排他模式被拥有的信息,则向所述第二节点发送指示所述锁正被使用的消息;
如果所述本地锁元数据包括指示所述锁正由所述第一节点持有但是没有被使用的信息,则将所述锁的信息从所述本地锁元数据移除,并且更新对应于所述锁的心跳区中的信息,以将所述锁授予给所述第二节点;以及
向所述第二节点返回指示所述锁空闲的消息,
其中所述释放请求是经由IP网络接收的。
12.如权利要求11所述的方法,其中,如果所述本地锁元数据不包括关于所述锁的信息,则向所述第二节点返回指示所述第一节点不是所述锁的拥有者的消息。
13.如权利要求12所述的方法,其中一旦接收到所述指示所述第一节点不是所述锁的拥有者的消息,所述第二节点再次重新读取所述心跳区中的所述锁元数据,以确定所述锁的状态是否有任何改变。
14.如权利要求13所述的方法,其中如果在第一次读取和所述重新读取之间所述锁的状态没有变化,则尝试破解所述锁。
15.如权利要求13所述的方法,其中如果在第一次读取和所述重新读取之间所述锁的状态己变化,则确定所述锁是否是空闲的。
16.如权利要求11所述的方法,其中所述心跳区包括至少一个心跳数据结构,所述心跳数据结构包括:
拥有者数据,识别所述心跳的当前拥有者;
状态数据,识别所述心跳的当前状态;
脉冲数据,识别所述心跳的上次更新的时间。
17.如权利要求16所述的方法,进一步包括:
如果所述脉冲数据在选定的时间段内没有改变,则允许所述心跳被修改。
18.一种在网络上的共享资源上管理锁的方法,所述方法包括:
维护用于节点的心跳区,其中所述共享资源可由所述节点访问,并且在所述网络上的共享存储上维护所述心跳区,所述心跳区包括用来存储所述节点的心跳的空间和用来存储所述锁的锁元数据的空间;
在所述节点中维护本地锁元数据,以在所述锁由所述节点拥有时存储所述锁的状态;以及
其中,当所述节点尝试获取所述锁时,在所述本地锁元数据中进行检查以确定所述锁是否已由所述节点所拥有,如果所述锁不由所述节点所拥有,则探查所述共享存储中的所述锁元数据以检索所述锁的状态和所述锁的当前拥有者,如果所述状态指示所述锁正由另一节点以管理模式持有,则请求所述另一节点将所述锁授予给所述节点,其中将所述锁授予给所述节点而不使用互斥原语,
其中所述管理模式意指所述锁正由所述节点拥有,但是所述锁未被所述节点使用。
19.如权利要求18所述的方法,其中如果所述锁已由所述节点拥有,则更新所述锁元数据中的所述状态和所述节点中的所述本地锁元数据,以指示所述锁正由所述节点排他持有。
20.如权利要求19所述的方法,其中当所述节点不再需要所述锁时,更新在所述锁元数据和所述本地锁元数据中的所述锁的状态,以指示所述锁正由所述节点以所述管理模式拥有。
CN2009102540944A 2009-02-05 2009-12-18 使用网络和基于碟片上的方案的混合锁定 Active CN101800763B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15009409P 2009-02-05 2009-02-05
US61/150,094 2009-02-05

Publications (2)

Publication Number Publication Date
CN101800763A CN101800763A (zh) 2010-08-11
CN101800763B true CN101800763B (zh) 2013-04-10

Family

ID=42596254

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102540944A Active CN101800763B (zh) 2009-02-05 2009-12-18 使用网络和基于碟片上的方案的混合锁定

Country Status (1)

Country Link
CN (1) CN101800763B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102984268B (zh) * 2012-12-11 2015-04-15 中国人民解放军国防科学技术大学 用于高可用集群的scsi共享存储资源访问方法及装置
CN104657260B (zh) * 2013-11-25 2018-05-15 航天信息股份有限公司 控制分布式节点间访问共享资源的分布式锁的实现方法
CN104820622B (zh) * 2015-05-22 2019-07-12 上海斐讯数据通信技术有限公司 一种共享内存锁管理控制方法及系统
CN106648909A (zh) * 2016-10-13 2017-05-10 华为技术有限公司 一种磁盘锁的管理方法、装置和系统
CN110932845B (zh) * 2019-12-31 2021-12-03 山东英信计算机技术有限公司 一种代理端注册方法、系统及相关装置
CN111124697B (zh) * 2020-01-02 2023-09-08 中国航空工业集团公司西安航空计算技术研究所 面向分布式平台的任务同步和执行方法
CN113760841B (zh) * 2020-06-29 2024-10-18 北京沃东天骏信息技术有限公司 实现分布式锁的方法和装置
CN117519945A (zh) * 2023-12-07 2024-02-06 北京优炫软件股份有限公司 一种数据库资源调度方法、装置及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1504894A (zh) * 2002-11-28 2004-06-16 �Ҵ���˾ 存储控制装置及其操作方法
CN101026008A (zh) * 2005-11-10 2007-08-29 三星电子株式会社 页面缓冲器和用于在非易失性存储装置中驱动其的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1504894A (zh) * 2002-11-28 2004-06-16 �Ҵ���˾ 存储控制装置及其操作方法
CN101026008A (zh) * 2005-11-10 2007-08-29 三星电子株式会社 页面缓冲器和用于在非易失性存储装置中驱动其的方法

Also Published As

Publication number Publication date
CN101800763A (zh) 2010-08-11

Similar Documents

Publication Publication Date Title
CN101800763B (zh) 使用网络和基于碟片上的方案的混合锁定
US9130821B2 (en) Hybrid locking using network and on-disk based schemes
US10817478B2 (en) System and method for supporting persistent store versioning and integrity in a distributed data grid
EP3811596B1 (en) Hierarchical namespace with strong consistency and horizontal scalability
CN101981545B (zh) 用于事务缓存的系统和方法
EP1008047B1 (en) System for providing highly available data storage using globally addressable memory
US8856091B2 (en) Method and apparatus for sequencing transactions globally in distributed database cluster
US9141480B2 (en) Handling failed transaction peers in a distributed hash table
CN104793988A (zh) 跨数据库分布式事务的实现方法和装置
US9652346B2 (en) Data consistency control method and software for a distributed replicated database system
US11468011B2 (en) Database management system
CN105190622A (zh) 用于分布式数据库系统的快速崩溃恢复
KR101296778B1 (ko) NoSQL 데이터베이스를 위한 결과적 트랜잭션 처리 방법
WO2007028248A1 (en) Method and apparatus for sequencing transactions globally in a distributed database cluster
CN102253869A (zh) 可缩放的容错元数据服务
US20180314749A1 (en) System and method for partition-scoped snapshot creation in a distributed data computing environment
US20130117526A1 (en) Shared temporary storage management in a shared disk database cluster
US11003550B2 (en) Methods and systems of operating a database management system DBMS in a strong consistency mode
JP5331050B2 (ja) データ同期システム、データ同期方法、情報処理装置、情報処理方法、およびプログラム
US10970177B2 (en) Methods and systems of managing consistency and availability tradeoffs in a real-time operational DBMS
US20090063420A1 (en) Grid based file system
CA2619778A1 (en) Method and apparatus for sequencing transactions globally in a distributed database cluster with collision monitoring
JP2006351040A (ja) ノード間共用ファイル制御方法
CN116561217A (zh) 元数据管理系统及方法
JPH0820996B2 (ja) データアクセスシステム

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
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: California, USA

Patentee after: Weirui LLC

Country or region after: U.S.A.

Address before: California, USA

Patentee before: VMWARE, Inc.

Country or region before: U.S.A.