確保高效分布的緩存一致性的全集群資源鎖定機(jī)制和通知機(jī)制。在一個(gè)說(shuō)明性實(shí)施例中,這種集群能力由集群感知的高級(jí)交互執(zhí)行(AIX?)來(lái)提供,其是從Internat1nal Business MachinesCorporat1n of Armonk, New York可得到的基于開(kāi)放標(biāo)準(zhǔn)的UNIX?操作系統(tǒng),其被增強(qiáng)以提供用于促進(jìn)本文根據(jù)一個(gè)或多個(gè)說(shuō)明性實(shí)施例描述的操作和功能的邏輯。
[0048]如圖1中進(jìn)一步圖示的,節(jié)點(diǎn)102通過(guò)一個(gè)或多個(gè)有線或無(wú)線的公共或私有網(wǎng)絡(luò)104耦合,以準(zhǔn)許在配置為作為集群操作的不同節(jié)點(diǎn)102之間共享硬件資源110和軟件資源120中的至少一些。(多個(gè))網(wǎng)絡(luò)104能夠包括局域網(wǎng)或者諸如因特網(wǎng)的廣域網(wǎng)以及在個(gè)體節(jié)點(diǎn)102之間的私有點(diǎn)對(duì)點(diǎn)連接。
[0049]集群架構(gòu)的一個(gè)重要功能是使得共享的集群硬件和軟件資源高度可用。作為一個(gè)示例,如果集群系統(tǒng)100內(nèi)的個(gè)體節(jié)點(diǎn)102失效,則失效的節(jié)點(diǎn)102上的一個(gè)或多個(gè)應(yīng)用126將由操作系統(tǒng)122自動(dòng)地迀移到集群系統(tǒng)100中的一個(gè)或多個(gè)其他節(jié)點(diǎn)102。因此,在短暫中斷之后,由失效的節(jié)點(diǎn)102提供的服務(wù)將繼續(xù)可用。為了應(yīng)用126或其他資源將是高度可用的,集群內(nèi)的多個(gè)節(jié)點(diǎn)102通常被配置為運(yùn)行該應(yīng)用126或資源,但是在時(shí)間上的任何單個(gè)瞬間,通常至多僅一個(gè)節(jié)點(diǎn)102管理該共享應(yīng)用126。
[0050]本領(lǐng)域的普通技術(shù)人員將理解,諸如在圖1中描繪的示例性數(shù)據(jù)處理環(huán)境的集群系統(tǒng)中采用的硬件和軟件可以變化。例如,集群系統(tǒng)能夠包括另外的或者更少的節(jié)點(diǎn)、一個(gè)或多個(gè)客戶端系統(tǒng)、和/或未明確示出的其他連接。圖1中所示的一般化集群架構(gòu)不旨在暗示對(duì)要求保護(hù)的本發(fā)明的任何架構(gòu)性限制。
[0051]為了準(zhǔn)許在數(shù)據(jù)處理環(huán)境100中的某些節(jié)點(diǎn)102之間共享資源,同時(shí)防止由其他節(jié)點(diǎn)102、客戶端或其他設(shè)備對(duì)共享資源的未授權(quán)的接入,集群配置數(shù)據(jù)庫(kù)優(yōu)選地定義了什么樣的節(jié)點(diǎn)102被授權(quán)以形成和/或加入集群,并且因此訪問(wèn)該集群的共享資源。在圖2中描繪的一個(gè)優(yōu)選實(shí)施例中,集群配置數(shù)據(jù)庫(kù)200駐留在主機(jī)節(jié)點(diǎn)102的可信共享數(shù)據(jù)存儲(chǔ)設(shè)備114上,如圖2中由硬盤(pán)202表示。集群系統(tǒng)100被構(gòu)建和配置而使得可信共享數(shù)據(jù)存儲(chǔ)設(shè)備114僅對(duì)被授權(quán)為集群的成員的節(jié)點(diǎn)102是可訪問(wèn)的(不論在訪問(wèn)時(shí)節(jié)點(diǎn)102是否實(shí)際上是該集群的成員)。
[0052]硬盤(pán)202包括引導(dǎo)區(qū)204,引導(dǎo)區(qū)204包含在操作系統(tǒng)122中的一個(gè)操作系統(tǒng)之下引導(dǎo)主機(jī)節(jié)點(diǎn)102所需要的信息。根據(jù)優(yōu)選實(shí)施例,引導(dǎo)區(qū)204包括集群字段206,集群字段206包含對(duì)集群配置數(shù)據(jù)庫(kù)200的指針,集群配置數(shù)據(jù)庫(kù)200如所示出的優(yōu)選地駐留在相同的可信共享數(shù)據(jù)存儲(chǔ)設(shè)備114上。至少,集群配置數(shù)據(jù)庫(kù)200識(shí)別哪些節(jié)點(diǎn)102被授權(quán)加入集群并且因此訪問(wèn)該集群的共享集群資源。
[0053]現(xiàn)在參考圖3,圖示了根據(jù)一個(gè)實(shí)施例的示例性集群配置數(shù)據(jù)庫(kù)200。應(yīng)當(dāng)理解,圖3中的描繪僅出于說(shuō)明的目的,并且不意在聲明或暗示對(duì)必須實(shí)施說(shuō)明性實(shí)施例的方式的任何限制??梢栽诓幻撾x說(shuō)明性實(shí)施例的精神和范圍的情況下進(jìn)行對(duì)集群配置數(shù)據(jù)庫(kù)200的許多修改。
[0054]在所描繪的實(shí)施例中,集群配置數(shù)據(jù)庫(kù)200包括多個(gè)數(shù)據(jù)記錄302,每個(gè)數(shù)據(jù)記錄302都包括有效載荷304和校驗(yàn)和字段306,校驗(yàn)和字段306存儲(chǔ)數(shù)據(jù)記錄的有效載荷304的校驗(yàn)和。每個(gè)數(shù)據(jù)記錄302的有效載荷304包括用于存儲(chǔ)節(jié)點(diǎn)102中的相應(yīng)一個(gè)節(jié)點(diǎn)102的UUID (通用唯一標(biāo)識(shí)符)的節(jié)點(diǎn)UUID字段310。UUID優(yōu)選地是由節(jié)點(diǎn)102自己指配的,并且符合例如在ISO/IEC 11578中描述的格式。數(shù)據(jù)記錄302另外包括記錄節(jié)點(diǎn)102的臨時(shí)標(biāo)識(shí)符的節(jié)點(diǎn)臨時(shí)ID字段312,諸如指配給節(jié)點(diǎn)102的主機(jī)名或因特網(wǎng)協(xié)議(IP)地址。數(shù)據(jù)記錄302可以可選地包括通常用附圖標(biāo)號(hào)314示出的一個(gè)或多個(gè)附加節(jié)點(diǎn)元數(shù)據(jù)字段,其保持關(guān)于節(jié)點(diǎn)102的附加元數(shù)據(jù)。
[0055]如上面注意到的,由集群配置數(shù)據(jù)庫(kù)200定義的集群內(nèi)的節(jié)點(diǎn)102共享軟件資源120和硬件資源110,包括數(shù)據(jù)存儲(chǔ)設(shè)備114中的至少一些數(shù)據(jù)存儲(chǔ)設(shè)備。將由集群的其他節(jié)點(diǎn)102共享的、節(jié)點(diǎn)102的(多個(gè))數(shù)據(jù)存儲(chǔ)設(shè)備114由記錄在數(shù)據(jù)記錄302的UDID字段316中的通用磁盤(pán)標(biāo)識(shí)符(UDID)(或UUID)來(lái)標(biāo)識(shí)。在將共享數(shù)據(jù)存儲(chǔ)設(shè)備114駐留于其上的主機(jī)節(jié)點(diǎn)102添加至集群配置時(shí),填充數(shù)據(jù)記錄302的UDID字段316。
[0056]與UDID字段316相關(guān)聯(lián)的是磁盤(pán)名稱字段318,磁盤(pán)名稱字段318存儲(chǔ)用于在UDID字段316中引用的共享數(shù)據(jù)存儲(chǔ)設(shè)備114中的每個(gè)共享數(shù)據(jù)存儲(chǔ)設(shè)備的對(duì)應(yīng)設(shè)備名稱。如將理解的,諸如操作系統(tǒng)114的軟件傳統(tǒng)上通過(guò)各種名稱來(lái)引用數(shù)據(jù)存儲(chǔ)設(shè)備,諸如由UNIX?用來(lái)指代磁盤(pán)的主要號(hào)碼和次要號(hào)碼的組合。然而,在集群環(huán)境中,在節(jié)點(diǎn)102之間的軟件資源和硬件資源的迀移受到由不同節(jié)點(diǎn)102使用不一致的資源標(biāo)識(shí)符來(lái)標(biāo)識(shí)同一資源的妨礙。因此,集群配置數(shù)據(jù)庫(kù)200優(yōu)選地包括對(duì)用于共享數(shù)據(jù)存儲(chǔ)設(shè)備114的唯一名稱的生成的支持。在所描繪的實(shí)施例中,這種支持包括預(yù)留前綴緩沖器330,預(yù)留前綴緩沖器330保持共享數(shù)據(jù)存儲(chǔ)設(shè)備114的名稱的預(yù)留前綴。此外,集群配置數(shù)據(jù)庫(kù)200包括命名計(jì)數(shù)器340,命名計(jì)數(shù)器340單調(diào)地前進(jìn)(即,遞增或遞減),以確保設(shè)備名稱在集群配置數(shù)據(jù)庫(kù)200的壽命期間從不重復(fù)。
[0057]當(dāng)經(jīng)由集群事件服務(wù)向集群中的其他節(jié)點(diǎn)或者向托管用于集群的共享資源的集中式服務(wù)器發(fā)送全集群的事件通知時(shí),可以通過(guò)說(shuō)明性實(shí)施例的機(jī)制來(lái)利用節(jié)點(diǎn)和共享資源的UUID和/或UDID0集群事件服務(wù)可以是用于全集群通信的任何機(jī)制,全集群通信提供可靠(即,保證消息遞送)和同步(消息發(fā)布操作沒(méi)有完成直至消息被遞送)的消息收發(fā)能力,例如,自主健康顧問(wèn)文件系統(tǒng)(AHAFS)等。
[0058]如上面所提到的,當(dāng)節(jié)點(diǎn)獲得對(duì)共享資源的全集群鎖定,并且對(duì)該共享資源的本地緩存副本上的共享資源的執(zhí)行緩存的寫(xiě)入時(shí),該節(jié)點(diǎn)向該集群中的其他節(jié)點(diǎn)或者向集中式服務(wù)器或者二者傳輸出事件通知,向集群的節(jié)點(diǎn)通知共享資源已經(jīng)被改變,并且因此該共享資源的任何本地副本或者甚至源副本對(duì)這些其他節(jié)點(diǎn)都是陳舊的。這個(gè)事件通知可以指定,例如,已經(jīng)修改了該共享資源的節(jié)點(diǎn)的標(biāo)識(shí)符、該共享資源的標(biāo)識(shí)符、以及陳舊指示符,諸如時(shí)間戳、用于每個(gè)資源的單調(diào)增加的版本號(hào)等。如果使用版本號(hào),則將資源的緩存副本的版本號(hào)與事件通知中的版本號(hào)的比較能夠被用來(lái)確定該資源的緩存的副本是否是陳舊的。如將在下文中詳細(xì)描述的,這些事件通知被存儲(chǔ)在一個(gè)或多個(gè)改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)中,用于以后在節(jié)點(diǎn)希望通過(guò)打開(kāi)通向共享資源的路徑來(lái)訪問(wèn)共享資源時(shí)使用。
[0059]圖4是圖示了根據(jù)一個(gè)說(shuō)明性實(shí)施例的用于執(zhí)行對(duì)共享資源的改變并且生成事件通知的操作的示例框圖。如圖4中所示出的,提供了諸如服務(wù)器、客戶端計(jì)算設(shè)備等的計(jì)算設(shè)備410-416 (本文稱為節(jié)點(diǎn)410-416)的集群400,其被配置為以如先前在上面描述的方式作為關(guān)于可靠性和共享資源的集群進(jìn)行操作。根據(jù)一個(gè)說(shuō)明性實(shí)施例,節(jié)點(diǎn)410-416中的每個(gè)節(jié)點(diǎn)包括存儲(chǔ)在節(jié)點(diǎn)410-416的本地存儲(chǔ)器中的改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)440-446。節(jié)點(diǎn)410-416中的每個(gè)節(jié)點(diǎn)進(jìn)一步包括本地緩存存儲(chǔ)器450-456,本地緩存存儲(chǔ)器450-456用于緩存共享資源,以用于對(duì)共享資源的本地訪問(wèn)。這些共享資源可以包括由集群400的各種節(jié)點(diǎn)410-416共享的文件、數(shù)據(jù)結(jié)構(gòu)等,使得這些節(jié)點(diǎn)410-416中的任何節(jié)點(diǎn)可以執(zhí)行從/向這些共享資源的讀取/寫(xiě)入。共享資源可以被存儲(chǔ)在網(wǎng)絡(luò)附接的存貯器430中,可以駐留在節(jié)點(diǎn)410-416中的一個(gè)或多個(gè)節(jié)點(diǎn)中,提供在可以被配置為用于集群400的控制服務(wù)器的集中式服務(wù)器中等,例如,節(jié)點(diǎn)416可以是用于集群400的中央集群控制服務(wù)器。
[0060]當(dāng)諸如節(jié)點(diǎn)410的節(jié)點(diǎn)希望寫(xiě)入到諸如存儲(chǔ)在存儲(chǔ)系統(tǒng)430中的文件或數(shù)據(jù)結(jié)構(gòu)的共享資源時(shí),節(jié)點(diǎn)410通過(guò)執(zhí)行對(duì)本地緩存450中的共享資源的本地副本的寫(xiě)入來(lái)將寫(xiě)入緩存在本地緩存中。也就是說(shuō),使用節(jié)點(diǎn)410作為示例,節(jié)點(diǎn)410使用本領(lǐng)域中一般已知的任何已知的集群資源鎖定機(jī)制來(lái)獲得對(duì)資源的讀取鎖定,讀取共享資源并且將共享資源的副本存儲(chǔ)在本地緩存450中。此后,節(jié)點(diǎn)410可以獲得對(duì)共享資源的全集群寫(xiě)入鎖定,并且對(duì)本地緩存450中的共享資源的本地緩存副本執(zhí)行讀取/寫(xiě)入輸入/輸出(I/O)操作,以由此將對(duì)共享資源的寫(xiě)入緩存在本地緩存450中。
[0061]根據(jù)說(shuō)明性實(shí)施例的機(jī)制,當(dāng)節(jié)點(diǎn)410執(zhí)行對(duì)其本地緩存450中的共享資源的寫(xiě)入操作時(shí),節(jié)點(diǎn)410向集群400中的其他節(jié)點(diǎn)412-416傳輸集群事件通知。這些集群事件通知是被傳輸?shù)狡渌?jié)點(diǎn)412-416的小的大小的數(shù)據(jù)報(bào),包括指示以下各項(xiàng)的最小量的信息:(1)被寫(xiě)入的共享資源;(2)寫(xiě)入共享資源的節(jié)點(diǎn),例如,這個(gè)示例中的節(jié)點(diǎn)410;以及
(3)陳舊指示符,諸如時(shí)間戳或版本標(biāo)識(shí)符,其可以用于識(shí)別哪些事件通知、以及共享資源的哪些版本是最近的。這些事件通知可以采取許多不同的形式,但是在一個(gè)說(shuō)明性實(shí)施例中,事件通知可以包括陳舊指示符、共享資源UUID或UDID、以及執(zhí)行了共享資源的寫(xiě)入的節(jié)點(diǎn)的UUID。用于這樣的事件通知的一個(gè)示例格式可以具有類型{timestamp:FileUUID:SourceNodeUUID}。
[0062]當(dāng)集群400的節(jié)點(diǎn)412-416接收到集群事件通知消息時(shí),向節(jié)點(diǎn)412-416的本地改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)442-446發(fā)布對(duì)應(yīng)的改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)條目。應(yīng)當(dāng)理解,雖然圖4圖示了單個(gè)本地改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)440-446被提供在每個(gè)節(jié)點(diǎn)410-416中,但是說(shuō)明性實(shí)施例不限于此。確切地說(shuō),對(duì)于對(duì)應(yīng)節(jié)點(diǎn)的用戶中的每個(gè)用戶,可以存在單獨(dú)的改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)440-446,能夠由節(jié)點(diǎn)410-416共享的每個(gè)共享資源,等等。因此,在一些情況下,當(dāng)生成與接收到的集群事件通知相對(duì)應(yīng)的改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)條目時(shí),節(jié)點(diǎn)410-416首先可以諸如基于與集群事件通知相關(guān)聯(lián)的共享資源的UUID,來(lái)識(shí)別哪個(gè)改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)來(lái)生成該事件。
[0063]改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)以適用于特定實(shí)施方式的任何方式,例如,以基于與集群事件相關(guān)聯(lián)的時(shí)間戳的時(shí)間順序、以接收的順序、根據(jù)共享資源或者發(fā)送集群事件通知的資源節(jié)點(diǎn)的UUID來(lái)組織、等等的方式,來(lái)存儲(chǔ)用于集群事件通知的條目。如此后將關(guān)于圖5所描述的,以允許用于找到改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)中的匹配條目的對(duì)改變?nèi)罩緮?shù)據(jù)結(jié)構(gòu)的快速搜索的方式來(lái)存儲(chǔ)條目。
[006