新四季網

使用網絡和基於碟片上的方案的混合鎖定的製作方法

2023-06-21 11:23:11 3

專利名稱:使用網絡和基於碟片上的方案的混合鎖定的製作方法
使用網絡和基於碟片上的方案的混合鎖定相關申請的交叉引用本申請要求2009年2月5日提交的美國臨時申請No.61/150,094的權益。本申請是 2007 年 2 月 16 日提交的名稱為 「System and Method forlmplemented Distributed Locks via On-Disk Heartbeating」的美國專利申請No. 11/676,109的部分繼續申請,以 R 2004 ^f-2 J3i 6 Hil^W^^^J "Providing multiple concurrent access to a file system"的美國專利申請No. 10/773,613的部分繼續申請,以引用的方式將這兩個申請並 入本文。
背景技術:
分布式(或跨主機的)鎖可以用於同步多個節點(即主機)的操作。可以使用網 絡鎖管理器(NLM),或替代地,在更加可靠的存儲區域網絡(SAN)可用的系統中,使用碟片 上基於租用的鎖(on-disklease-based lock)來實施分布式鎖。網絡容易出故障,並且當主機的IP網絡不工作或者管理鎖的主機崩潰時,必須選 出用於鎖的新管理器,而且有很多複雜的實施問題。這些系統還必須從網絡分區中恢復, 這會導致所謂的「腦分裂」問題,其中集群可能分裂為兩個或更多的子集群,每個子集群可 能對重要的碟片上資源要求獨佔。因此,NLM對節點失效的最大數量有限制。NLM可以將 至IJ 「仲裁(quorum) 」碟片的心跳選作為幫助確定節點是否宕機的額外途徑,諸如Red Hat Cluster Suite和VERITAS 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,. . . 290η相關聯,每個鎖與資源相關聯。節點280所持有的鎖290a,290b, 290c,.. . 290η中的每個已與指針數據相關聯,指針數據識別與節點280的實例唯一關聯的 心跳區342a。同樣,節點282所持有的鎖292a,292b,292c,. . . 292η中的每個已與指針數據 相關聯,指針數據識別與節點282的實例唯一關聯的心跳區342b。通過要求所有節點在系 統級時間常數內刷新其各自的心跳區,使得其他節點能夠確定心跳及其各自的鎖是否為有 效或失效的協議是可能的。例如,在圖3中,從節點280和282中的每個到其各自心跳的實 曲線指示心跳數據結構的刷新。以虛線圖示的節點N是節點的過期實例。節點N不再刷新 其心跳,但是與該節點相關聯的鎖仍舊指向其各自的心跳342η。如從節點280出發的虛線 所圖示的,如果節點280希望獲取節點282當前持有的鎖,則節點280可以通過監視心跳數 據結構來確定心跳342b是否存活,其在該實例中是仍然「心跳著」。因而,節點280將必須 為獲取鎖而等待。在另一實施例中,獲取鎖的失敗導致鎖操作的失敗。相反,如從節點282 出發的虛線所圖示的,如果來自節點282的過程希望獲取當前由節點N鎖定的資源,則節點282可以通過監視心跳數據結構來確定心跳342η是否仍然存活,其在該實例中是「失效」, 因而,節點282可以通過修改其狀態值來清除心跳342η,並且此後節點282可以自由地獲取 與心跳342η相關聯的鎖中的一個或多個。在一個實施例中,碟片用於存儲心跳段340。通過分配大到足夠容納多個心跳 區342的例如IOM字節的碟片的段340,來實現心跳分配。在該心跳段340中,系統的每 個心跳區342a,342b,... 342η通常可以至少與碟片上的最小扇區大小一樣大。例如,在 SCSI碟片上,每個心跳區可以是512位元組。替代性地,設計者自行選擇各個心跳區342a, 342b,. . . 342η以及整個心跳段可以具有的大小,以優化存儲器使用並容納與系統內的節點 相關聯的心跳的預計數目。在本發明中,心跳段340內的心跳區342的數目典型地大於系 統內的活動節點的最大數目。在本文中除非另外指出,否則術語「心跳」可互換使用來指代 數據結構345和數據結構駐留的心跳區342。在此公開的動態心跳分配算法避免了任何將節點提前配置為群集的一部分的要 求。一旦節點分配了心跳區,則其也可以將關於自身的配置信息,比如其IP位址或主機名, 存儲在心跳區345的「其他特定於節點的信息」區354中。在圖4中,佔據心跳區342a,342b,. . . 342η的心跳數據結構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,改變碟片上鎖狀態(共享 存儲中)以指示該鎖現在空閒。
11
圖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、磁帶和其他光和非光數據存儲設備。計算機可讀介質可以包括分布在聯網計算機系 統上的計算機可讀有形介質,使得可以以分布式方式存儲和執行計算機可讀代碼。儘管以特定順序描述了本方法操作,但是應當理解,在操作之間可以執行其他輔 助操作,或者可以調整操作以使得操作發生的時間略有不同,或者可以將操作分布在允許 處理操作在與處理相關聯的各種時間間隔上發生的系統中,只要重疊操作的處理是按期望 的方式來執行的。儘管已經為了理解上的清楚,在某些細節上描述了以上發明,但是很顯然,可以在 所附權利要求的範圍內實踐特定變化和修改。因此,將本實施例認為是說明性而不是限制 性的,並且本發明不受限於本文給出的細節,而是可以在所附權利要求的範圍和等效內容 進行修改。
權利要求
一種由節點獲取在多個互連節點的系統中的共享資源上的鎖的方法,所述方法包括(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所述的方法,其中當所述節點不再需要所述鎖時,更新在所述鎖元數據和所述本地鎖元數據中的所述鎖的狀態,以指示所述鎖正由所述節點以所述管理模式 擁有。
全文摘要
本發明涉及使用網絡和基於碟片上的方案的混合鎖定。公開了一種由節點獲取在多個互連節點的系統中的共享資源上的鎖的方法。競爭共享資源上的鎖的每個節點維護節點當前擁有的鎖的列表。在共享存儲上維護鎖元數據,該共享存儲可以被競爭共享資源上的鎖的所有節點訪問。在對應於每個節點的共享資源上維護心跳區,這樣節點可以註冊其活性。在共享存儲的鎖元數據中維護鎖狀態。鎖狀態可以指示鎖被排他持有、鎖空閒或鎖處於管理模式。如果鎖是以管理模式被持有的,則可以不使用諸如SCSI保留的互斥原語,將鎖的所有權轉移給另一節點。
文檔編號H04L29/08GK101800763SQ20091025409
公開日2010年8月11日 申請日期2009年12月18日 優先權日2009年2月5日
發明者丹尼爾·J·斯凱爾斯, 李金遠, 穆拉利·維萊阿努爾, 馬揚克·拉瓦特 申請人:威睿公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀