專利名稱:計算機集群系統(tǒng)中共享資源鎖分配方法與計算機及集群系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng),尤其涉及計算機集群系統(tǒng)中共享資源的鎖分配方法及相對應(yīng)的計算機及集群系統(tǒng)。
背景技術(shù):
鎖是計算機系統(tǒng)中的一個核心概念。在單機系統(tǒng)中,鎖用于保證多個進程或線程對同一共享資源的互斥訪問。簡單的鎖模型包括共享鎖和排它鎖。一種共享資源在某一時刻只能分派多個共享鎖或者是一個排它鎖。在計算機集群環(huán)境中,借助于分布式鎖可以保證分布在各個成員節(jié)點(即計算機集群系統(tǒng)中的每一個物理設(shè)備)上的進程對集群中同一共享資源的互斥訪問。大量基于集群的應(yīng)用程序需要使用分布式鎖服務(wù)。
基于集群的應(yīng)用程序一方面能夠提供更強的服務(wù)能力,另一方面能夠提供更高的服務(wù)可用性。高可用性一般可以通過一年內(nèi)軟件或硬件能夠正常工作的時間來衡量。比如99.999%的可用性指在一年內(nèi)服務(wù)停止的時間不超過5分鐘,停止的時間包括有計劃的停止(如系統(tǒng)升級等)和無計劃的停止(如異常的軟硬件故障、突然掉電等等)。高可用性要求在集群中某些成員節(jié)點或者進程發(fā)生故障時,能夠平滑快速地進行任務(wù)切換,防止運行狀態(tài)數(shù)據(jù)的丟失。集群中的分布式鎖服務(wù)必須也要具備高可用性,這要求在節(jié)點故障時不會引起鎖分配信息錯誤或丟失從而造成系統(tǒng)服務(wù)故障。
集群高可用鎖的關(guān)鍵技術(shù)包括分布式鎖管理技術(shù)、鎖恢復(fù)技術(shù)等。
現(xiàn)有技術(shù)中集群高可用鎖服務(wù)的一種實現(xiàn)方案是采用主從結(jié)構(gòu),即存在一個主節(jié)點作為集群中所有資源的鎖管理節(jié)點,同時可以存在另外一個或多個節(jié)點作為該鎖管理節(jié)點的備份節(jié)點(即副節(jié)點),主副節(jié)點之間采用心跳機制監(jiān)控其工作狀態(tài),采用同步或者異步方式更新存儲的當前鎖分配信息。當發(fā)現(xiàn)主節(jié)點失效時,副節(jié)點接管主節(jié)點的工作,繼續(xù)維護集群中所有資源的鎖分配。
上述現(xiàn)有技術(shù)方案實現(xiàn)簡單、清晰,具有單一的管理節(jié)點,在集群規(guī)模不大或者低負載應(yīng)用中具有較好的性能,并保證其高可用。該現(xiàn)有技術(shù)方案的缺點是擴展性不強,當集群規(guī)模增大或者負載較大時,主節(jié)點是集群服務(wù)中潛在的性能瓶頸。
發(fā)明內(nèi)容
本發(fā)明提供一種計算機集群系統(tǒng)中共享資源鎖分配方法,用以解決現(xiàn)有技術(shù)中存在的由單一節(jié)點作為集群中所有資源的鎖管理節(jié)點時,當集群規(guī)模增大或者負載較大時無法滿足服務(wù)要求的問題。
根據(jù)本發(fā)明提供的共享資源鎖分配方法,本發(fā)明另提供一種相對應(yīng)的計算機及集群系統(tǒng)。
本發(fā)明方法包括將系統(tǒng)中一個以上的成員節(jié)點作為系統(tǒng)中共享資源的鎖管理節(jié)點,每個共享資源僅對應(yīng)一個鎖管理節(jié)點;當某一應(yīng)用請求申請或釋放共享資源鎖時,向該共享資源對應(yīng)的鎖管理節(jié)點發(fā)送請求,由對應(yīng)的鎖管理節(jié)點完成鎖申請分配或釋放。
根據(jù)本發(fā)明的上述方法,系統(tǒng)中的每一個成員節(jié)點將第一次申請某共享資源鎖的成員節(jié)點作為該共享資源的鎖管理節(jié)點。
根據(jù)本發(fā)明的上述方法,在每個成員節(jié)點中保存全局資源目錄信息表,存儲系統(tǒng)中的共享資源及其對應(yīng)的鎖管理節(jié)點的對應(yīng)關(guān)系;當某一應(yīng)用請求申請或釋放某一共享資源鎖時,本地節(jié)點查詢自身保存的所述全局資源目錄信息表,向查詢出的對應(yīng)鎖管理節(jié)點發(fā)起鎖申請或釋放請求。
根據(jù)本發(fā)明的上述方法,當查詢到所述全局資源目錄信息表中沒有記錄請求的共享資源對應(yīng)的鎖管理節(jié)點信息時,所述本地節(jié)點向系統(tǒng)中的每個成員節(jié)點發(fā)送可靠有序組播消息,請求確定該共享資源對應(yīng)的鎖管理節(jié)點;每個成員節(jié)點根據(jù)接收的組播消息邏輯序,確定出該共享資源對應(yīng)的鎖管理節(jié)點;并由確定出的對應(yīng)鎖管理節(jié)點進行鎖分配。
根據(jù)本發(fā)明的上述方法,當所述全局資源目錄信息表中沒有記錄請求的共享資源對應(yīng)的鎖管理節(jié)點信息時,所述本地節(jié)點向系統(tǒng)中的每個成員節(jié)點發(fā)送組播消息,請求確定該共享資源對應(yīng)的鎖管理節(jié)點;每個成員節(jié)點接收到所述組播消息后,采用同一種哈希算法確定出該共享資源對應(yīng)的鎖管理節(jié)點,并由確定出的對應(yīng)鎖管理節(jié)點進行鎖分配。
所述鎖管理節(jié)點收到鎖申請請求后,根據(jù)對應(yīng)共享資源的鎖分配原則判斷出可以進行鎖分配時,允許當前請求對該共享資源進行加鎖。
根據(jù)本發(fā)明的上述方法,在每一個鎖管理節(jié)點中保存鎖分配信息表,存儲已分配的鎖隊列和等待分配的鎖隊列;當鎖管理節(jié)點收到鎖申請請求并根據(jù)對應(yīng)共享資源的鎖分配原則判斷出當前有鎖分配時,分配請求的共享資源鎖,并將已分配鎖及發(fā)起鎖申請請求的節(jié)點信息存入到已分配的鎖隊列中;當判斷出當前沒有鎖分配時,將該請求置入等待分配的鎖隊列中;直到該共享資源有鎖釋放且請求未超時,再將已釋放的鎖分配給該請求。
在系統(tǒng)成員節(jié)點中保存鎖申請信息表,存儲由本節(jié)點發(fā)起的共享資源鎖申請信息;當申請的共享資源使用完畢后,請求對應(yīng)的鎖管理節(jié)點釋放申請的共享資源鎖,并刪除本地鎖申請信息表中對應(yīng)的鎖申請記錄。
根據(jù)本發(fā)明的上述方法,當系統(tǒng)中有成員節(jié)點失效時,執(zhí)行下列步驟為系統(tǒng)中失效節(jié)點所管理的失效資源重新確定新的鎖管理節(jié)點;每一個成員節(jié)點檢查本地保存的鎖分配信息表中是否有失效節(jié)點申請的共享資源鎖,若有,則釋放失效節(jié)點申請的共享資源鎖,并更新本地保存的鎖分配信息表;每一個成員節(jié)點根據(jù)確定出的新的鎖管理節(jié)點更新本地保存的全局目錄信息表和鎖申請信息表。
所述為失效資源重新確定新的鎖管理節(jié)點,具體方法包括由申請了失效資源鎖的成員節(jié)點采取可靠有序組播方式組播各自對所述失效資源鎖的申請狀態(tài)消息;各成員節(jié)點根據(jù)所述申請狀態(tài)消息的消息序,將第一個發(fā)送某一失效資源鎖申請狀態(tài)消息的節(jié)點作為該失效資源的新的鎖管理節(jié)點。
根據(jù)本發(fā)明的上述方法,所述失效資源的新的鎖管理節(jié)點根據(jù)所述各成員節(jié)點發(fā)送的失效資源鎖的申請狀態(tài)消息,在本地恢復(fù)該失效資源的鎖分配信息。
所述系統(tǒng)為失效資源重新確定新的鎖管理節(jié)點,具體方法包括檢測到某一成員節(jié)點失效的成員節(jié)點采取可靠有序組播方式在整個集群系統(tǒng)中組播節(jié)點失效通知,每一個成員節(jié)點接收到所述節(jié)點失效通知后,采用同一種哈希算法重新確定出失效節(jié)點所管理的共享資源的新的管理節(jié)點。
當系統(tǒng)中有新成員節(jié)點加入時,執(zhí)行下列步驟所述新成員節(jié)點從其它有效成員節(jié)點中獲取所述全局資源目錄信息表并存儲一份在本地。
本發(fā)明提供一種計算機,應(yīng)用于計算機集群系統(tǒng),所述計算機作為所述系統(tǒng)的一個成員節(jié)點;在所述計算機中包括第一存儲模塊,存儲系統(tǒng)中的共享資源及其對應(yīng)的鎖管理節(jié)點的全局資源目錄信息表;第一功能模塊,用于當某一應(yīng)用請求申請某一共享資源鎖時,查詢所述第一存儲模塊中保存的全局資源目錄信息表,如果所述全局資源目錄信息表中沒有記錄該共享資源對應(yīng)的鎖管理節(jié)點信息,則發(fā)送可靠有序傳遞的組播消息給系統(tǒng)中的全部成員節(jié)點,請求確定出對應(yīng)的鎖管理節(jié)點;如果所述全局資源目錄信息表中記錄有該共享資源對應(yīng)的鎖管理節(jié)點信息,則向?qū)?yīng)鎖管理節(jié)點發(fā)起鎖申請請求;鎖管理節(jié)點確定模塊,接收所述組播消息,確定出請求的共享資源對應(yīng)的鎖管理節(jié)點,并判斷本節(jié)點是否為對應(yīng)的鎖管理節(jié)點;當判斷出本節(jié)點為對應(yīng)的鎖管理節(jié)點時,發(fā)送通知消息給本節(jié)點的共享資源鎖管理模塊;共享資源鎖管理模塊,接收鎖申請或釋放請求,對其所管理的一個或多個共享資源鎖實現(xiàn)分配與釋放操作。
所述計算機還包括第二存儲模塊,存儲由本節(jié)點發(fā)起的共享資源鎖申請信息;第二功能模塊,當本節(jié)點申請的共享資源使用完畢后,請求對應(yīng)的鎖管理節(jié)點釋放申請的共享資源鎖,并刪除第二存儲模塊中存儲的鎖申請信息表中對應(yīng)的共享資源申請記錄。
還包括第三存儲模塊,存儲已分配的鎖隊列和等待分配的鎖隊列;當共享資源鎖管理模塊接收到鎖申請請求后,如果根據(jù)對應(yīng)共享資源的鎖分配原則判斷出當前有鎖分配時,則分配請求的共享資源鎖,并將已分配鎖及發(fā)起鎖申請請求的節(jié)點信息存入到已分配的鎖隊列中;如果判斷出當前沒有鎖分配時,則將該請求置入等待分配的鎖隊列中,直到該共享資源有鎖釋放且請求未超時時,再將已釋放的鎖分配給該請求。
本發(fā)明還提供一種計算機集群系統(tǒng),包括本發(fā)明提供的所述的多臺計算機。
本發(fā)明有益效果如下(1)采用本發(fā)明,在計算機集群系統(tǒng)中,至少存在兩個或以上成員節(jié)點作為鎖管理節(jié)點,完成所管理的一個或多個共享資源的鎖分配/釋放操作,克服了現(xiàn)有技術(shù)中由集群單一節(jié)點來完成集群中所有資源的鎖分配/釋放所帶有的性能瓶頸問題。
(2)本發(fā)明可以通過哈希算法等方式建立起共享資源與成員節(jié)點的映射關(guān)系,確定出各共享資源的鎖管理節(jié)點,從而達到平衡分布各共享資源的鎖管理節(jié)點,實現(xiàn)負載平衡。
(3)本發(fā)明還可以采取將第一次申請某共享資源鎖的成員節(jié)點作為該共享資源的鎖管理節(jié)點的方式來確定出共享資源和鎖管理節(jié)點的對應(yīng)關(guān)系,由于集群內(nèi)應(yīng)用對鎖服務(wù)請求的隨機性,因此,各共享資源的鎖管理節(jié)點將隨機分布在各成員節(jié)點上,同樣能達到負載平衡的目的。
(4)本發(fā)明采用唯一節(jié)點作為一個共享資源的鎖管理節(jié)點,不設(shè)置備份節(jié)點,鎖申請信息僅在申請及響應(yīng)消息流經(jīng)本地服務(wù)進程的過程中在本地建立副本,因此,系統(tǒng)響應(yīng)速度快;克服了現(xiàn)有技術(shù)采用備份管理節(jié)點方式時,對于每次鎖操作,鎖管理節(jié)點(主節(jié)點)必須與備份節(jié)點(副節(jié)點)同步后才能返回響應(yīng)消息,系統(tǒng)響應(yīng)速度慢的問題。
圖1A、圖1B為本發(fā)明共享資源鎖申請流程圖;圖2為本發(fā)明集群系統(tǒng)中的計算機結(jié)構(gòu)示意圖。
具體實施例方式
本發(fā)明提供的計算機集群系統(tǒng)中共享資源鎖分配方法,包括將系統(tǒng)中一個以上的成員節(jié)點作為系統(tǒng)中全部共享資源的鎖管理節(jié)點,每個共享資源僅對應(yīng)一個鎖管理節(jié)點;當某一應(yīng)用請求申請或釋放共享資源鎖時,向該共享資源對應(yīng)的鎖管理節(jié)點發(fā)送請求,由對應(yīng)的鎖管理節(jié)點完成鎖申請分配或釋放。
下面用兩個實施例來具體說明如何確定共享資源對應(yīng)的鎖管理節(jié)點實施例一將系統(tǒng)中第一次申請某共享資源鎖的成員節(jié)點作為該共享資源的鎖管理節(jié)點。
假設(shè)計算機集群系統(tǒng)中共有5個成員節(jié)點,分別為節(jié)點1、節(jié)點2、節(jié)點3、節(jié)點4和節(jié)點5;系統(tǒng)中共有10個共享資源,分別為共享資源A、共享資源B、共享資源C、共享資源D、共享資源E、共享資源F、共享資源G、共享資源H、共享資源I和共享資源J;系統(tǒng)中的每一個節(jié)點(節(jié)點1-5)都保存有一張全局資源目錄信息表,該全局資源目錄信息表至少包括兩個字段,分別為共享資源名稱和對應(yīng)的鎖管理節(jié)點。在系統(tǒng)初始化時,每一個節(jié)點中的該全局資源目錄信息表中都沒有任何記錄;當系統(tǒng)啟動運行后,一個或多個節(jié)點中的應(yīng)用進程會發(fā)起共享資源鎖申請,假設(shè)節(jié)點1中的某應(yīng)用發(fā)起共享資源A的鎖申請請求,則節(jié)點1查詢本地保存的全局資源目錄信息表,根據(jù)查詢結(jié)果,進行如下處理1)如果查詢結(jié)果表明當前該全局資源目錄信息表中沒有記錄共享資源A的對應(yīng)鎖管理節(jié)點,則由節(jié)點1向系統(tǒng)中的每一個節(jié)點(包括其自身)發(fā)送采用可靠有序傳遞的組播消息,通知系統(tǒng)中的每一個節(jié)點“節(jié)點1請求共享資源A鎖分配”;系統(tǒng)中的每一個節(jié)點根據(jù)接收的組播消息的邏輯序,確定出共享資源A的對應(yīng)鎖管理節(jié)點。如果系統(tǒng)中還沒有任何節(jié)點請求過分配共享資源A鎖,則判斷節(jié)點1為第一次申請該共享資源鎖的成員節(jié)點,因此,確認節(jié)點1為共享資源A對應(yīng)的鎖管理節(jié)點,由節(jié)點1對共享資源A進行鎖分配;同時,系統(tǒng)中的每一個節(jié)點在本地保存的全局資源目錄信息表中記錄共享資源A對應(yīng)的鎖管理節(jié)點為節(jié)點1。
由于采用了可靠有序傳遞的組播消息來通知系統(tǒng)中的每一個節(jié)點“某個節(jié)點請求某共享資源鎖分配”,即使有多個節(jié)點的應(yīng)用進程都在同一時刻或相近時刻發(fā)起同一個共享資源的鎖申請請求,系統(tǒng)中的每一個節(jié)點收到的通知消息的順序是一致的,因此確定出的第一次申請某共享資源鎖的成員節(jié)點是一致的,從確定出的某共享資源的鎖管理節(jié)點是一致的。
2)如果查詢結(jié)果表明當前該全局資源目錄信息表中已記錄有共享資源A的對應(yīng)鎖管理節(jié)點,則直接向?qū)?yīng)的鎖管理節(jié)點發(fā)送單播消息,請求分配共享資源。例如假設(shè)一段時間后,節(jié)點2中的某應(yīng)用進程發(fā)起申請共享資源A的請求,則由節(jié)點2查詢本地保存的全局資源目錄信息表,得知其對應(yīng)的管理節(jié)點為節(jié)點1,則直接向節(jié)點1發(fā)起鎖申請請求,由節(jié)點1進行鎖分配。
由于在能查詢到某共享資源的鎖管理節(jié)點時,不需要再發(fā)起組播消息,而可以直接向?qū)?yīng)的鎖管理節(jié)點發(fā)送單播消息,大大提高了系統(tǒng)的效率。
集群系統(tǒng)在運行過程中,各應(yīng)用陸續(xù)發(fā)起共享資源的鎖申請請求,根據(jù)上述方法,該集群系統(tǒng)運行一段時間后,每一個節(jié)點所存儲的全局資源目錄信息表中會存儲各應(yīng)用所申請的共享資源對應(yīng)的鎖管理節(jié)點信息。假設(shè)第一次申請共享資源A、B的鎖申請請求的成員節(jié)點為節(jié)點1,第一次申請共享資源C、D的鎖申請請求的成員節(jié)點為節(jié)點2,第一次申請共享資源E、F的鎖申請請求的成員節(jié)點為節(jié)點3,第一次申請共享資源G、H的鎖申請請求的成員節(jié)點為節(jié)點4,第一次申請共享資源I、J的鎖申請請求的成員節(jié)點為節(jié)點5,則每一個節(jié)點中存儲的全局資源目錄信息表,如下表1所示表1
實施例二通過哈希算法建立共享資源的對應(yīng)鎖管理節(jié)點。
哈希算法有多種,本發(fā)明僅要求對系統(tǒng)中每一個共享資源與系統(tǒng)中的唯一一個成員節(jié)點建立映射關(guān)系,將與各共享資源對應(yīng)的成員節(jié)點作為該共享資源鎖管理節(jié)點;本發(fā)明不對所采用的具體哈希算法進行限定。
采用哈希算法確定鎖管理節(jié)點的具體方法與實施例一基本相同,區(qū)別在于系統(tǒng)中的每一個成員節(jié)點接收到請求分配共享資源鎖的組播消息后,采用同一種哈希算法確定出對應(yīng)資源的鎖管理節(jié)點。被定出的鎖管理節(jié)點對請求的相應(yīng)共享資源進行鎖分配。
下面結(jié)合附圖,對本發(fā)明方法的具體流程進行詳細描述,參見圖1A、1B,包括如下步驟步驟S11、應(yīng)用申請某個共享資源鎖,查詢本地節(jié)點中保存的全局資源目錄信息表,通過本地節(jié)點服務(wù)進程向該共享資源的對應(yīng)鎖管理節(jié)點發(fā)起鎖申請請求;步驟S12、鎖管理節(jié)點接收鎖申請請求;步驟S13、鎖管理節(jié)點判斷該共享資源當前是否有鎖可以分配,如果有鎖可以分配,則執(zhí)行步驟S14;否則,執(zhí)行步驟S15;在該步驟中,鎖管理節(jié)點收到鎖申請請求后,根據(jù)對應(yīng)共享資源的鎖分配原則判斷是否有鎖可以分配;例如假設(shè)該共享資源最大可以同時分配5把鎖給相同或不同的應(yīng)用使用,當鎖管理節(jié)點收到對該共享資源的鎖申請請求后,判斷當前是否已分配出去了5把鎖,如果沒有,則認為該共享資源當前有鎖可以分配;否則,判斷該共享資源當前已沒有鎖可以分配;步驟S14、分配共享資源鎖給當前請求,即允許當前請求對申請打開的共享資源進行加鎖;在該步驟中,鎖管理節(jié)點給當前請求分配共享資源鎖后,還向發(fā)起鎖申請請求的成員節(jié)點返回鎖申請接受結(jié)果響應(yīng);在每一個鎖管理節(jié)點中保存鎖分配信息表,存儲已分配的鎖隊列和等待分配的鎖隊列;當鎖管理節(jié)點為當前請求分配了共享資源鎖時,將已分配鎖及發(fā)起鎖申請請求的節(jié)點信息存入到已分配的鎖隊列中保存;結(jié)束本次鎖申請流程;步驟S15、鎖管理節(jié)點將本次接收的共享資源鎖申請請求置入等待分配的鎖隊列中保存,繼續(xù)圖1B所示流程。
如圖1B所示,當某一個鎖管理節(jié)點的等待分配的鎖隊列中存儲有一個或多個請求,在等待已占用的共享資源鎖釋放時,執(zhí)行如下步驟步驟S21、鎖管理節(jié)點判斷本地保存的等待分配的鎖隊列中是否有請求已超時(系統(tǒng)會設(shè)置請求的超時時間,當請求超時時,應(yīng)取消該次請求),如果沒有請求超時,則繼續(xù)步驟S22;如果有請求已超時,則轉(zhuǎn)至步驟S24;步驟S22、判斷申請的共享資源是否有鎖釋放;如果沒有鎖釋放,則轉(zhuǎn)至步驟S21(如果等待分配的鎖隊列中僅有一個請求,則繼續(xù)判斷該請求是否已超時;如果等待分配的鎖隊列中已存儲有多個請求,則依次選擇下一個請求判斷其是否已超時);如果有鎖釋放,則執(zhí)行步驟S23;步驟S23、將已釋放的鎖分配給隊列中的該請求,還向發(fā)起該鎖申請請求的對應(yīng)成員節(jié)點返回鎖申請接受結(jié)果響應(yīng),并將已分配鎖及發(fā)起鎖申請請求的節(jié)點信息存入到已分配的鎖隊列中保存,轉(zhuǎn)至步驟S25;步驟S24、刪除等待分配的鎖隊列中已超時的鎖申請請求,并向發(fā)起該鎖申請請求的對應(yīng)成員節(jié)點返回鎖申請拒絕結(jié)果響應(yīng),繼續(xù)步驟S25;步驟S25、判斷等待分配的鎖隊列是否為空,如果隊列為空,則結(jié)束流程;否則,返回步驟S21,繼續(xù)處理隊列中等待的請求,直到所有的請求都處理完畢(或者分配請求的共享資源鎖,或者請求超時被取消)。
對于鎖釋放,流程相對簡單,當申請的共享資源使用完畢后,請求對應(yīng)的鎖管理節(jié)點釋放申請的共享資源鎖發(fā)即可。當鎖管理節(jié)點釋放一把共享資源鎖后,在本地鎖分配信息表中的已分配的鎖隊列中刪除對應(yīng)的鎖分配記錄。
為了滿足當系統(tǒng)中有成員節(jié)點失效時能盡快恢復(fù)系統(tǒng)中整個服務(wù)的數(shù)據(jù)正確性,每一個成員節(jié)點還保存自身的鎖申請信息表,存儲由本節(jié)點發(fā)起的共享資源鎖申請信息。當本節(jié)點申請的共享資源使用完畢后,請求對應(yīng)的鎖管理節(jié)點釋放申請的共享資源鎖,并刪除本地存儲的鎖申請信息表中對應(yīng)的共享資源鎖申請記錄。
以上用具體流程對本發(fā)明集群系統(tǒng)的共享資源鎖分配/釋放步驟進行了詳細描述,下面具體描述當系統(tǒng)中有成員節(jié)點失效或新成員節(jié)點加入時,系統(tǒng)進行數(shù)據(jù)恢復(fù)的具體方法。
當系統(tǒng)中有成員節(jié)點失效時,可以通過如下兩種方法為失效節(jié)點所管理的共享資源(為描述方便,稱為失效資源)重新確定新的鎖管理節(jié)點并進行數(shù)據(jù)恢復(fù)。
方法一由申請了失效資源鎖的成員節(jié)點采取可靠有序組播方式組播各自對失效資源鎖的申請狀態(tài)消息;根據(jù)消息序,將第一個發(fā)送某一失效資源鎖申請狀態(tài)消息的節(jié)點作為該失效資源的新的鎖管理節(jié)點。
仍以上述5個成員節(jié)點,具有10個共享資源的集群系統(tǒng)為例,假設(shè)成員節(jié)點1失效,由上表1可知,成員節(jié)點1是共享資源A、B的鎖管理節(jié)點,因此,共享資源A和共享資源B為失效資源,需要重新為系統(tǒng)中的共享資源A、B確定新的鎖管理節(jié)點;為此,系統(tǒng)中所有申請了失效資源A或B的成員節(jié)點采取可靠有序組播方式在整個集群系統(tǒng)中組播本節(jié)點對失效資源A或B的申請狀態(tài);假設(shè)節(jié)點2申請了共享資源C、D、A鎖;節(jié)點3申請了共享資源E、F、B鎖;節(jié)點4申請了共享資源G、H、A、B鎖;節(jié)點2、節(jié)點3和節(jié)點4都采用可靠有序組播方式發(fā)送組播消息,根據(jù)組播消息的消息序,各成員節(jié)點確定出節(jié)點2最先發(fā)送組播消息,通知其申請了共享資源A鎖;節(jié)點3在節(jié)點2之后發(fā)送組播消息,通知其申請了共享資源B鎖;節(jié)點4在節(jié)點3之后發(fā)送組播消息,通知其申請了共享資源A、B鎖;則根據(jù)本發(fā)明的上述方法,共享資源A的新的鎖管理節(jié)點為節(jié)點2;共享資源B的新的鎖管理節(jié)點為節(jié)點3。
方法二如果一個成員節(jié)點檢測到另一個成員節(jié)點失效,則采取可靠有序組播方式在整個集群系統(tǒng)中組播節(jié)點失效通知,每一個成員節(jié)點接收到節(jié)點失效通知后,采用同一種哈希算法重新確定出失效節(jié)點所管理的共享資源的新的管理節(jié)點。
當失效資源的新的鎖管理節(jié)點確定后,每個有效成員節(jié)點需要進行如下數(shù)據(jù)更新1、更新全局資源目錄信息表。
如上所述,假設(shè)共享資源A的新的鎖管理節(jié)點為節(jié)點2,共享資源B的新的鎖管理節(jié)點為節(jié)點3,則更新表1所示的全局資源目錄信息表如下表2所示表2
由上表2可知,由于成員節(jié)點1已失效,不再是系統(tǒng)中的有效成員節(jié)點,其原來管理的共享資源A、B,現(xiàn)已分別由節(jié)點2和節(jié)點3接任進行鎖管理。
2、更新鎖申請信息表如上所述,對于節(jié)點2,由于申請了共享資源C、D、A鎖,在節(jié)點1失效前,其本地存儲的申請信息表如下表3所示表3
在節(jié)點1失效后,節(jié)點2更新本地存儲的申請信息表如下表4所示表4
同理,對于節(jié)點3,由于申請了共享資源E、F、B鎖,在節(jié)點1失效前,其本地存儲的申請信息表如下表5所示表5
在節(jié)點1失效后,節(jié)點3更新本地存儲的申請信息表如下表6所示表6
同理,對于節(jié)點4,由于申請了共享資源G、H、A、B鎖,在節(jié)點1失效前,其本地存儲的申請信息表如下表7所示表7
在節(jié)點1失效后,節(jié)點4更新本地存儲的申請信息表如下表8所示表8
3、更新本地鎖分配信息表假設(shè)成員節(jié)點1失效前申請了共享資源A、B、C、G;根據(jù)上述舉例,節(jié)點2在節(jié)點1失效前存儲的本地鎖分配信息表(僅以已分配的鎖隊列為例)如下表9所示表9
節(jié)點1失效后,節(jié)點2需要釋放失效節(jié)點1申請的鎖(即釋放共享資源C的第2把鎖),同時,由于節(jié)點2已成為共享資源A的新的鎖管理節(jié)點,而根據(jù)上述舉例,節(jié)點2和節(jié)點4都申請了失效資源A鎖,這樣,節(jié)點2更新后的本地鎖分配信息表如下表10所示表10
對于節(jié)點3,在節(jié)點1失效前存儲的本地鎖分配信息表(僅以已分配的鎖隊列為例)如下表11所示表11
節(jié)點1失效后,由于節(jié)點3已成為共享資源B的新的鎖管理節(jié)點,而根據(jù)上述舉例,節(jié)點3和節(jié)點4都申請了失效資源B鎖,這樣,節(jié)點3更新后的本地鎖分配信息表如下表12所示表12
同理,對于節(jié)點4,節(jié)點1失效前存儲的本地鎖分配信息表如下表13所示表13
節(jié)點1失效后,節(jié)點4需要釋放失效節(jié)點1申請的鎖(即釋放共享資源G的第2把鎖),這樣,節(jié)點4更新后的本地鎖分配信息表如下表14所示表14
這樣,每個成員節(jié)點通過上述三個表的更新,完成整個系統(tǒng)數(shù)據(jù)的恢復(fù)以及實現(xiàn)各節(jié)點相關(guān)數(shù)據(jù)的一致性。
當系統(tǒng)中有新成員節(jié)點加入時,該新成員節(jié)點可以從其它已正常運行的有效成員節(jié)點獲取得到系統(tǒng)當前的全局資源目錄信息表。例如,該新成員節(jié)點發(fā)送組播消息,請求獲取全局資源目錄信息表,其它已經(jīng)正常運行的有效成員節(jié)點將自己的全局資源目錄信息表發(fā)送給該新成員節(jié)點,該新成員節(jié)點即可獲得系統(tǒng)當前的全局資源目錄信息表,如果該新成員節(jié)點接收到多份全局資源目錄信息表,該新成員節(jié)點可以存儲其中一份;或者該新成員節(jié)點可以發(fā)送組播消息,請求獲取其它成員節(jié)點狀態(tài)信息,并根據(jù)獲取的其它成員節(jié)點狀態(tài)信息,從存活時間最長的節(jié)點中獲取全局資源目錄信息表。
根據(jù)本發(fā)明提供的上述共享資源鎖分配方法,本發(fā)明提供相對應(yīng)的計算機,每一個計算機作為計算機集群系統(tǒng)中的一個成員節(jié)點,如圖2所示,在每一個計算機中包括第一存儲模塊11,存儲系統(tǒng)中的共享資源及其對應(yīng)的鎖管理節(jié)點的全局資源目錄信息表;第一功能模塊12,用于當某一應(yīng)用請求申請某一共享資源鎖時,查詢所述第一存儲模塊11中保存的全局資源目錄信息表,如果所述全局資源目錄信息表中沒有記錄該共享資源對應(yīng)的鎖管理節(jié)點信息,則發(fā)送可靠有序傳遞的組播消息給系統(tǒng)中的全部成員節(jié)點;如果所述全局資源目錄信息表中記錄有該共享資源對應(yīng)的鎖管理節(jié)點信息,則向?qū)?yīng)鎖管理節(jié)點發(fā)起鎖申請請求;鎖管理節(jié)點確定模塊13,接收所述組播消息,確定出請求的共享資源對應(yīng)的鎖管理節(jié)點,并判斷本節(jié)點是否為對應(yīng)的鎖管理節(jié)點;當判斷出本節(jié)點為對應(yīng)的鎖管理節(jié)點時,發(fā)送通知消息給本節(jié)點的共享資源鎖管理模塊16;共享資源鎖管理模塊16,接收鎖申請或釋放請求,對其所管理的一個或多個共享資源鎖實現(xiàn)分配與釋放操作。
還包括第二存儲模塊14,存儲由本節(jié)點發(fā)起的共享資源鎖申請信息;第二功能模塊15,當本節(jié)點申請的共享資源使用完畢后,請求對應(yīng)的鎖管理節(jié)點釋放申請的共享資源鎖,并刪除第二存儲模塊14中存儲的鎖申請信息表中對應(yīng)的共享資源申請記錄;還包括第三存儲模塊17,存儲已分配的鎖隊列和等待分配的鎖隊列;當共享資源鎖管理模塊16接收到鎖申請請求后,如果根據(jù)對應(yīng)共享資源的鎖分配原則判斷出當前有鎖分配時,分配請求的共享資源鎖,并將已分配鎖及發(fā)起鎖申請請求的節(jié)點信息存入到已分配的鎖隊列中;如果判斷出當前沒有鎖分配時,將該請求置入等待分配的鎖隊列中;直到該共享資源有鎖釋放且請求未超時時,再將已釋放的鎖分配給該請求。
由本發(fā)明提供的上述多臺計算機組成計算機集群系統(tǒng),從而實現(xiàn)本發(fā)明提供的方法。
綜上所述,本發(fā)明通過在計算機集群系統(tǒng)中,設(shè)置兩個或以上成員節(jié)點作為鎖管理節(jié)點,完成所管理的一個或多個共享資源的鎖分配/釋放操作,克服了現(xiàn)有技術(shù)中由單一節(jié)點來完成集群中所有資源的鎖分配/釋放所帶有的性能瓶頸問題。
本發(fā)明可以通過哈希算法等方式建立起共享資源與成員節(jié)點的映射關(guān)系,確定出各共享資源的鎖管理節(jié)點,從而達到平衡分布各共享資源的鎖管理節(jié)點,實現(xiàn)負載平衡;或者采用將第一次申請某共享資源鎖的成員節(jié)點作為該共享資源的鎖管理節(jié)點的方式來確定出共享資源和鎖管理節(jié)點的對應(yīng)關(guān)系,由于集群內(nèi)應(yīng)用對鎖服務(wù)請求的隨機性,因此,各共享資源的鎖管理節(jié)點將隨機分布在各成員節(jié)點上,同樣能達到負載平衡的目的。
本發(fā)明采用唯一節(jié)點作為一個共享資源的鎖管理節(jié)點,不設(shè)置備份節(jié)點,鎖申請信息僅在申請及響應(yīng)消息流經(jīng)本地服務(wù)進程的過程中在本地建立副本,因此,系統(tǒng)響應(yīng)速度快;克服了現(xiàn)有技術(shù)采用備份管理節(jié)點方式時,對于每次鎖操作,鎖管理節(jié)點(主節(jié)點)必須與備份節(jié)點(副節(jié)點)同步后才能返回響應(yīng)消息,系統(tǒng)響應(yīng)速度慢的問題。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種計算機集群系統(tǒng)中共享資源鎖分配方法,其特征在于,包括將系統(tǒng)中一個以上的成員節(jié)點作為系統(tǒng)中共享資源的鎖管理節(jié)點,每個共享資源僅對應(yīng)一個鎖管理節(jié)點;當某一應(yīng)用請求申請或釋放共享資源鎖時,向該共享資源對應(yīng)的鎖管理節(jié)點發(fā)送請求,由對應(yīng)的鎖管理節(jié)點完成鎖申請分配或釋放。
2.如權(quán)利要求1所述的方法,其特征在于,系統(tǒng)中的每一個成員節(jié)點將第一次申請某共享資源鎖的成員節(jié)點作為該共享資源的鎖管理節(jié)點。
3.如權(quán)利要求2所述的方法,其特征在于,在每個成員節(jié)點中保存全局資源目錄信息表,存儲系統(tǒng)中的共享資源及其對應(yīng)的鎖管理節(jié)點的對應(yīng)關(guān)系;當某一應(yīng)用請求申請或釋放某一共享資源鎖時,本地節(jié)點查詢自身保存的所述全局資源目錄信息表,向查詢出的對應(yīng)鎖管理節(jié)點發(fā)起鎖申請或釋放請求。
4.如權(quán)利要求3所述的方法,其特征在于,當查詢到所述全局資源目錄信息表中沒有記錄請求的共享資源對應(yīng)的鎖管理節(jié)點信息時,所述本地節(jié)點向系統(tǒng)中的每個成員節(jié)點發(fā)送可靠有序組播消息,請求確定該共享資源對應(yīng)的鎖管理節(jié)點;每個成員節(jié)點根據(jù)接收的組播消息邏輯序,確定出該共享資源對應(yīng)的鎖管理節(jié)點;并由確定出的對應(yīng)鎖管理節(jié)點進行鎖分配。
5.如權(quán)利要求3所述的方法,其特征在于,當所述全局資源目錄信息表中沒有記錄請求的共享資源對應(yīng)的鎖管理節(jié)點信息時,所述本地節(jié)點向系統(tǒng)中的每個成員節(jié)點發(fā)送組播消息,請求確定該共享資源對應(yīng)的鎖管理節(jié)點;每個成員節(jié)點接收到所述組播消息后,采用同一種哈希算法確定出該共享資源對應(yīng)的鎖管理節(jié)點,并由確定出的對應(yīng)鎖管理節(jié)點進行鎖分配。
6.如權(quán)利要求1-5任意權(quán)項所述的方法,其特征在于,所述鎖管理節(jié)點收到鎖申請請求后,根據(jù)對應(yīng)共享資源的鎖分配原則判斷出可以進行鎖分配時,允許當前請求對該共享資源進行加鎖。
7.如權(quán)利要求6所述的方法,其特征在于,在每一個鎖管理節(jié)點中保存鎖分配信息表,存儲已分配的鎖隊列和等待分配的鎖隊列;當鎖管理節(jié)點收到鎖申請請求并根據(jù)對應(yīng)共享資源的鎖分配原則判斷出當前有鎖分配時,分配請求的共享資源鎖,并將已分配鎖及發(fā)起鎖申請請求的節(jié)點信息存入到已分配的鎖隊列中;當判斷出當前沒有鎖分配時,將該請求置入等待分配的鎖隊列中;直到該共享資源有鎖釋放且請求未超時,再將已釋放的鎖分配給該請求。
8.如權(quán)利要求1-5任意權(quán)項所述的方法,其特征在于,在系統(tǒng)成員節(jié)點中保存鎖申請信息表,存儲由本節(jié)點發(fā)起的共享資源鎖申請信息;當申請的共享資源使用完畢后,請求對應(yīng)的鎖管理節(jié)點釋放申請的共享資源鎖,并刪除本地鎖申請信息表中對應(yīng)的鎖申請記錄。
9.如權(quán)利要求8所述的方法,其特征在于,當系統(tǒng)中有成員節(jié)點失效時,執(zhí)行下列步驟為系統(tǒng)中失效節(jié)點所管理的失效資源重新確定新的鎖管理節(jié)點;每一個成員節(jié)點檢查本地保存的鎖分配信息表中是否有失效節(jié)點申請的共享資源鎖,若有,則釋放失效節(jié)點申請的共享資源鎖,并更新本地保存的鎖分配信息表;每一個成員節(jié)點根據(jù)確定出的新的鎖管理節(jié)點更新本地保存的全局目錄信息表和鎖申請信息表。
10.如權(quán)利要求9所述的方法,其特征在于,所述為失效資源重新確定新的鎖管理節(jié)點,具體方法包括由申請了失效資源鎖的成員節(jié)點采取可靠有序組播方式組播各自對所述失效資源鎖的申請狀態(tài)消息;各成員節(jié)點根據(jù)所述申請狀態(tài)消息的消息序,將第一個發(fā)送某一失效資源鎖申請狀態(tài)消息的節(jié)點作為該失效資源的新的鎖管理節(jié)點。
11.如權(quán)利要求10所述的方法,其特征在于,所述失效資源的新的鎖管理節(jié)點根據(jù)所述各成員節(jié)點發(fā)送的失效資源鎖的申請狀態(tài)消息,在本地恢復(fù)該失效資源的鎖分配信息。
12.如權(quán)利要求9所述的方法,其特征在于,所述系統(tǒng)為失效資源重新確定新的鎖管理節(jié)點,具體方法包括檢測到某一成員節(jié)點失效的成員節(jié)點采取可靠有序組播方式在整個集群系統(tǒng)中組播節(jié)點失效通知,每一個成員節(jié)點接收到所述節(jié)點失效通知后,采用同一種哈希算法重新確定出失效節(jié)點所管理的共享資源的新的管理節(jié)點。
13.如權(quán)利要求8所述的方法,其特征在于,當系統(tǒng)中有新成員節(jié)點加入時,執(zhí)行下列步驟所述新成員節(jié)點從其它有效成員節(jié)點中獲取所述全局資源目錄信息表并存儲一份在本地。
14.一種計算機,應(yīng)用于計算機集群系統(tǒng),所述計算機作為所述系統(tǒng)的一個成員節(jié)點;其特征在于,在所述計算機中包括第一存儲模塊,存儲系統(tǒng)中的共享資源及其對應(yīng)的鎖管理節(jié)點的全局資源目錄信息表;第一功能模塊,用于當某一應(yīng)用請求申請某一共享資源鎖時,查詢所述第一存儲模塊中保存的全局資源目錄信息表,如果所述全局資源目錄信息表中沒有記錄該共享資源對應(yīng)的鎖管理節(jié)點信息,則發(fā)送可靠有序傳遞的組播消息給系統(tǒng)中的全部成員節(jié)點,請求確定出對應(yīng)的鎖管理節(jié)點;如果所述全局資源目錄信息表中記錄有該共享資源對應(yīng)的鎖管理節(jié)點信息,則向?qū)?yīng)鎖管理節(jié)點發(fā)起鎖申請請求;鎖管理節(jié)點確定模塊,接收所述組播消息,確定出請求的共享資源對應(yīng)的鎖管理節(jié)點,并判斷本節(jié)點是否為對應(yīng)的鎖管理節(jié)點;當判斷出本節(jié)點為對應(yīng)的鎖管理節(jié)點時,發(fā)送通知消息給本節(jié)點的共享資源鎖管理模塊;共享資源鎖管理模塊,接收鎖申請或釋放請求,對其所管理的一個或多個共享資源鎖實現(xiàn)分配與釋放操作。
15.如權(quán)利要求14所述的計算機,其特征在于,還包括第二存儲模塊,存儲由本節(jié)點發(fā)起的共享資源鎖申請信息;第二功能模塊,當本節(jié)點申請的共享資源使用完畢后,請求對應(yīng)的鎖管理節(jié)點釋放申請的共享資源鎖,并刪除第二存儲模塊中存儲的鎖申請信息表中對應(yīng)的共享資源申請記錄。
16.如權(quán)利要求14或15所述的計算機,其特征在于,還包括第三存儲模塊,存儲已分配的鎖隊列和等待分配的鎖隊列;當共享資源鎖管理模塊接收到鎖申請請求后,如果根據(jù)對應(yīng)共享資源的鎖分配原則判斷出當前有鎖分配時,則分配請求的共享資源鎖,并將已分配鎖及發(fā)起鎖申請請求的節(jié)點信息存入到已分配的鎖隊列中;如果判斷出當前沒有鎖分配時,則將該請求置入等待分配的鎖隊列中,直到該共享資源有鎖釋放且請求未超時時,再將已釋放的鎖分配給該請求。
17.一種計算機集群系統(tǒng),其特征在于,包括如權(quán)利要求14所述的多臺計算機。
全文摘要
本發(fā)明公開了一種計算機集群系統(tǒng)中共享資源鎖分配方法,包括將系統(tǒng)中一個以上的成員節(jié)點作為系統(tǒng)中全部共享資源的鎖管理節(jié)點,且每個共享資源僅對應(yīng)一個鎖管理節(jié)點;當某一應(yīng)用請求申請或釋放共享資源鎖時,向該共享資源對應(yīng)的鎖管理節(jié)點發(fā)送請求,由對應(yīng)的鎖管理節(jié)點完成鎖申請分配或釋放。本發(fā)明還公開了相應(yīng)的計算機集群系統(tǒng)結(jié)構(gòu)。采用本發(fā)明可實現(xiàn)集群中高可用鎖服務(wù),可擴展性強且能實現(xiàn)負載平衡。
文檔編號G06F9/46GK1945539SQ20061014098
公開日2007年4月11日 申請日期2006年10月19日 優(yōu)先權(quán)日2006年10月19日
發(fā)明者吳俊敏, 張少林 申請人:華為技術(shù)有限公司, 中國科學(xué)技術(shù)大學(xué)