虛擬機高可用性的制作方法
【專利摘要】本發(fā)明涉及管理虛擬機的高可用性的方法和裝置。尤其,本發(fā)明涉及在主虛擬機上的應(yīng)用故障的情況下,管理備份虛擬機的基于檢驗點高可用性的方法和裝置。本文描述了用于故障監(jiān)視和修復(fù)的方法、系統(tǒng)、計算機程序產(chǎn)品和計算機程序,包括:提供第一虛擬機的應(yīng)用的第一副本;在定期檢驗點上存儲來自執(zhí)行的第一應(yīng)用的狀態(tài)信息;對于故障狀況監(jiān)視實時狀態(tài)信息;根據(jù)故障點的狀態(tài)信息生成中斷;根據(jù)中斷,提供從檢驗點開始執(zhí)行的應(yīng)用的第二副本;在故障點之前對第二副本的操作環(huán)境作第一次改變;以及開始執(zhí)行該應(yīng)用的第二副本。
【專利說明】虛擬機高可用性
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及管理虛擬機的高可用性的方法和裝置。尤其,本發(fā)明涉及在主虛擬機上的應(yīng)用故障的情況下,管理備份虛擬機的基于檢驗點高可用性的方法和裝置。
【背景技術(shù)】
[0002]計算通常被認為依據(jù)應(yīng)用和支持平臺。
[0003]支持平臺通常包括處理器內(nèi)核、輸入/輸出、存儲器和固定存儲的硬件基礎(chǔ)設(shè)施,它們的組合支持操作系統(tǒng),操作系統(tǒng)又支持應(yīng)用。
[0004]應(yīng)用通常是幾乎只依賴于內(nèi)核對象文件和相關(guān)資源文件的自含式邏輯包。隨著計算可變成現(xiàn)代企業(yè)的一部分,應(yīng)用變成共同依賴于其他應(yīng)用的存在,使得應(yīng)用的必要環(huán)境不僅包括底層操作系統(tǒng)和支持硬件平臺,而且包括其他關(guān)鍵應(yīng)用。這樣的關(guān)鍵應(yīng)用包括應(yīng)用服務(wù)器、數(shù)據(jù)庫管理服務(wù)器、協(xié)作服務(wù)器和常稱為中間件的通信邏輯??紤]應(yīng)用的復(fù)雜性和平臺互通性,在單個硬件平臺中執(zhí)行的應(yīng)用的不同組合可以展示不同程度的性能和穩(wěn)定性。
[0005]作為一種技術(shù)的虛擬化旨在支持平臺與正在執(zhí)行應(yīng)用之間插入一個層。從業(yè)務(wù)連續(xù)性和災(zāi)難恢復(fù)的角度來看,虛擬化提供了環(huán)境可移植性的先天優(yōu)勢。具體來說,移動由許多不同應(yīng)用構(gòu)成的整個環(huán)境就是將虛擬映像從一個支持硬件平臺移動到另一個支持事件平臺的事情。進一步,更強大的計算環(huán)境可以支持多個不同虛擬映像的共存,始終保持映像之間的虛擬分離。因此,一個虛擬映像中的故障狀況不能損害相同硬件平臺中的其他共同執(zhí)行虛擬映像的完整性。
[0006]在現(xiàn)有技術(shù)中稱為“管理程序”的虛擬機監(jiān)視器管理每個虛擬映像與硬件平臺提供的底層資源之間的交互。關(guān)于這一點,裸機管理程序直接執(zhí)行在硬件平臺上,非常像操作系統(tǒng)直接執(zhí)行在硬件上。相比之下,托管的管理程序執(zhí)行在主機操作系統(tǒng)內(nèi)。在任一種情況下,管理程序可以支持稱為虛擬機(VM)映像的不同“賓客操作系統(tǒng)映像”的操作。VM映像的數(shù)量只受保持VM映像的VM容器或硬件平臺本身的處理資源限制。
[0007]虛擬化已被證明特別可用于對于不同類型的應(yīng)用需要單獨計算環(huán)境同時受限于單個硬件平臺的那些終端用戶。例如,眾所周知,對于原產(chǎn)自一種類型的硬件平臺的主操作系統(tǒng),提供原產(chǎn)自不同硬件平臺的虛擬化賓客操作系統(tǒng),以便需要存在賓客操作系統(tǒng)的應(yīng)用可以與需要存在主操作系統(tǒng)的其他應(yīng)用共存。這樣,終端用戶無需提供每一個支持不同類型的應(yīng)用的單獨計算環(huán)境。此外,不管賓客操作系統(tǒng),訪問單個硬件平臺的底層資源保持靜態(tài)。
[0008]虛擬化環(huán)境已經(jīng)被部署成在制訂應(yīng)用解決方案時匯集不同VM中的不同相互依賴應(yīng)用。例如,應(yīng)用服務(wù)器可以在一個VM內(nèi)執(zhí)行,而數(shù)據(jù)庫管理服務(wù)器可以在不同VM內(nèi)執(zhí)行,而萬維網(wǎng)服務(wù)器可以在又一個VM內(nèi)執(zhí)行。每個VM在安全網(wǎng)絡(luò)中可以可通信地相互耦合;但是,可以不干擾其他VM中的其他應(yīng)用的執(zhí)行地將任何一種給定部署的應(yīng)用動態(tài)遷移到不同部署。在典型的動態(tài)遷移中,可以將VM從一個主機服務(wù)器移動到另一個主機服務(wù)器,以便允許進行服務(wù)器維護或允許改善VM的硬件支持。
[0009]基于檢驗點高可用性是運行在主要主機上的虛擬機每隔25ms將它的處理器和存儲器狀態(tài)映射到次要主機上的技術(shù)。這個映射過程牽涉到:跟蹤虛擬機的存儲器和處理器狀態(tài)的變化;周期性地停止虛擬機;在網(wǎng)絡(luò)上將這些變化發(fā)送給次要主機;等待次要主機確認存儲器和處理器狀態(tài)更新的接收;以及重新啟動虛擬機。
[0010]該映射過程保證了萬一主要主機遭受突如其來的硬件故障,次要主機也能夠重新承擔工作負荷,而不會使服務(wù)遭受損失。如果次要主機注意到主要主機沒有響應(yīng),或從主要主機接收到明確通知,則它啟動虛擬機的鏡像版本,給外部世界的印象是虛擬機跨越主要主機的故障無縫地繼續(xù)執(zhí)行。
[0011]盡管這種技術(shù)提供了對付硬件故障的有效保護,但它不能防范軟件故障。因為虛擬機的存儲器和處理器的狀態(tài)忠實地在次要主機上再現(xiàn),所以如果軟件崩潰(例如,空指針的引用解除)導(dǎo)致故障轉(zhuǎn)移(failover)到次要主機,則虛擬機將從最后檢驗點開始重新執(zhí)行,以及如果程序執(zhí)行是確定性的,則會出現(xiàn)相同錯誤。
[0012]存在即使軟件故障引發(fā)故障轉(zhuǎn)移,虛擬機也可能不崩潰的一些有限情況。但是,這些情況少之又少,更多地依賴于運氣而非設(shè)計。例如,由于通過僥幸的調(diào)度,同時被訪問的數(shù)據(jù)可能未結(jié)束,所以當次要主機重新承擔工作負荷時,可能不會出現(xiàn)表現(xiàn)為一個處理器訪問正在被另一個處理器修改的數(shù)據(jù)的競爭狀況的軟件錯誤。
[0013]將檢驗點可用性用在虛擬機中是已知的。Greg Bronevetsky等人的出版物“IMPLEMENTATION AND EVALUATION OF A SCALABLE APPLICATION-LEVELCHECKP0INT-REC0VERY SCHEME FOR MPI PROGRAMS”試圖解決檢驗點可用性問題,其中許多計算機應(yīng)用的運行時間比當前高性能計算平臺的平均出故障時間長得多。
[0014]盡管關(guān)注到應(yīng)用檢驗點,但這個出版物描述了在編譯時擴增應(yīng)用,以便在執(zhí)行時周期性地保存足夠多狀態(tài),從而在硬件故障的情況下可以重新啟動的特定“檢驗點和重新啟動”做法。這對付不了應(yīng)用故障。
[0015]因此,本領(lǐng)域存在解決上述問題的需要。
【發(fā)明內(nèi)容】
[0016]在本發(fā)明的第一方面中,提供了如權(quán)利要求1所述的方法。
[0017]本發(fā)明引入了可以由虛擬機輸送給應(yīng)用以便警告它迫近的軟件崩潰的中斷。一旦崩潰了和在次要主機上從最后檢驗點重新開始,就將這種中斷輸送給應(yīng)用。該中斷將迫近的崩潰的細節(jié)提供給應(yīng)用,以便該應(yīng)用可以盡最大努力避免它。
[0018]與傳統(tǒng)基于檢驗點高可用性不同,即使主要和次要主機實際上是相同系統(tǒng),也存在要獲得的價值;在那種情況下,虛擬機將不是獲得針對硬件故障的保護,而是通過中斷機制能夠防范軟件故障。
[0019]中斷機制不能保證可以從軟件崩潰中挽救應(yīng)用,但的確可以提供在崩潰的情況下想嘗試恢復(fù)的軟件應(yīng)用開發(fā)者現(xiàn)在具有從故障中恢復(fù)過來的更大靈活性的機制,因為他們在應(yīng)用仍然處在良好執(zhí)行狀態(tài)下時就得到即使發(fā)生故障的通知。
[0020]本發(fā)明將附加互鎖點加入現(xiàn)有遷移控制系統(tǒng)中。
[0021]從第二方面來看,本發(fā)明提供了用于故障監(jiān)視和修復(fù)的系統(tǒng),其包含:將應(yīng)用提供給虛擬機的部件,所述應(yīng)用在虛擬機中執(zhí)行;在定期檢驗點上存儲來自正在執(zhí)行的第一虛擬機的機器狀態(tài)信息的部件;在應(yīng)用的故障點接收包含應(yīng)用錯誤狀態(tài)的來自應(yīng)用的錯誤消息的部件;停止虛擬機和應(yīng)用的部件;提供虛擬機和應(yīng)用的第一副本的部件,所述虛擬機副本和應(yīng)用副本從中斷故障點之前的檢驗點開始執(zhí)行;在到達相應(yīng)故障點之前將故障中斷發(fā)送給應(yīng)用副本的部件;以及響應(yīng)該故障中斷,通過第一應(yīng)用副本啟動第一組一種或多種修復(fù)方法,力圖避免潛在迫近故障點的部件。
[0022]從進一步的方面來看,本發(fā)明提供了用于故障監(jiān)視和修復(fù)的計算機程序產(chǎn)品,該計算機程序產(chǎn)品包含:可被處理電路讀取和存儲被該處理電路執(zhí)行以便執(zhí)行用于執(zhí)行本發(fā)明的步驟的方法的指令的計算機可讀存儲介質(zhì)。
[0023]從進一步的方面來看,本發(fā)明提供了存儲在計算機可讀介質(zhì)上和可加載到數(shù)字計算機的內(nèi)部存儲器中的計算機程序,其包含當所述程序執(zhí)行在計算機上時,執(zhí)行本發(fā)明的步驟的軟件代碼部分。
【專利附圖】
【附圖說明】
[0024]現(xiàn)在參考附圖只通過例子描述本發(fā)明的實施例,在附圖中:
[0025]圖1是本實施例的平臺的部署圖;
[0026]圖2是執(zhí)行管理程序環(huán)境的部署圖;
[0027]圖3是本實施例的管理程序修復(fù)系統(tǒng)的部件圖;
[0028]圖4是本實施例的應(yīng)用修復(fù)系統(tǒng)的部件圖;
[0029]圖5是按照本實施例的管理程序修復(fù)方法的方法圖;
[0030]圖6是按照本實施例的應(yīng)用修復(fù)方法的方法圖;
[0031]圖7是按照優(yōu)選實施例的應(yīng)用故障方法的方法圖;
[0032]圖8A到8F是按照優(yōu)選實施例的虛擬機隨時間狀態(tài)的示范性狀態(tài)圖;
[0033]圖9是按照優(yōu)選實施例的示范性修復(fù)記錄;以及
[0034]圖1OA到IOE示出了按照優(yōu)選實施例的相同重復(fù)出現(xiàn)故障的示范性應(yīng)用登記表42A和修復(fù)記錄54A的變化狀態(tài)。
【具體實施方式】
[0035]下面參考圖1中的部署圖描述使用屏幕I和鍵盤16與用戶12交互的平臺10。平臺10包含:處理器18 ;接口 22 ;以及存儲24。平臺10的例子是TBM? PowerPC750?Express服務(wù)器。
[0036]處理器18從存儲器中取出指令和數(shù)據(jù),并按照指令對數(shù)據(jù)進行邏輯運算。指令的例子包括加數(shù)據(jù),減數(shù)據(jù),讀取數(shù)據(jù),寫入數(shù)據(jù)。處理器的例子是IBM POWER?處理器。IBM、PowerPC750、POWER、和P0WER7是在全球許多司法管轄區(qū)注冊的國際商用機器公司的商標。
[0037]比存儲24快的存儲器20是為了速度而設(shè)計的,因此不限制與工作處理器的通信速度。處理器甚至含有用于小部分應(yīng)用的高速緩沖存儲器,但整個執(zhí)行應(yīng)用存儲在存儲器20中。存儲器的例子是包含一系列動態(tài)隨機訪問存儲器(DRAM)集成電路的8GB到512GB寄存式雙列直插存儲模塊(RDIMM)。[0038]接口 22提供平臺10與用戶12之間的網(wǎng)關(guān)。鍵盤輸入設(shè)備通過接口 22將信息發(fā)送給存儲器20。將信息從存儲器20發(fā)送給像視頻監(jiān)視器那樣的輸出設(shè)備。
[0039]存儲24比存儲器20慢,但被設(shè)計成保存比執(zhí)行存儲器多得多的數(shù)據(jù)。存儲存儲器的例子是8TB SSF (小形狀因子)SAS (串聯(lián)連接SCSI)盤驅(qū)動器。SCSI (小型計算機系統(tǒng)接口)是用于向和從像硬盤驅(qū)動器那樣的計算機存儲設(shè)備移動數(shù)據(jù)的計算機總線。
[0040]當平臺未工作時,存儲器20是空的,而存儲24持久地存儲在平臺上執(zhí)行所需的應(yīng)用的映像。在本實施例中,存儲存儲器包含:管理程序26 ;管理程序修復(fù)系統(tǒng)27 ;虛擬機30 ;以及示范性應(yīng)用32??梢源鎯ζ渌斯ぶ破罚龅哪切┦敲枋霰景l(fā)明所需的基本部件。取決于管理程序的類型,管理程序可能需要或可能不需要底層操作系統(tǒng)。
[0041]執(zhí)行應(yīng)用32A、虛擬機30A和管理程序26A將參考圖2描述如下。虛擬機30A是操作系統(tǒng)34A和應(yīng)用32A的執(zhí)行環(huán)境。應(yīng)用32包含應(yīng)用修復(fù)系統(tǒng)29A。
[0042]管理程序26包含當加載在可執(zhí)行存儲器中和被執(zhí)行,指示平臺10執(zhí)行管理程序的邏輯操作的程序代碼指令。管理程序26A的邏輯操作包括管理程序修復(fù)系統(tǒng)27A和虛擬機 30A。
[0043]管理程序修復(fù)系統(tǒng)27包含當被加載到活動管理程序26A管理的存儲器中時,指示平臺10和管理程序執(zhí)行故障和修復(fù)系統(tǒng)27A的邏輯操作的指令。
[0044]虛擬機30包含當被加載到活動管理程序26A管理的存儲器中時,指示平臺10和管理程序執(zhí)行虛擬機30A的邏輯操作的程序代碼指令。虛擬機30A的邏輯操作包括執(zhí)行各自操作系統(tǒng)34A和應(yīng)用32A。
[0045]示范性應(yīng)用32包含當被加載到活動虛擬機30A管理的存儲器中時,指示虛擬機執(zhí)行示范性應(yīng)用32A的邏輯操作的程序代碼指令。
[0046]管理程序修復(fù)系統(tǒng)27 (參見圖3)包含:管理程序修復(fù)方法500 ;以及管理程序修復(fù)數(shù)據(jù)庫40。
[0047]下面會參照圖5更詳細描述管理程序修復(fù)方法500。
[0048]管理程序修復(fù)數(shù)據(jù)庫40包含:應(yīng)用登記表42 ;以及虛擬機狀態(tài)檢驗點44。
[0049]應(yīng)用登記表42包含應(yīng)用記錄的表格。每個應(yīng)用記錄包含:應(yīng)用標識符;錯誤代碼;檢驗點;以及檢驗點之后的時間。在圖1OA到IOE中示出了示范性應(yīng)用登記表42A。應(yīng)用標識符是將本身登記在修復(fù)系統(tǒng)中的應(yīng)用的標識符。錯誤代碼包含當在應(yīng)用中出現(xiàn)錯誤時發(fā)送給修復(fù)系統(tǒng)的錯誤代碼。檢驗點是出現(xiàn)錯誤之前的檢驗點。檢驗點之后的時間是出現(xiàn)錯誤時檢驗點之后以秒為單位的時間。
[0050]虛擬機狀態(tài)檢驗點44是在特定時刻恢復(fù)虛擬機和執(zhí)行在上面的任何應(yīng)用所需的虛擬機的存儲器和寄存器。
[0051]應(yīng)用修復(fù)系統(tǒng)29 (參見圖4)包含:應(yīng)用修復(fù)方法600 ;應(yīng)用故障方法700 ;以及應(yīng)用修復(fù)數(shù)據(jù)庫50。
[0052]應(yīng)用修復(fù)數(shù)據(jù)庫50包含修復(fù)報告52和修復(fù)報告模板54和55。修復(fù)報告模板54和55的例子顯示在圖9中。修復(fù)報告是用于指示應(yīng)用修復(fù)系統(tǒng)29應(yīng)用某些方法的修復(fù)報告模板的實例化。修復(fù)報告也用于記錄結(jié)果,以便應(yīng)用修復(fù)系統(tǒng)29可以在每個故障之后采用修復(fù)方法。
[0053]下面會參照圖6更詳細描述應(yīng)用修復(fù)方法600。[0054]下面會參照圖7更詳細描述應(yīng)用故障方法700。
[0055]管理程序修復(fù)方法500 (參見圖5)會參考從步驟502開始和結(jié)束在步驟518上的邏輯過程加以描述。
[0056]步驟502用于在提供應(yīng)用和虛擬機時啟動方法500。這是當在管理程序上提供虛擬機和應(yīng)用時,由平臺、管理程序、虛擬機和應(yīng)用執(zhí)行的方法500的初始化。
[0057]步驟504用于從在虛擬機上運行的應(yīng)用接收到信號之后登記該應(yīng)用。正在執(zhí)行的應(yīng)用發(fā)出登記請求,步驟504接受這個請求。由于在登記表42中沒有現(xiàn)成項目,所以可以保存該應(yīng)用的名稱,然后可以將控制傳遞給步驟508。
[0058]步驟508用于在定期檢驗點上存儲來自虛擬機的狀態(tài)信息。下一個步驟是510。
[0059]步驟510用于針對故障狀況監(jiān)視實時狀態(tài)信息。如果是穩(wěn)定狀態(tài)和沒有故障,則取決于修復(fù)設(shè)置,周期性地使過程返回到步驟508,用于保存狀態(tài)信息。如果應(yīng)用結(jié)束,則將控制傳遞給步驟518。但是,如果應(yīng)用出現(xiàn)故障,則將控制傳遞給步驟512。
[0060]步驟512用于接收包括錯誤代碼和故障點的來自應(yīng)用的錯誤消息,并將細節(jié)填充在應(yīng)用登記表中。下一個步驟是514。
[0061]步驟514用于停止運行出故障的應(yīng)用的虛擬機。下一個步驟是516。
[0062]步驟516用于將應(yīng)用提供給新虛擬機并從中斷之前的檢驗點開始執(zhí)行該應(yīng)用。下一個步驟是517。
[0063]步驟517用于確定已經(jīng)在執(zhí)行的應(yīng)用的最后錯誤消息。應(yīng)用登記表查找將揭示錯誤消息和在哪個點上接收到錯誤消息的指示。在優(yōu)選實施例中,將最后檢驗點之后的時間與錯誤消息一起存儲。步驟517用于向應(yīng)用發(fā)送中斷以及包括接收到錯誤消息時的指示的最后錯誤的所存儲細節(jié)。在一個例子中,中斷名是SIGCAREFUL。下一個步驟是508,在步驟508中該方法再次循環(huán)以便存儲檢驗點和監(jiān)視新虛擬機和應(yīng)用。
[0064]步驟518是該方法的結(jié)束步驟。
[0065]應(yīng)用修復(fù)方法600 (參見圖6)包含從步驟602開始和結(jié)束在步驟616上的邏輯過程步驟。一旦應(yīng)用的新副本在帶有管理程序修復(fù)系統(tǒng)27的虛擬機(方法700)上運行,這種方法就開始起作用。
[0066]步驟602用于接收帶有錯誤消息和故障點的中斷。
[0067]步驟604用于定位或構(gòu)建應(yīng)用中的故障點的修復(fù)記錄。如果需要創(chuàng)建新記錄,貝Ij轉(zhuǎn)到步驟606,否則轉(zhuǎn)到步驟608。修復(fù)記錄不僅通過錯誤消息而且通過故障點來索引,因為在應(yīng)用中的不同點上可以出現(xiàn)相似錯誤。修復(fù)記錄將指示應(yīng)用修復(fù)方法啟動一種或多種修復(fù)方法。
[0068]步驟606用于創(chuàng)建包括針對錯誤類型選擇的修復(fù)方法的修復(fù)記錄。修復(fù)記錄是從按照錯誤消息選擇的修復(fù)記錄模板中創(chuàng)建的。例如,對于存儲器錯誤,選擇存儲器密切相關(guān)修復(fù)方法;對于存儲錯誤,選擇存儲密切相關(guān)修復(fù)方法;對于事務(wù)錯誤,選擇事務(wù)密切相關(guān)修復(fù)方法;以及對于網(wǎng)絡(luò)錯誤,選擇網(wǎng)絡(luò)密切相關(guān)修復(fù)方法。記錄模板也可以通過什么修復(fù)方法可用來確定;可以通過加入新修復(fù)記錄模板加入新修復(fù)方法。
[0069]按照錯誤類型確定修復(fù)記錄中的修復(fù)方法的優(yōu)先級。在優(yōu)選實施例中,首先通過錯誤消息,然后按傷害最小的次序確定修復(fù)方法的優(yōu)先級。下面會參考圖9描述兩個修復(fù)記錄模板例子。下一個步驟是608。[0070]步驟608用于按照修復(fù)記錄取消事務(wù)。該修復(fù)記錄將指示是否執(zhí)行這個步驟。在優(yōu)選實施例中,可以調(diào)整要取消的事務(wù)的數(shù)量或等級。
[0071]步驟610用于按照修復(fù)記錄丟棄數(shù)據(jù)結(jié)構(gòu)。
[0072]步驟612用于按照修復(fù)記錄進入安全模式。
[0073]步驟614用于按照修復(fù)記錄清空高速緩存。
[0074]步驟616是該方法的結(jié)束步驟。
[0075]應(yīng)用故障方法700 (參見圖7)包含從步驟702開始和結(jié)束在步驟712上的邏輯過程步驟。這是本實施例的應(yīng)用的主要方法。
[0076]步驟702用于將應(yīng)用登記在管理程序上運行的修復(fù)服務(wù)中。
[0077]步驟704用于監(jiān)視應(yīng)用狀態(tài)。如果應(yīng)用出故障了,則轉(zhuǎn)到步驟708。如果從管理程序接收到中斷,則轉(zhuǎn)到步驟706。
[0078]步驟706用于在接收到中斷時調(diào)用應(yīng)用修復(fù)方法600。只有提供了應(yīng)用和虛擬機的副本之后才能到達步驟706。
[0079]步驟708用于向管理程序發(fā)送應(yīng)用錯誤和故障點。
[0080]步驟710是該方法的結(jié)束步驟,可能因為應(yīng)用崩潰了。
[0081]示范性虛擬機隨時間狀態(tài)將參考圖8A到8F描述如下。在每個圖形中將狀態(tài)的變化圍在虛線橢圓內(nèi)。
[0082]圖8A描繪了在管理程序26A上運行的虛擬機30A。隨著應(yīng)用執(zhí)行指令,每條指令將虛擬機從一種存儲器狀態(tài)移動到另一種。在一個時間段上示出了一個范圍的存儲器狀態(tài):1 ;2 ;3 ;4..;x ;和x+1。這些狀態(tài)代表虛擬機的整個存儲器狀態(tài)。周期性地將這些狀態(tài)選為檢驗點,并保存在管理程序26A中,例如,狀態(tài)4和狀態(tài)X。從這些檢驗點中,可以重新創(chuàng)建虛擬機以及當前正在執(zhí)行應(yīng)用的整個副本。
[0083]應(yīng)用32A被設(shè)計成支持故障中斷(在該例子中稱為SIGCAREFUL)。當被執(zhí)行時,應(yīng)用32A聲明它通過在管理程序修復(fù)系統(tǒng)中登記故障服務(wù)已經(jīng)如此設(shè)計了。萬一在應(yīng)用中出現(xiàn)軟件崩潰,則管理程序應(yīng)該將該應(yīng)用故障轉(zhuǎn)移給次要虛擬機,然后觸發(fā)SIGCAREFUL中斷。
[0084]圖SB描繪了在存儲器狀態(tài)x+n之后出現(xiàn)錯誤:將所得錯誤消息傳送給管理程序。
[0085]圖SC描繪了從檢驗點X開始啟動虛擬機副本30B。虛擬機30B將含有執(zhí)行在與像在虛擬機30A上那樣的X相同的狀態(tài)下的應(yīng)用32B。應(yīng)用32B執(zhí)行和移動到狀態(tài)x+1。
[0086]圖8D描繪了管理程序?qū)IGCAREFUL中斷發(fā)送給虛擬機30B,在虛擬機30B上在該應(yīng)用到達x+1之后但在出現(xiàn)相應(yīng)錯誤的狀態(tài)(狀態(tài)x+n)之前接收到它。
[0087]圖SE描繪了在x+n狀態(tài)之前應(yīng)用修復(fù)方法。該應(yīng)用無論修復(fù)步驟有沒有必要都可以采用以避免崩潰。修復(fù)方法對于每種應(yīng)用是特定的,受修復(fù)記錄模板控制。如果該應(yīng)用被告知(通過中斷SIGCAREFUL)由于訪問未映射存儲器地址而將遭到終止,則可以放棄現(xiàn)有事務(wù),清空高速緩存,以及丟棄盡可能多的數(shù)據(jù)結(jié)構(gòu)。如果Java?,虛擬機被告知它將要執(zhí)行非法指令,則可以清除它的適時(Just-1n-Time,JIT)高速緩存,并回到較慢的字節(jié)碼解釋模式。如果一種應(yīng)用被告知因為內(nèi)核再也不能將存儲器調(diào)撥給它(即,如果系統(tǒng)配置允許一些進程映射比物理存儲器中系統(tǒng)可用大的存儲器以及交換)而將遭到終止,則該應(yīng)用可以通過放棄數(shù)據(jù)的高速緩存或減少正在同時處理的事務(wù)的數(shù)量減少它的存儲器使用。Java和所有基于Java的商標和徽標都是甲骨文(Oracle)公司和/或它的附屬公司的商標或注冊商標。
[0088]圖8F描繪了狀態(tài)x+m和然后例示該實施例提供的正在進行保護的進一步錯誤出現(xiàn)。將錯誤細節(jié)發(fā)送給管理程序,并重復(fù)這些過程。在這個例子中,虛擬機前進到比以前的虛擬機更進一步的狀態(tài),因此修復(fù)方法似乎有正面效果。
[0089]下面參考圖9描述修復(fù)記錄模板的兩個例子54和55。每個模板對于應(yīng)用32是特定的,包含六種修復(fù)方法。每個記錄包含:序號;修復(fù)方法;修復(fù)方法嚴重度;以及時間戳。序號是應(yīng)用修復(fù)方法的次序。記錄修復(fù)方法包含要調(diào)用的修復(fù)方法的名稱。這個例子局限于四種修復(fù)方法。記錄修復(fù)方法嚴重度是當被調(diào)用時應(yīng)用于修復(fù)方法的參數(shù);這個例子只有與簡單修復(fù)方法相對應(yīng)的單個簡單參數(shù),但也可以使用包括復(fù)雜表達式的多個參數(shù)。當修復(fù)方法被應(yīng)用于一系列相關(guān)故障點時記錄時間戳。
[0090]模板54最適合事件錯誤110。首先列出了嚴重度逐步增加的三種不同取消事務(wù)修復(fù)方法。接在其后的是清空修復(fù)方法;安全模式修復(fù)方法;以及丟棄數(shù)據(jù)結(jié)構(gòu)修復(fù)方法。在工作時,為出現(xiàn)在特定故障點(在這個實施例中,在時空中)上的錯誤選擇修復(fù)記錄模板。每當出現(xiàn)錯誤和故障點時,就應(yīng)用數(shù)量越來越多的修復(fù)方法。
[0091]模板55最適合存儲器問題120。首先列出了兩種清空高速緩存修復(fù)方法,第二種具有較高清空嚴重度。接著列出了兩種數(shù)據(jù)結(jié)構(gòu)修復(fù)方法,第二種具有較高嚴重度。接著列出的是高嚴重度取消事務(wù)修復(fù)方法;后面接著安全模式修復(fù)方法。
[0092]現(xiàn)在針對相同重復(fù)出現(xiàn)故障描述示范性應(yīng)用登記表42A和修復(fù)記錄54A的變化狀態(tài)(參見圖1OA到圖10E)。在這個例子中,將相同重復(fù)出現(xiàn)故障當作一組錯誤代碼內(nèi)的錯誤(錯誤120,錯誤122和124)。故障點通過最后檢驗點X之后的+/_10秒的時間范圍來定義。每個圖形的狀態(tài)的重要變化用虛線橢圓圍起來。
[0093]參照圖10A,應(yīng)用登記表42A和修復(fù)記錄54A的初始狀態(tài)被顯示成具有如同模板記錄的記錄字段。應(yīng)用32已經(jīng)向修復(fù)系統(tǒng)作了登記。記錄在應(yīng)用登記表中的是在最后檢驗點X之后30秒(X+30 )時出現(xiàn)了錯誤120的事實。響應(yīng)錯誤120,啟動帶有新應(yīng)用的新虛擬機。在到達相應(yīng)故障點(30秒)之前適時地,管理程序26A中斷應(yīng)用并調(diào)用應(yīng)用修復(fù)方法600,在本例中,比迫近故障早10秒。由于未找到現(xiàn)有修復(fù)方法,所以從模板54中創(chuàng)建修復(fù)記錄54A。
[0094]參照圖10B,應(yīng)用修復(fù)方法600執(zhí)行記錄中的第一修復(fù)方法:取消事務(wù)I (嚴重度1),并且對該操作打上時間戳16/3/2011X+20 (比前故障點早10秒)。為了確定修復(fù)方法已經(jīng)取得成功,啟動故障點計時器看看是否在檢驗點之后的相同或相似時間上出現(xiàn)相同錯誤。如果沒有,則在修復(fù)記錄中將該一種或幾種修復(fù)方法標記為成功了,在該例子中,在時間戳之后引入了分號。圖1OB示出了取消事務(wù)I的修復(fù)方法這次成功了,因為存在分號后三雙。
[0095]參照圖10C,應(yīng)用32似乎在相同檢驗點時間的相似范圍(X+32有2秒差異,但在該例子的范圍內(nèi))內(nèi)還有另一個錯誤120 ;這些因素將修復(fù)記錄54A識別成錯誤120的現(xiàn)有修復(fù)記錄。在本例中,應(yīng)用了取消事務(wù)I并打上時間戳17/3/2011X+22,但該應(yīng)用在通過修復(fù)計時器認為成功之前仍然崩潰了。沒有加上分號后綴,以便另一個故障可以注意到這個事實。[0096]參照圖10D,應(yīng)用32被顯示成在相同檢驗點時間的相似范圍(X+35有5秒差異,但在該例子的范圍內(nèi))內(nèi)還有另一個錯誤122 (在本例中,相似錯誤);這些因素將修復(fù)記錄54A識別成錯誤122的現(xiàn)有修復(fù)記錄。在本例中,忽略取消事務(wù)1,因為它以前未起作用過,應(yīng)用取消事務(wù)2的修復(fù)方法,并打上時間戳17/3/2011X+15。但是,該應(yīng)用在通過修復(fù)計時器認為成功之前仍然崩潰了。沒有加上分號后綴,以便另一個故障可以注意到這個事實。
[0097]參照圖10E,應(yīng)用32被顯示成在相同檢驗點時間的相似范圍(X+35有5秒差異,但在該例子的范圍內(nèi))內(nèi)還有另一個錯誤123 (相似錯誤);這些因素將修復(fù)記錄54A識別成錯誤123的現(xiàn)有修復(fù)記錄。在本例中,忽略取消事務(wù)I和2,因為它們以前都未起作用過,應(yīng)用取消事務(wù)3的修復(fù)方法,并打上時間戳17/3/2011X+25。這次該應(yīng)用在認為成功之前未崩潰,并加上分號后綴,以便另一個故障可以注意到這個事實。
[0098]如果需要的話,可以應(yīng)用進一步的修復(fù)方法:清空高速緩存、安全模式和丟棄數(shù)據(jù)結(jié)構(gòu)在本例中都未得到應(yīng)用,但可以分開應(yīng)用或除了取消事件修復(fù)方法之外還加以應(yīng)用。
[0099]總之,本發(fā)明涉及管理虛擬機的高可用性的方法和裝置。尤其,本發(fā)明涉及在主虛擬機上的應(yīng)用故障的情況下管理備份虛擬機的基于檢驗點高可用性的方法和裝置。本文描述了用于故障監(jiān)視和修復(fù)的方法、系統(tǒng)、計算機程序產(chǎn)品和計算機程序:提供第一虛擬機的應(yīng)用的第一副本;在定期檢驗點上存儲來自正在執(zhí)行第一應(yīng)用的狀態(tài)信息;針對故障狀況監(jiān)視實時狀態(tài)信息;從故障點的狀態(tài)信息中生成中斷;根據(jù)中斷,提供從檢驗點開始執(zhí)行的應(yīng)用的第二副本;在故障點之前對第二副本的操作環(huán)境作第一次改變;以及開始執(zhí)行該應(yīng)用的第二副本。
[0100]現(xiàn)在描述本發(fā)明的其他設(shè)想實施例。
[0101]對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說顯而易見,本發(fā)明的優(yōu)選實施例的整個或部分方法可以適當?shù)睾陀杏玫鼐唧w化在一個邏輯裝置,或多個邏輯裝置中,該邏輯裝置包含安排成執(zhí)行該方法的步驟的邏輯元件,這樣的邏輯元件可以包含硬件部件、軟件部件、或它們的組合。
[0102]對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說同樣顯而易見,按照本發(fā)明的優(yōu)選實施例的整個或部分邏輯安排可以適當?shù)鼐唧w化在邏輯裝置中,該邏輯裝置包含執(zhí)行該方法的步驟的邏輯元件,這樣的邏輯元件可以包含像在,例如,可編程邏輯陣列或?qū)S眉呻娐分械倪壿嬮T那樣的部件。這樣的邏輯安排可以進一步具體化在使用,例如,可以使用固定或可發(fā)送承載媒體存儲和發(fā)送的虛擬硬件描述符語言,在這樣的陣列或電路中臨時或永久建立邏輯結(jié)構(gòu)的使能元件中。
[0103]應(yīng)該懂得,上述的方法和安排也可以適當?shù)赝耆虿糠钟脠?zhí)行在一個或多個處理器上的軟件來實現(xiàn),該軟件可以以像磁盤或光盤等那樣的任何適當數(shù)據(jù)載體(未顯示在圖中)承載的一個或多個計算機程序單元的形式提供。傳輸數(shù)據(jù)的通道同樣可以包含所有描述的存儲媒體,以及像有線或無線信號承載媒體那樣的信號承載媒體。
[0104]本發(fā)明可以進一步適當?shù)鼐唧w化成用在計算機系統(tǒng)上的計算機程序產(chǎn)品。這樣的實現(xiàn)可以包含一系列計算機可讀指令,該一系列計算機可讀指令固定在像計算機可讀媒體,例如,軟盤、CD-ROM、ROM或硬盤那樣的有形媒體上,或可在包括但不限于光或類似通信線的有形媒體上,或無形地使用包括但不限于微波、紅外線或其他傳輸技術(shù)的無線技術(shù),使用調(diào)制解調(diào)器或其他接口設(shè)備發(fā)送給計算機系統(tǒng)。該一系列計算機可讀指令體現(xiàn)本文在前面所述的所有或部分功能。
[0105]本領(lǐng)域的普通技術(shù)人員還應(yīng)該懂得,這樣的計算機可讀指令可以用許多編程語言編寫,以便用在許多計算機體系結(jié)構(gòu)或操作系統(tǒng)上。進一步,這樣的指令可以使用包括但不限于半導(dǎo)體、磁、或光、當前的或?qū)淼娜魏未鎯夹g(shù)來存儲,或使用包括但不限于光、紅夕卜、或微波、當前的或?qū)淼娜魏瓮ㄐ偶夹g(shù)來發(fā)送??梢栽O(shè)想,這樣的計算機程序產(chǎn)品可以作為附帶印刷或電子文檔,例如,壓縮軟件包的可換式媒體來分發(fā),預(yù)裝在計算機系統(tǒng)上,例如,在系統(tǒng)ROM或固定盤上,或在網(wǎng)絡(luò),例如,互聯(lián)網(wǎng)或萬維網(wǎng)上從服務(wù)器或電子公告板分發(fā)。
[0106]可替代地,本發(fā)明的優(yōu)選實施例可以以部署包含部署計算機程序代碼的步驟的服務(wù)的計算機實現(xiàn)方法的形式實現(xiàn),該計算機程序代碼可起當被部署到計算機基礎(chǔ)設(shè)施中和在上面得到執(zhí)行時,使計算機系統(tǒng)執(zhí)行該方法的所有步驟的作用。
[0107]進一步可替代地,本發(fā)明的優(yōu)選實施例可以以上面含有功能數(shù)據(jù)的數(shù)據(jù)載體的形式實現(xiàn),所述功能數(shù)據(jù)包含當被加載到計算機系統(tǒng)中和據(jù)此起作用時,使所述計算機系統(tǒng)執(zhí)行該方法的所有步驟的功能性計算機數(shù)據(jù)結(jié)構(gòu)。
[0108]對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說顯而易見,可以不偏離本發(fā)明的范圍地對前面的示范性實施例作出許多改進和修改。
【權(quán)利要求】
1.一種用于故障監(jiān)視和修復(fù)的方法,其包含: 將應(yīng)用提供給虛擬機,所述應(yīng)用用于在虛擬機中執(zhí)行; 在定期檢驗點上存儲來自執(zhí)行的第一虛擬機的機器狀態(tài)信息; 在應(yīng)用的故障點上接收包含應(yīng)用錯誤狀態(tài)的來自應(yīng)用的錯誤消息; 停止虛擬機和應(yīng)用; 提供虛擬機和應(yīng)用的第一副本,所述虛擬機副本和應(yīng)用副本可操作用于從中斷故障點之前的檢驗點執(zhí)行; 在到達相應(yīng)故障點之前將故障中斷發(fā)送給應(yīng)用副本;以及 響應(yīng)該故障中斷,通過第一應(yīng)用副本啟動第一組一種或多種修復(fù)方法,力圖避免潛在的迫近故障點。
2.按照權(quán)利要求1所述的方法,其中該方法對存在各自故障的第一和隨后虛擬機和應(yīng)用副本重復(fù)存儲、接收、停止步驟,以及重復(fù)提供各自第二和隨后虛擬機和應(yīng)用副本和發(fā)送相應(yīng)故障中斷的步驟。
3.按照權(quán)利要求1或2所述的方法,其中修復(fù)方法包含:取消一個或多個事務(wù);取消一個或多個線程;清空一個或多個高速緩存;丟棄一種或多種數(shù)據(jù)結(jié)構(gòu);和/或選擇更安全操作模式。
4.按照權(quán)利要求1,2或3所述的方法,其中如果任何隨后應(yīng)用的故障與以前應(yīng)用的故障一致,則對于該故障的一組隨后修復(fù)方法從以前的一組修復(fù)方法修改,以增加避免故障點的機會。`
5.按照權(quán)利要求4所述的方法,其中修改后的該組修復(fù)方法包含影響力增大的修復(fù)方法。
6.按照權(quán)利要求4所述的方法,其中修改后的該組修復(fù)方法包含新修復(fù)方法。
7.按照權(quán)利要求4所述的方法,其中新故障根據(jù)故障的類型選擇一組修復(fù)方法。
8.按照權(quán)利要求1到7的任何一項所述的方法,其中所述存儲狀態(tài)信息包含存儲所有虛擬機寄存器和存儲器。
9.按照權(quán)利要求1到8的任何一項所述的方法,進一步包含對于故障狀況監(jiān)視實時虛擬機和/或應(yīng)用狀態(tài)信息。
10.按照權(quán)利要求1到9的任何一項所述的方法,包含在第一平臺上提供虛擬機和應(yīng)用以及在第二平臺上提供虛擬機的副本和應(yīng)用的副本。
11.一種用于故障監(jiān)視和修復(fù)的系統(tǒng),其包含: 將應(yīng)用提供給虛擬機的部件,所述應(yīng)用在虛擬機中執(zhí)行; 在定期檢驗點上存儲來自執(zhí)行的第一虛擬機的機器狀態(tài)信息的部件; 在應(yīng)用的故障點上接收包含應(yīng)用錯誤狀態(tài)的來自應(yīng)用的錯誤消息的部件; 停止虛擬機和應(yīng)用的部件; 提供虛擬機和應(yīng)用的第一副本的部件,所述虛擬機副本和應(yīng)用副本用于從中斷故障點之前的檢驗點執(zhí)行; 在到達相應(yīng)故障點之前將故障中斷發(fā)送給應(yīng)用副本的部件;以及響應(yīng)該故障中斷,通過第一應(yīng)用副本啟動第一組一種或多種修復(fù)方法,力圖避免潛在的迫近故障點的部件。
12.按照權(quán)利要求11所述的系統(tǒng),其中該系統(tǒng)進一步包含對存在各自故障的第一和隨后虛擬機和應(yīng)用副本重復(fù)存儲、接收、停止步驟的部件,以及重復(fù)提供各自第二和隨后虛擬機和應(yīng)用副本和發(fā)送相應(yīng)故障中斷的步驟的部件。
13.按照權(quán)利要求11或12所述的系統(tǒng),其中 啟動第一組一種或多種修復(fù)方法的部件包含執(zhí)行如下操作的啟動部件:取消一個或多個事務(wù);取消一個或多個線程;清空一個或多個高速緩存;丟棄一種或多種數(shù)據(jù)結(jié)構(gòu);和/或選擇更安全操作模式。
14.按照權(quán)利要求11,12或13所述的系統(tǒng),其中該系統(tǒng)進一步包含響應(yīng)任何隨后應(yīng)用的故障與以前應(yīng)用的故障一致,對于該故障的一組隨后修復(fù)方法從以前的一組修復(fù)方法修改,以增加避免故障點的機會的修改部件。
15.按照權(quán)利要求14所述的系統(tǒng),其中該修改部件進一步包含將該組修復(fù)方法修改成包含影響力增大的修復(fù)方法的部件。
16.按照權(quán)利要求14所述的系統(tǒng),其中該修改部件進一步包含將該組修復(fù)方法修改成包含新修復(fù)方法的部件。
17.按照權(quán)利要求14所述的系統(tǒng),進一步包含新故障根據(jù)故障的類型選擇一組修復(fù)方法的部件。
18.按照權(quán)利要求11到17的任何一項所述的系統(tǒng),進一步包含存儲狀態(tài)信息包含存儲所有虛擬機寄存器和存儲器的部件。
19.按照權(quán)利要求11到18的任何一項所述的系統(tǒng),進一步包含對于故障狀況監(jiān)視實時虛擬機和/或應(yīng)用狀態(tài)信息的部件。
20.按照權(quán)利要求11到19的任何一項所述的系統(tǒng),進一步包含在第一平臺上提供虛擬機和應(yīng)用以及在第二平臺上提供虛擬機的副本和應(yīng)用的副本的部件。
21.一種用于故障監(jiān)視和修復(fù)的計算機程序產(chǎn)品,該計算機程序產(chǎn)品包含: 可被處理電路讀取和存儲被該處理電路執(zhí)行以便執(zhí)行按照權(quán)利要求1到10的任何一項所述的方法的指令的計算機可讀存儲介質(zhì)。
22.—種存儲在計算機可讀介質(zhì)上和可加載到數(shù)字計算機的內(nèi)部存儲器中的計算機程序,其包含當所述程序執(zhí)行在計算機上時,執(zhí)行按照權(quán)利要求1到10的任何一項所述的方法的軟件代碼部分。
【文檔編號】G06F11/14GK103493021SQ201280019454
【公開日】2014年1月1日 申請日期:2012年4月16日 優(yōu)先權(quán)日:2011年4月21日
【發(fā)明者】G.諾思 申請人:國際商業(yè)機器公司