欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法

文檔序號:7814066閱讀:202來源:國知局
一種基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法
【專利摘要】一種基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,涉及云計算領(lǐng)域,包括步驟:服務端程序在共享存儲上初始化一塊連續(xù)的空間作為邏輯卷;從邏輯卷中分配連續(xù)的多個扇區(qū)作為客戶端程序的扇區(qū)池;客戶端程序獲取扇區(qū)池的配置信息和已啟用高可用的虛擬機號;客戶端程序發(fā)送心跳消息,并更新本客戶端程序維護的虛擬機控制塊的時間戳;服務端程序接收心跳消息,利用心跳消息中攜帶的時間戳更新服務端程序維護的虛擬機控制塊的時間戳。本發(fā)明避免不必要的虛擬機停機時間,心跳檢測機制消耗系統(tǒng)資源少,性能高,延長共享存儲磁盤的使用壽命。
【專利說明】
—種基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云計算領(lǐng)域,具體涉及一種基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法。

【背景技術(shù)】
[0002]在云計算數(shù)據(jù)中心,虛擬機通常運行在物理服務器上,當物理服務器斷電或發(fā)生其他故障時,運行在其上的虛擬機也會關(guān)閉,導致虛擬機中運行的用戶業(yè)務被意外中斷。如果要保證用戶業(yè)務被意外中斷后能夠自動恢復,則需要實時監(jiān)控虛擬機的狀態(tài),在物理服務器發(fā)生故障時,將其上的虛擬機轉(zhuǎn)移到其他服務器上重新啟動,這稱為虛擬機高可用。虛擬機高可用需要使用共享存儲來存放虛擬機的磁盤文件,使得所有的服務器都能訪問到共享存儲上的磁盤文件,以便在檢測到服務器斷電后,其他正常運行的服務器能夠從共享存儲上讀取虛擬機的磁盤文件并啟動虛擬機。
[0003]為了實時檢測虛擬機的狀態(tài),需要引入心跳檢測機制,當檢測不到虛擬機的心跳時,說明該虛擬機已經(jīng)關(guān)閉,從而選擇一臺正在運行的服務器重新啟動該虛擬機。目前虛擬機心跳檢測機制有兩種:
[0004]1、基于管理網(wǎng)絡的心跳檢測。所有服務器通過管理網(wǎng)絡交換虛擬機狀態(tài)消息,當服務器斷電時,該服務器不再發(fā)送虛擬機狀態(tài)消息,其他正常運行的服務器會檢測到故障服務器上的虛擬機狀態(tài)消息超時,觸發(fā)虛擬機故障轉(zhuǎn)移,從而重新啟動該虛擬機。但是,當服務器只是管理網(wǎng)絡斷開而并非服務器故障時,該服務器發(fā)送的虛擬機狀態(tài)消息無法被其他服務器收到,此時也會觸發(fā)虛擬機故障轉(zhuǎn)移,然而,如果僅僅只是管理網(wǎng)絡斷開,虛擬機可以正常運行,虛擬機里的用戶業(yè)務也可以被正常訪問,此時觸發(fā)虛擬機故障轉(zhuǎn)移會導致用戶業(yè)務中斷,導致不必要的虛擬機停機時間。
[0005]2、基于共享存儲鎖的心跳檢測。為了解決管理網(wǎng)絡斷開導致不必要的虛擬機故障轉(zhuǎn)移,將虛擬機的鎖信息保存在共享存儲上,所有的服務器都通過共享存儲讀取虛擬機的鎖信息。當服務器的管理網(wǎng)絡連接時,通過管理網(wǎng)絡交換虛擬機的狀態(tài)信息;當服務器的管理網(wǎng)絡斷開時,通過共享存儲更新虛擬機的鎖信息,此時不會觸發(fā)虛擬機故障轉(zhuǎn)移;當服務器斷電或者管理網(wǎng)絡和存儲網(wǎng)絡都斷開時,共享存儲上的虛擬機的鎖信息不再被更新,從而觸發(fā)虛擬機故障轉(zhuǎn)移。目前基于共享存儲鎖的心跳檢測的常用實現(xiàn)方法是:為每個虛擬機磁盤文件分配一個扇區(qū)(通常大小為512字節(jié)),用來保存該虛擬機磁盤文件的共享存儲鎖,服務器在啟動虛擬機之前先嘗試獲取虛擬機磁盤文件的共享存儲鎖,如果虛擬機磁盤文件沒有被其他服務器上鎖,則上鎖并啟動該虛擬機;如果虛擬機磁盤文件已被其他服務器上鎖,且其鎖沒有超時,則無法啟動該虛擬機;如果虛擬機磁盤文件已被其他服務器上鎖,但其鎖已超時,則搶占鎖并啟動該虛擬機。持有虛擬機共享存儲鎖的物理服務器周期性更新鎖狀態(tài),當服務器斷電或存儲網(wǎng)絡斷開時,其持有的虛擬機共享存儲鎖將不再被更新,等到鎖超時后,其他正常運行的物理服務器可以搶占這些虛擬機的共享存儲鎖,并啟動虛擬機,從而實現(xiàn)虛擬機故障轉(zhuǎn)移。但是這種方法同樣存在一些缺點,假設數(shù)據(jù)中心有10臺服務器,每臺服務器上運行30個虛擬機,總共300個虛擬機全部開啟虛擬機高可用,則:虛擬機共享存儲鎖占用空間比較大,總共需要512X300 = 153600字節(jié)存儲空間;虛擬機心跳檢測占用的網(wǎng)絡帶寬大,每次讀取或更新共享存儲鎖都會傳輸512X300 = 153600字節(jié);為了實時獲取共享存儲鎖狀態(tài),服務器在更新虛擬機共享存儲鎖的時候會禁用緩存,直接寫磁盤,這樣會大大縮短磁盤壽命,如果磁盤的最大寫次數(shù)為360000次,虛擬機心跳檢測周期為10秒,則每個虛擬機共享存儲鎖在使用360000X10 + 3600 = 1000小時后出現(xiàn)壞道。


【發(fā)明內(nèi)容】

[0006]針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,其避免不必要的虛擬機停機時間,心跳檢測機制消耗系統(tǒng)資源少,性能高,延長共享存儲磁盤的使用壽命。
[0007]為達到以上目的,本發(fā)明采取的技術(shù)方案是:一種基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,用于數(shù)據(jù)中心,數(shù)據(jù)中心包括一個控制節(jié)點、一個共享存儲和至少兩個計算節(jié)點,控制節(jié)點運行服務端程序,每個計算節(jié)點上運行客戶端程序,客戶端程序為運行在本計算節(jié)點上的每個已啟用高可用的虛擬機創(chuàng)建一個虛擬機控制塊并維護,服務端程序為運行在所有計算節(jié)點上的每個已啟用高可用的虛擬機創(chuàng)建一個虛擬機控制塊并維護,實現(xiàn)方法包括以下步驟:
[0008]S1.服務端程序在共享存儲上初始化一塊連續(xù)的空間作為邏輯卷;
[0009]S2.每個客戶端程序分別連接到服務端程序,服務端程序從邏輯卷中分配連續(xù)的多個扇區(qū)作為該客戶端程序的扇區(qū)池,并在扇區(qū)池的最后一個扇區(qū)寫入該客戶端程序的唯一標識,所述最后一個扇區(qū)前面的連續(xù)扇區(qū)作為該客戶端程序的共享存儲消息隊列;
[0010]S3.客戶端程序從服務端程序獲取該客戶端程序的扇區(qū)池配置信息和已啟用高可用的虛擬機號;
[0011]S4.客戶端程序向服務端程序周期性發(fā)送心跳消息,并更新本客戶端程序維護的虛擬機控制塊的時間戳,客戶端程序檢查其維護的每個虛擬機控制塊是否超時;
[0012]S5.服務端程序接收客戶端程序發(fā)送的心跳消息,利用心跳消息中攜帶的時間戳更新服務端程序維護的虛擬機控制塊的時間戳,服務端程序檢查其維護的每個虛擬機控制塊是否超時。
[0013]在上述技術(shù)方案的基礎(chǔ)上,客戶端程序的扇區(qū)池配置信息包括扇區(qū)池所在的邏輯卷、開始扇區(qū)號、結(jié)束扇區(qū)號、每個扇區(qū)的大小。
[0014]在上述技術(shù)方案的基礎(chǔ)上,數(shù)據(jù)中心還包括管理網(wǎng)絡交換機,控制節(jié)點、計算節(jié)點和管理網(wǎng)絡交換機形成管理網(wǎng)絡,控制節(jié)點、計算節(jié)點和共享存儲形成存儲網(wǎng)絡,客戶端程序和服務端程序優(yōu)先通過管理網(wǎng)絡傳輸心跳消息,當管理網(wǎng)絡斷開時通過存儲網(wǎng)絡傳輸心跳消息。
[0015]在上述技術(shù)方案的基礎(chǔ)上,心跳消息包括時間戳、扇區(qū)池號、客戶端程序標識和運行在本計算節(jié)點上的已啟用高可用的虛擬機號列表。
[0016]在上述技術(shù)方案的基礎(chǔ)上,虛擬機號列表的格式為“[虛擬機號,虛擬機號,虛擬機號]”。
[0017]在上述技術(shù)方案的基礎(chǔ)上,每個虛擬機控制塊記錄虛擬機的高可用信息,包括虛擬機號、超時時長、故障轉(zhuǎn)移優(yōu)先級、時間戳、該虛擬機所在計算節(jié)點的客戶端程序標識。
[0018]在上述技術(shù)方案的基礎(chǔ)上,步驟S4中,客戶端程序通過管理網(wǎng)絡向服務端程序發(fā)送心跳消息,如果發(fā)送成功,直接更新本客戶端程序維護的虛擬機控制塊的時間戳;如果發(fā)送失敗,將心跳消息寫入本客戶端程序的扇區(qū)池的共享存儲消息隊列中,再更新本客戶端程序維護的虛擬機控制塊的時間戳;客戶端程序檢查其維護的每個虛擬機控制塊是否超時,如果超時,刪除超時的虛擬機控制塊,并關(guān)閉該虛擬機,客戶端程序繼續(xù)向服務端程序發(fā)送心跳消息;如果未超時,客戶端程序繼續(xù)向服務端程序發(fā)送心跳消息。
[0019]在上述技術(shù)方案的基礎(chǔ)上,心跳消息的寫入方式為循環(huán)使用共享存儲消息隊列中的扇區(qū),每次使用的扇區(qū)為上一次使用后的下一個扇區(qū),當寫入最后一個扇區(qū)時,下次寫入第一個扇區(qū)。
[0020]在上述技術(shù)方案的基礎(chǔ)上,步驟S5中,服務端程序通過管理網(wǎng)絡接收客戶端程序發(fā)送的心跳消息,如果在指定時間內(nèi)接收成功,利用心跳消息中攜帶的時間戳更新服務端程序維護的虛擬機控制塊的時間戳;如果超過指定時間未接收到心跳消息,則讀取該客戶端程序的扇區(qū)池的共享存儲消息隊列中的所有心跳消息,并從中讀取最新的心跳消息,再利用心跳消息中攜帶的時間戳更新服務端程序維護的虛擬機控制塊的時間戳;服務端程序檢查其維護的每個虛擬機控制塊是否超時,如果超時,選擇另一臺計算節(jié)點并通知其重新啟動已超時的虛擬機,服務端程序繼續(xù)接收心跳消息;如果未超時,服務端程序繼續(xù)接收心跳消息。
[0021]本發(fā)明的有益效果在于:
[0022]1、本發(fā)明實現(xiàn)方法主要用于云計算數(shù)據(jù)中心,多臺服務器優(yōu)先通過管理網(wǎng)絡交換心跳消息,當管理網(wǎng)絡斷開時,通過共享存儲消息隊列交換心跳消息,監(jiān)控虛擬機的當前狀態(tài),并在虛擬機控制塊超時的時候,關(guān)閉虛擬機并通知其他可用的計算節(jié)點重新啟動該虛擬機,使得在虛擬機或運行虛擬機的服務器出現(xiàn)故障時觸發(fā)故障轉(zhuǎn)移,虛擬機中的業(yè)務在短暫的中斷后能夠自動恢復,不需要用戶手動干預,且避免因管理網(wǎng)絡斷開立即觸發(fā)故障轉(zhuǎn)移導致不必要的虛擬機停機時間。
[0023]2、本發(fā)明實現(xiàn)方法的一臺計算節(jié)點上所有正在運行的已啟用高可用的虛擬機狀態(tài)集中于一條心跳消息中,并存儲于一個扇區(qū)中,而不是分散在多個扇區(qū)中,一次磁盤寫操作可以更新多個虛擬機的狀態(tài),因此心跳消息的寫入速度快。并且多條心跳消息是連續(xù)存放在扇區(qū)池的共享存儲消息隊列中的,一次磁盤讀操作就可以讀取多條心跳消息,因此心跳消息的讀取速度快。
[0024]3、本發(fā)明實現(xiàn)方法的心跳檢測機制消耗系統(tǒng)資源少。假設共享存儲扇區(qū)大小為512字節(jié),每臺服務器上運行30個已啟用高可用的虛擬機,虛擬機號為5位數(shù),心跳消息中虛擬機號列表格式為“[虛擬機號,虛擬機號,虛擬機號]”,則心跳消息中最長的字段虛擬機號列表長度為30X (5+2) = 210字節(jié),整個心跳消息長度不會超過一個扇區(qū),扇區(qū)池使用2個扇區(qū)(一個用于存放客戶端程序的唯一標識,另一個作為共享存儲消息隊列用于存放虛擬機心跳消息),則每個扇區(qū)池占用1024字節(jié),10臺服務器總共需要扇區(qū)池10240字節(jié),遠遠小于基于共享存儲鎖的心跳檢測機制所占用的153600字節(jié)共享存儲空間。同時虛擬機心跳檢測消息占用的網(wǎng)絡帶寬為10240字節(jié),也遠遠小于基于共享存儲鎖的心跳檢測機制的153600字節(jié)。
[0025]4、本發(fā)明實現(xiàn)方法通過使用循環(huán)的共享存儲消息隊列存放心跳消息,可以減少一個扇區(qū)在單位時間內(nèi)的寫次數(shù),從而延長扇區(qū)的使用壽命。假設每個扇區(qū)池使用5個扇區(qū)(一個用于存放客戶端程序的唯一標識,4個作為共享存儲消息隊列用于循環(huán)存放虛擬機心跳消息),如果磁盤的最大寫次數(shù)為360000次,虛擬機心跳檢測周期為10秒,則每個扇區(qū)在使用360000X 10X4 + 3600 = 4000小時后出現(xiàn)壞道,遠遠大于基于共享存儲鎖的心跳檢測機制的1000小時。
[0026]5、通過調(diào)整共享存儲消息隊列的大小,可以在系統(tǒng)資源開銷和磁盤使用壽命之間調(diào)整平衡。共享存儲消息隊列占用的扇區(qū)越多,則系統(tǒng)資源開銷越大,磁盤使用壽命越長。

【專利附圖】

【附圖說明】
[0027]圖1為本發(fā)明虛擬機高可用實現(xiàn)方法的流程圖;
[0028]圖2為客戶端程序發(fā)送心跳消息的詳細流程圖;
[0029]圖3為服務端程序接收心跳消息的詳細流程圖;
[0030]圖4為本發(fā)明實施例中虛擬機高可用實現(xiàn)方法對應的數(shù)據(jù)中心示意圖;
[0031]圖5為本發(fā)明實施例中邏輯卷的結(jié)構(gòu)示意圖。

【具體實施方式】
[0032]以下結(jié)合附圖對本發(fā)明作進一步詳細說明。
[0033]如圖4所示,數(shù)據(jù)中心包括一個控制節(jié)點、一個管理網(wǎng)絡交換機、一個共享存儲和至少兩個計算節(jié)點,控制節(jié)點運行服務端程序,每個計算節(jié)點上運行客戶端程序??刂乒?jié)點、計算節(jié)點和管理網(wǎng)絡交換機連接形成管理網(wǎng)絡,控制節(jié)點、計算節(jié)點和共享存儲連接形成存儲網(wǎng)絡,客戶端程序和服務端程序優(yōu)先通過管理網(wǎng)絡傳輸心跳消息,當管理網(wǎng)絡斷開時通過存儲網(wǎng)絡傳輸心跳消息??蛻舳顺绦驗檫\行在本計算節(jié)點上的每個已啟用高可用的虛擬機創(chuàng)建一個虛擬機控制塊并維護,服務端程序為運行在所有計算節(jié)點上的每個已啟用高可用的虛擬機創(chuàng)建一個虛擬機控制塊并維護,其中服務端程序維護的虛擬機控制塊超時時長比客戶端程序維護的虛擬機控制塊超時時長要長,每個虛擬機控制塊記錄虛擬機的高可用信息,包括虛擬機號、超時時長、故障轉(zhuǎn)移優(yōu)先級、時間戳、本虛擬機所在計算節(jié)點的客戶端程序標識。
[0034]如圖1所示,基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,用于數(shù)據(jù)中心,包括如下步驟:
[0035]S1.服務端程序在共享存儲上初始化一塊連續(xù)的空間作為邏輯卷,用于虛擬機的心跳檢測,其大小為共享存儲扇區(qū)大小的整數(shù)倍。
[0036]S2.每個客戶端程序分別連接到服務端程序,服務端程序查詢數(shù)據(jù)庫中是否有該客戶端程序的扇區(qū)池配置信息,客戶端程序的扇區(qū)池配置信息包括扇區(qū)池所在的邏輯卷、開始扇區(qū)號、結(jié)束扇區(qū)號、每個扇區(qū)的大小。如果沒有,則從邏輯卷中分配連續(xù)的多個扇區(qū)作為該客戶端程序的扇區(qū)池,將該扇區(qū)池配置信息記錄到數(shù)據(jù)庫,給該客戶端程序使用,并在扇區(qū)池的最后一個扇區(qū)寫入該客戶端程序的唯一標識,用于防止其他客戶端程序使用該扇區(qū)池,而所述最后一個扇區(qū)前面的連續(xù)扇區(qū)作為該客戶端程序的共享存儲消息隊列,用于該客戶端程序和服務器程序交換心跳消息。
[0037]S3.客戶端程序通過管理網(wǎng)絡從服務端程序獲取該客戶端程序的扇區(qū)池的配置信息和已啟用高可用的虛擬機號。
[0038]S4.客戶端程序向服務端程序發(fā)送心跳消息,并更新本客戶端程序維護的虛擬機控制塊的時間戳,無論心跳消息發(fā)送成功或失敗,客戶端程序檢查其維護的每個虛擬機控制塊是否超時。如圖2所示,詳細步驟如下:
[0039]S41.客戶端程序通過管理網(wǎng)絡向服務端程序周期性發(fā)送心跳消息;
[0040]S42.判斷心跳消息是否發(fā)送成功,若是,代表心跳消息發(fā)送成功,進入S43 ;若否,進入S44 ;
[0041]S43.更新本客戶端程序維護的虛擬機控制塊的時間戳,進入S46 ;
[0042]S44.將心跳消息寫入該客戶端程序的扇區(qū)池的共享存儲消息隊列中;
[0043]S45.判斷心跳消息是否寫入成功,若是,代表心跳消息發(fā)送成功,進入S43 ;若否,代表心跳消息發(fā)送失敗,進入S46 ;
[0044]S46.檢查本客戶端程序維護的每個虛擬機控制塊是否超時,若是,進入S47 ;若否,進入S41 ;
[0045]S47.刪除超時的虛擬機控制塊,并關(guān)閉該虛擬機,進入S41。
[0046]其中,心跳消息包括時間戳、扇區(qū)池號、客戶端程序標識和運行在本計算節(jié)點上的已啟用高可用的虛擬機號列表,虛擬機號列表的格式為“[虛擬機號,虛擬機號,虛擬機號]”。更新本客戶端程序維護的虛擬機控制塊的時間戳的方式為,查找發(fā)送成功的心跳消息中每個虛擬機號所對應的虛擬機控制塊,用心跳消息的時間戳替換所述虛擬機控制塊的時間戳。為了延長共享存儲磁盤的使用壽命,心跳消息的寫入方式為循環(huán)使用共享存儲消息隊列中的扇區(qū),每次使用的扇區(qū)為上一次使用后的下一個扇區(qū),當寫入最后一個扇區(qū)時,下次寫入第一個扇區(qū)。
[0047]S5.服務端程序接收客戶端程序發(fā)送的心跳消息,利用心跳消息中攜帶的時間戳更新服務端程序維護的虛擬機控制塊的時間戳,服務端程序檢查其維護的每個虛擬機控制塊是否超時。如圖3所示,詳細步驟如下:
[0048]S51.服務端程序通過管理網(wǎng)絡接收客戶端程序發(fā)送的心跳消息;
[0049]S52.判斷心跳消息在指定時間內(nèi)是否接收成功,若是,代表從管理網(wǎng)絡讀取心跳消息成功,進入S53 ;若否,進入S54 ;
[0050]S53.利用心跳消息中攜帶的時間戳更新服務端程序維護的虛擬機控制塊的時間戳,進入S56 ;
[0051]S54.讀取該客戶端程序的扇區(qū)池的共享存儲消息隊列中的所有心跳消息,并從中讀取最新的心跳消息;
[0052]S55.判斷心跳消息是否讀取成功,若是,代表從存儲網(wǎng)絡讀取心跳消息成功,進入S53;若否,代表從管理網(wǎng)絡和存儲網(wǎng)絡讀取到心跳消息失敗,有可能是服務端程序所在控制節(jié)點的管理網(wǎng)絡和存儲網(wǎng)絡都斷開了,此時無法判斷虛擬機狀態(tài),進入S51 ;
[0053]S56.檢查服務端程序維護的每個虛擬機控制塊是否超時,若是,進入S57,若否,進入S51 ;
[0054]S57.選擇另一臺合適的計算節(jié)點并通知其重新啟動已超時的虛擬機,進入S51。
[0055]其中,更新服務端程序維護的虛擬機控制塊的時間戳的方式為,查找接收成功的心跳消息中每個虛擬機號所對應的虛擬機控制塊,用心跳消息的時間戳替換所述虛擬機控制塊的時間戳。為了提高讀取心跳消息的速度,讀取心跳消息的方式為,首先一次讀請求將整個共享存儲消息隊列里的消息都讀取到內(nèi)存,然后在內(nèi)存中找出最新的心跳消息。
[0056]下面通過具體實施例對本發(fā)明做進一步說明。
[0057]如圖4和圖5所示,假設數(shù)據(jù)中心有三臺服務器:控制節(jié)點、計算節(jié)點A和計算節(jié)點B,三臺服務器使用同一個共享存儲上的同一個邏輯單元LUN1??刂乒?jié)點運行服務端程序,計算節(jié)點A運行客戶端程序A,計算節(jié)點B運行客戶端程序B,虛擬機0001、0002、0003運行在計算節(jié)點A上并且它們的磁盤文件存放在LUNl上,虛擬機0004、0005運行在計算節(jié)點B上并且它們的磁盤文件存放在LUNl上,虛擬機0001、0002、0003、0004、0005都啟用了高可用。本發(fā)明虛擬機高可用實現(xiàn)方法的詳細步驟如下:
[0058]S1.服務端程序在LUNl上劃分出一塊連續(xù)的空間作為邏輯卷,用于虛擬機的心跳檢測,大小為共享存儲扇區(qū)大小的整數(shù)倍N,假設共享存儲扇區(qū)大小為S字節(jié),則邏輯卷大小為SXN字節(jié)。
[0059]S2.客戶端程序A連接到服務端程序,服務端程序查詢數(shù)據(jù)庫中是否有客戶端程序A的扇區(qū)池配置信息(扇區(qū)池所在的邏輯卷、起始扇區(qū)號、結(jié)束扇區(qū)號、每個扇區(qū)的大小等),如果沒有,則將邏輯卷中的第I到第M個扇區(qū)分配給客戶端程序A作為扇區(qū)池使用,其中M > 2,將該扇區(qū)池配置信息記錄到數(shù)據(jù)庫,并在第M個扇區(qū)寫入客戶端程序A的唯一標識,第I個至第M-1個扇區(qū)作為客戶端程序A的共享存儲消息隊列,同理,客戶端程序B連接到服務端程序,如果數(shù)據(jù)庫中沒有客戶端程序B的扇區(qū)池配置信息,則服務端程序?qū)⑦壿嬀碇械牡贛+1個至第M+M個扇區(qū)分配給客戶端程序B作為扇區(qū)池使用,將該扇區(qū)池配置信息記錄到數(shù)據(jù)庫,并在第M+M個扇區(qū)寫入客戶端程序B的唯一標識,第M+1到第M+M-1個扇區(qū)作為客戶端程序B的共享存儲消息隊列。
[0060]S3.客戶端程序A和客戶端程序B分別通過管理網(wǎng)絡從服務端程序獲取扇區(qū)池的配置信息和已啟用高可用的虛擬機號。
[0061]S4.客戶端程序A通過管理網(wǎng)絡向服務端程序周期性發(fā)送心跳消息,心跳消息內(nèi)容包括:時間戳、客戶端程序A的扇區(qū)池號、客戶端程序A標識和運行在計算節(jié)點A上的已啟用高可用的虛擬機號列表,虛擬機號列表的格式為“ [0001,0002,0003] ”。如果客戶端程序A發(fā)送心跳消息成功,則直接用該心跳消息的時間戳更新客戶端程序A維護的虛擬機控制塊的時間戳(只更新虛擬機號在心跳消息中的虛擬機控制塊,虛擬機號不在此心跳消息中的虛擬機的控制塊不更新);如果心跳消息發(fā)送失敗,則將該心跳消息寫入分配給客戶端程序A的扇區(qū)池的共享存儲消息隊列中,如果寫入成功,則用該心跳消息的時間戳更新客戶端程序A維護的虛擬機控制塊的時間戳(只更新虛擬機號在心跳消息中的虛擬機控制塊,虛擬機號不在心跳消息中的虛擬機控制塊不更新)。每次發(fā)送消息后,不管心跳消息發(fā)送成功還是失敗,客戶端程序A都會檢查其維護的虛擬機控制塊是否超時,如果當前時間戳減去虛擬機控制塊的時間戳大于超時時長,則表明該虛擬機的心跳已經(jīng)有較長時間沒有發(fā)送成功,可能是計算節(jié)點A的管理網(wǎng)絡和存儲網(wǎng)絡都斷開了,因此關(guān)閉計算節(jié)點A上的虛擬機,并刪除所述虛擬機控制塊。同理,客戶端程序B向服務端程序發(fā)送心跳消息,心跳消息內(nèi)容包括:時間戳、客戶端程序B的扇區(qū)池號、客戶端程序B標識和運行在計算節(jié)點B上的已啟用高可用的虛擬機號列表,虛擬機號列表為“ [0004,0005] ”。
[0062]S5.服務端程序通過管理網(wǎng)絡接收客戶端程序A發(fā)送的心跳消息,如果在指定時間內(nèi)接收成功,則用該心跳消息的時間戳更新服務端程序維護的虛擬機控制塊的時間戳(只更新虛擬機號在心跳消息中的虛擬機控制塊,虛擬機號不在心跳消息中的虛擬機控制塊不更新);如果在指定時間內(nèi)未收到心跳消息,則讀取分配給客戶端程序A的整個扇區(qū)池的共享存儲消息隊列,并找出存儲在共享存儲消息隊列中的最新一條心跳消息,如果讀取成功,則利用該心跳消息攜帶的時間戳,更新服務端程序維護的虛擬機控制塊的時間戳(只更新虛擬機號在心跳消息中的虛擬機控制塊,虛擬機號不在心跳消息中的虛擬機控制塊不更新)。每次從管理網(wǎng)絡或者共享存儲消息隊列讀取心跳消息成功,服務端程序都會檢查其維護的虛擬機控制塊是否超時,如果當前時間戳減去虛擬機控制塊的時間戳大于超時時長,則表明已經(jīng)有較長時間沒有收到該虛擬機的心跳消息,可能是該虛擬機所在計算節(jié)點A的管理網(wǎng)絡和存儲網(wǎng)絡都斷開了或者該虛擬機所在計算節(jié)點A斷電,因此選擇另一臺合適的計算節(jié)點并通知其重新啟動該虛擬機。同理,服務端程序通過管理網(wǎng)絡接收客戶端程序B發(fā)送的心跳消息。
[0063]其中,當計算節(jié)點A的管理網(wǎng)絡斷開時,客戶端程序A發(fā)送心跳消息失敗,因此將心跳消息寫到客戶端程序A的扇區(qū)池的共享存儲消息隊列中,并更新虛擬機0001、0002、0003的虛擬機控制塊的時間戳,服務端程序因通過管理網(wǎng)絡接收心跳消息超時,因此從客戶端程序A的扇區(qū)池的共享存儲消息隊列中讀取心跳消息,并更新虛擬機0001、0002、0003的虛擬機控制塊的時間戳,客戶端程序A和服務端程序中虛擬機0001、0002、0003的虛擬機控制塊的時間戳通過共享存儲消息隊列保持更新。
[0064]當計算節(jié)點A的管理網(wǎng)絡和存儲網(wǎng)絡都斷開時,客戶端程序A向管理網(wǎng)絡發(fā)送心跳失敗,且心跳消息寫入客戶端程序A的扇區(qū)池的共享存儲消息隊列失敗,停止更新虛擬機0001、0002、0003的虛擬機控制塊的時間戳,在檢測到虛擬機0001、0002、0003的虛擬機控制塊超時的時候,關(guān)閉虛擬機0001、0002、0003,服務端程序因管理網(wǎng)絡收心跳超時,從客戶端程序A的扇區(qū)池的共享存儲消息隊列中讀取心跳消息,但讀取到的心跳消息時間戳始終沒變(客戶端程序A最后一次成功寫入的時間戳),在檢測到虛擬機0001、0002、0003的虛擬機控制塊超時的時候,通知客戶端程序B在計算節(jié)點B上重新啟動虛擬機0001、0002、
0003。
[0065]本發(fā)明不局限于上述實施方式,對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍之內(nèi)。本說明書中未作詳細描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。
【權(quán)利要求】
1.一種基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,用于數(shù)據(jù)中心,數(shù)據(jù)中心包括一個控制節(jié)點、一個共享存儲和至少兩個計算節(jié)點,控制節(jié)點運行服務端程序,每個計算節(jié)點上運行客戶端程序,客戶端程序為運行在本計算節(jié)點上的每個已啟用高可用的虛擬機創(chuàng)建一個虛擬機控制塊并維護,服務端程序為運行在所有計算節(jié)點上的每個已啟用高可用的虛擬機創(chuàng)建一個虛擬機控制塊并維護,其特征在于,實現(xiàn)方法包括以下步驟: 51.服務端程序在共享存儲上初始化一塊連續(xù)的空間作為邏輯卷; 52.每個客戶端程序分別連接到服務端程序,服務端程序從邏輯卷中分配連續(xù)的多個扇區(qū)作為該客戶端程序的扇區(qū)池,并在扇區(qū)池的最后一個扇區(qū)寫入該客戶端程序的唯一標識,所述最后一個扇區(qū)前面的連續(xù)扇區(qū)作為該客戶端程序的共享存儲消息隊列; 53.客戶端程序從服務端程序獲取該客戶端程序的扇區(qū)池配置信息和已啟用高可用的虛擬機號; 54.客戶端程序向服務端程序周期性發(fā)送心跳消息,并更新本客戶端程序維護的虛擬機控制塊的時間戳,客戶端程序檢查其維護的每個虛擬機控制塊是否超時; 55.服務端程序接收客戶端程序發(fā)送的心跳消息,利用心跳消息中攜帶的時間戳更新服務端程序維護的虛擬機控制塊的時間戳,服務端程序檢查其維護的每個虛擬機控制塊是否超時。
2.如權(quán)利要求1所述的基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,其特征在于:客戶端程序的扇區(qū)池配置信息包括扇區(qū)池所在的邏輯卷、開始扇區(qū)號、結(jié)束扇區(qū)號、每個扇區(qū)的大小。
3.如權(quán)利要求1所述的基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,其特征在于:數(shù)據(jù)中心還包括管理網(wǎng)絡交換機,控制節(jié)點、計算節(jié)點和管理網(wǎng)絡交換機形成管理網(wǎng)絡,控制節(jié)點、計算節(jié)點和共享存儲形成存儲網(wǎng)絡,客戶端程序和服務端程序優(yōu)先通過管理網(wǎng)絡傳輸心跳消息,當管理網(wǎng)絡斷開時通過存儲網(wǎng)絡傳輸心跳消息。
4.如權(quán)利要求1所述的基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,其特征在于:心跳消息包括時間戳、扇區(qū)池號、客戶端程序標識和運行在本計算節(jié)點上的已啟用高可用的虛擬機號列表。
5.如權(quán)利要求4所述的基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,其特征在于:虛擬機號列表的格式為“[虛擬機號,虛擬機號,虛擬機號]”。
6.如權(quán)利要求1所述的基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,其特征在于:每個虛擬機控制塊記錄虛擬機的高可用信息,包括虛擬機號、超時時長、故障轉(zhuǎn)移優(yōu)先級、時間戳、該虛擬機所在計算節(jié)點的客戶端程序標識。
7.如權(quán)利要求1所述的基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,其特征在于:步驟S4中,客戶端程序通過管理網(wǎng)絡向服務端程序發(fā)送心跳消息,如果發(fā)送成功,直接更新本客戶端程序維護的虛擬機控制塊的時間戳;如果發(fā)送失敗,將心跳消息寫入本客戶端程序的扇區(qū)池的共享存儲消息隊列中,再更新本客戶端程序維護的虛擬機控制塊的時間戳;客戶端程序檢查其維護的每個虛擬機控制塊是否超時,如果超時,刪除超時的虛擬機控制塊,并關(guān)閉該虛擬機,客戶端程序繼續(xù)向服務端程序發(fā)送心跳消息;如果未超時,客戶端程序繼續(xù)向服務端程序發(fā)送心跳消息。
8.如權(quán)利要求7所述的基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,其特征在于:心跳消息的寫入方式為循環(huán)使用共享存儲消息隊列中的扇區(qū),每次使用的扇區(qū)為上一次使用后的下一個扇區(qū),當寫入最后一個扇區(qū)時,下次寫入第一個扇區(qū)。
9.如權(quán)利要求1所述的基于共享存儲消息隊列的虛擬機高可用實現(xiàn)方法,其特征在于:步驟S5中,服務端程序通過管理網(wǎng)絡接收客戶端程序發(fā)送的心跳消息,如果在指定時間內(nèi)接收成功,利用心跳消息中攜帶的時間戳更新服務端程序維護的虛擬機控制塊的時間戳;如果超過指定時間未接收到心跳消息,則讀取該客戶端程序的扇區(qū)池的共享存儲消息隊列中的所有心跳消息,并從中讀取最新的心跳消息,再利用心跳消息中攜帶的時間戳更新服務端程序維護的虛擬機控制塊的時間戳;服務端程序檢查其維護的每個虛擬機控制塊是否超時,如果超時,選擇另一臺計算節(jié)點并通知其重新啟動已超時的虛擬機,服務端程序繼續(xù)接收心跳消息;如果未超時,服務端程序繼續(xù)接收心跳消息。
【文檔編號】H04L29/08GK104253860SQ201410462083
【公開日】2014年12月31日 申請日期:2014年9月11日 優(yōu)先權(quán)日:2014年9月11日
【發(fā)明者】阮澤林 申請人:武漢噢易云計算有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
商都县| 开阳县| 五峰| 虞城县| 博兴县| 犍为县| 太保市| 井陉县| 中阳县| 天全县| 莱芜市| 连云港市| 新野县| 临城县| 江津市| 乌拉特前旗| 南昌县| 广南县| 平远县| 蚌埠市| 大方县| 安庆市| 枞阳县| 安达市| 湖口县| 宝清县| 睢宁县| 邛崃市| 濮阳市| 会昌县| 大理市| 孟津县| 枣强县| 门头沟区| 云浮市| 高唐县| 依安县| 崇明县| 武山县| 杂多县| 光山县|