四川中電啟明星信息技術(shù)有限公司研發(fā)中心 佘文魁 袁 亮 田富強(qiáng) 喻 梅
如今,虛擬化成為一種成熟的技術(shù),允許用戶創(chuàng)建自己的私有云,并為許多領(lǐng)域的網(wǎng)絡(luò)服務(wù)提供虛擬機(jī)(VM)。由于云上的計(jì)算節(jié)點(diǎn)通常執(zhí)行多個(gè)虛擬機(jī),否則任何崩潰計(jì)算節(jié)點(diǎn)的故障可能會(huì)導(dǎo)致一組虛擬機(jī)失敗。這意味著計(jì)算設(shè)備的可靠性在云時(shí)代比以往任何時(shí)候都更加重要。因此,有必要使用基于軟件的高可用性(HA)機(jī)制來(lái)保護(hù)計(jì)算節(jié)點(diǎn)上的虛擬機(jī)。
A.QEMU和KVM
QEMU 是可以的軟件組件模擬硬件設(shè)備,由FabriceBellard編寫(xiě)。因?yàn)樗ㄟ^(guò)軟件模擬CPU,性能有限。為了提高QEMU的性能,新版本的QEMU通常帶有KVM,通常稱為“QEMU-KVM”。KVM(基于內(nèi)核的虛擬機(jī))是一個(gè)開(kāi)源項(xiàng)目;它是Linux x86硬件的完全虛擬化解決方案。目前,KVM還與QEMU-KVM一起運(yùn)行,這是一個(gè)特殊版本的QEMU。為了提高速度,QEMU-KVM使用不同的方法來(lái)模擬CPU。QEMU-KVM將通過(guò)KVM模塊將由VM生成的所有CPU指令發(fā)送到實(shí)體CPU,以運(yùn)行。
B.Libvirt
Libvirt用于在使用虛擬化技術(shù)時(shí)解決各種管理不便問(wèn)題。它支持多種虛擬機(jī)管理程序,如KVM,Xen和VMware ESX。它還為各種語(yǔ)言(如C,Python和Java)提供遠(yuǎn)程過(guò)程調(diào)用。使用遠(yuǎn)程API,系統(tǒng)管理員可以輕松地控制另一個(gè)計(jì)算節(jié)點(diǎn)上的虛擬機(jī)。
Libvirt通常用于管理KVM的虛擬機(jī),其中Libvirt可以創(chuàng)建通信通道以連接到計(jì)算節(jié)點(diǎn)上的KVM監(jiān)視器。通過(guò)此通道,Libvirt可以向VM發(fā)送命令。此外,當(dāng)VM進(jìn)程意外關(guān)閉時(shí),節(jié)點(diǎn)操作系統(tǒng)還可以向Libvirt守護(hù)程序發(fā)送錯(cuò)誤消息。
C.相關(guān)高可用技術(shù)研究
許多商業(yè)服務(wù)器虛擬化軟件,軟件包支持高可用性功能。例如,VMware ESXi也在其設(shè)計(jì)中采用集群管理的概念。 VMware ESXi使用心跳作為主要的故障檢測(cè)方法。如果主HA服務(wù)器在給定時(shí)間段內(nèi)無(wú)法從VM接收心跳線,則主服務(wù)器將嘗試驗(yàn)證VM是否正忙于在VMware ESXi群集的數(shù)據(jù)存儲(chǔ)服務(wù)器中執(zhí)行I / O。如果答案為否,主HA服務(wù)器將會(huì)觸發(fā)恢復(fù)過(guò)程。
LW-HA的基本原理與流程如圖1所示,控制端對(duì)HA的檢測(cè)與處理各個(gè)環(huán)節(jié)均采用事件監(jiān)聽(tīng)方式,可支持大規(guī)模并發(fā)故障處理。這里采用瞬時(shí)事件觸發(fā)和任務(wù)輪循并行的方式,即保證檢測(cè)與恢復(fù)的時(shí)間最小化,同時(shí)又能保證各個(gè)環(huán)節(jié)失敗后能自動(dòng)重試。多點(diǎn)并發(fā)啟動(dòng)時(shí),虛擬機(jī)啟動(dòng)采用“排它鎖”,確保誰(shuí)優(yōu)先搶到虛擬機(jī)啟動(dòng)鎖,由誰(shuí)執(zhí)行啟動(dòng)操作,避免兩線程同時(shí)執(zhí)行虛擬機(jī)啟動(dòng)引起腦裂。
圖1 HA總體流程圖
計(jì)算節(jié)點(diǎn)在采集主機(jī)注冊(cè)信息時(shí),將所有網(wǎng)卡設(shè)備信息緩存起來(lái)。檢測(cè)時(shí)從緩存中遍歷所有已配IP的網(wǎng)卡信息,采用命令“ethtool網(wǎng)卡設(shè)備名”檢測(cè),從輸出結(jié)果中找到link detected 項(xiàng)的值,如果非”yes”(忽略大小寫(xiě))則判定為連接中斷。計(jì)算節(jié)點(diǎn)在通信異常時(shí),通過(guò)向探測(cè)ip清單中所有ip發(fā)起通信請(qǐng)求來(lái)確認(rèn)自身是否已成為通信孤島。
為了提升虛擬機(jī)的可用性,減少虛擬機(jī)服務(wù)停機(jī)時(shí)間,系統(tǒng)將檢測(cè)并在盡可能短的時(shí)間內(nèi)將服務(wù)中斷的虛擬機(jī)恢復(fù)運(yùn)行。LW-HA主要對(duì)以下六類場(chǎng)景進(jìn)行設(shè)計(jì)與實(shí)現(xiàn),如表1所示。
表1
通過(guò)對(duì)場(chǎng)景的共性進(jìn)行分析,實(shí)際上是解決兩類問(wèn)題,一是虛擬機(jī)宕機(jī);二是資源池?cái)嚯姟?/p>
(1)前置條件
控制節(jié)點(diǎn)及服務(wù)運(yùn)行正常,通信正常。
宿主機(jī)運(yùn)行正常,通信正常。
(2)故障認(rèn)定
虛擬機(jī)宕機(jī)認(rèn)定條件為,同時(shí)符合以下四個(gè)條件:
主機(jī)心跳均正常情況下,主機(jī)前一次心跳信息中某虛擬機(jī)domain存在,本次主機(jī)正常心跳情況下該虛擬機(jī)domain不存在。
數(shù)據(jù)庫(kù)中記錄的宿主機(jī)仍為當(dāng)前主機(jī)(排除剛遷移成功或遷移失敗,已解鎖)。
虛擬機(jī)為運(yùn)行狀態(tài)(排除剛強(qiáng)制關(guān)機(jī)成功,已解鎖)。
虛擬機(jī)未被鎖定為“停止中”或“跨主機(jī)遷移中”(排除正在停止或正在跨主機(jī)遷移)。
(3)調(diào)度流程(如圖2所示)
圖2 主機(jī)宕機(jī)HA流程圖
(1)前置條件
控制節(jié)點(diǎn)已啟動(dòng),控制服務(wù)已運(yùn)行,通信正常。
虛擬機(jī)原宿主機(jī)已啟動(dòng),并已成功發(fā)送心跳至
控制節(jié)點(diǎn)。
(2)故障認(rèn)定
資源池?cái)嚯姾螅瑪?shù)據(jù)庫(kù)中仍然保存有虛擬機(jī)的運(yùn)行狀態(tài)與宿主機(jī)信息,當(dāng)數(shù)據(jù)庫(kù)和控制節(jié)點(diǎn)啟動(dòng)后,由控制節(jié)點(diǎn)周期性輪循檢測(cè)關(guān)系在宿主機(jī)上,但無(wú)心跳的虛擬機(jī)。
(3)調(diào)度流程(如圖3所示)
圖3 資源池?cái)嚯奌A流程圖
以上就是LW-HA的原理及針對(duì)典型場(chǎng)景的分析與實(shí)現(xiàn)。下一節(jié)將通過(guò)實(shí)驗(yàn)驗(yàn)證該方案。
測(cè)試環(huán)境:
分別使用3臺(tái)物理機(jī)部署VMware ESXi6.0與LW-HA系統(tǒng),主機(jī)配置信息為IBM3550環(huán)境,雙Intel(R) Xeon(R) CPU E5-2640 V3 @2.60GHz,共32核,內(nèi)存64G;虛擬機(jī)配置信息為4vcpu,4G內(nèi)存,虛擬機(jī)gustos統(tǒng)一為centos7.1mini。
測(cè)試場(chǎng)景一:
在兩套系統(tǒng)中創(chuàng)建并運(yùn)行單臺(tái)虛擬機(jī),通過(guò)系統(tǒng)命令強(qiáng)制關(guān)閉,模擬虛擬機(jī)故障關(guān)閉場(chǎng)景。
測(cè)試場(chǎng)景二:
在兩套系統(tǒng)中某一主機(jī)上創(chuàng)建并運(yùn)行8臺(tái)虛擬機(jī),通過(guò)對(duì)運(yùn)行虛擬機(jī)的主機(jī)掉電的方式模擬主機(jī)故障。
通過(guò)日志記錄虛擬機(jī)恢復(fù)時(shí)間間隔,對(duì)兩種場(chǎng)景進(jìn)行10次測(cè)試采樣。
測(cè)試結(jié)果如下圖4,5所示:
圖4 單臺(tái)虛擬機(jī)HA測(cè)試記錄
圖5 單臺(tái)主機(jī)HA測(cè)試記錄
可以看到單臺(tái)虛擬機(jī)HA間隔時(shí)間VMware平均4.1秒,LW-HA平均間隔2.4秒;單臺(tái)主機(jī)HA間隔時(shí)間VMware平均57秒,LW-HA平均間隔21秒??梢钥吹絃W-HA方案對(duì)比VMware具有同樣的穩(wěn)定性和更高的敏感度。
本文在KVM虛擬化平臺(tái)上,提出一種輕量級(jí)的高可用機(jī)制(LW-HA),并給出了在不同場(chǎng)景下的實(shí)現(xiàn)原理與機(jī)制,最后通過(guò)實(shí)驗(yàn)得出該LW-HA機(jī)制在虛擬機(jī)宕機(jī)恢復(fù)及宿主機(jī)宕機(jī)虛擬機(jī)恢復(fù)方面均優(yōu)于商業(yè)軟件,是一種完美替換商業(yè)軟件HA的方案,也可以為虛擬機(jī)故障恢復(fù)機(jī)制方面提供一些參考。
[1]KVM官方網(wǎng)站[OL] http://www.linux-kvm.org/page/Main_Page.
[2]QEMU官方網(wǎng)址[OL] http://wiki.qemu.org/Main_Page.
[3]復(fù)旦大學(xué)并行處理研究所著.系統(tǒng)虛擬化[M].北京:清華大學(xué)出版社,2009
[4]倪華婓.虛擬化技術(shù)下高可用大規(guī)模集群系統(tǒng)HARing的設(shè)計(jì)和實(shí)現(xiàn),浙江大學(xué),2012.
[5]耿新民,王少峰,許飛.基于VMware的高可用性集群在電力信息系統(tǒng)中的應(yīng)用[J].上海電力學(xué)院學(xué)報(bào),2010,26(2):193-196.
[6]熊夢(mèng),楊松,莫展鵬等.一種虛擬機(jī)高可用機(jī)制:,CN 103729280 A[P].2014.