劉洪磊 沈健 王濤
摘要??? 本文選擇了Ubuntu Linux宿主操作系統(tǒng)+VirtualBox虛擬機實現(xiàn)了集群管理層,增加了各類虛擬設備包括軟件定義串口、軟件定義聲卡、軟件定義CAN口和軟件定義顯示,修復了客戶機3D加速缺陷,重寫了網(wǎng)絡虛擬設備以支持萬兆網(wǎng),基本達到了實用程度,在各種場景下掉電測試可用性約為99%。
【關(guān)鍵詞】虛擬機 高可用集群 終端集群
1 高可用集群介紹
高可用集群(High?Available Cluster),指一類以減少業(yè)務的服務中斷時間為目的的服務器集群。它通過一定集群技術(shù)保護業(yè)務程序運行,降低因軟硬件或人為故障對用戶業(yè)務的影響。
集群的可用性一般通過集群可靠性(Reliablity)和可維護性(Maintainablity)衡量。項目上一般采用平均無故障時間(MTTF)指標以度量系統(tǒng)可靠性,采用平均維修時間(MTTR)指標以度量系統(tǒng)可維護性,因而集群可用性指標計算公式為:HA=MTTF/(MTTF+MTTR)*100%,99.9%約為一年內(nèi)連續(xù)服務時的中斷時間不超過10小時。
通常業(yè)界提及的高可用集群,一般指C/S或B/S架構(gòu)中的服務器(server)集群——如數(shù)據(jù)庫服務器集群、WEB服務器集群、文件服務器集群等。一個高可用服務器集群由多個聯(lián)網(wǎng)的服務器硬件節(jié)點和管理套件構(gòu)成。管理套件一般匯總集群內(nèi)的軟硬件資源信息,相互檢測節(jié)點心跳,在節(jié)點故障時切換網(wǎng)絡、把指定的業(yè)務程序在其它節(jié)點啟動起來。這類管理套件已經(jīng)成熟,所管理的設備一般僅限計算、存儲和網(wǎng)絡設備,中心機房部署較多。
在實際應用中,大量面向終端用戶的業(yè)務程序——例如文檔程序、繪圖程序、分析程序等,也需要高可用性。這類業(yè)務程序在正常運行時,除了計算、存儲和網(wǎng)絡等設備外,通常還需要有鍵盤、鼠標、顯示器或觸摸屏,以及各類外設如COM串口、聲卡或攝像頭等設備。對于一些特殊場景,例如話務中心、指揮中心等,一般一個終端席位對應著一個固定職責。這類場景的高可用終端集群,需要保存業(yè)務程序的狀態(tài),并處理業(yè)務程序與鍵盤鼠標、顯示以及各類外設的關(guān)系。此處我們提出了一種基于虛擬機(Virtual Machine)的集群實施方案,結(jié)合軟件定義硬件(SDHW,Software Defined Hardware),實現(xiàn)了高可用終端集群。
2 基于虛擬機的高可用終端集群方案
2.1 系統(tǒng)方案概述
高可用終端集群系統(tǒng)由集群硬件和集群軟件構(gòu)成。集群硬件提供軟件運行環(huán)境。集群軟件與支撐硬件一起提供給用戶應用程序一個運行環(huán)境。
高可用終端集群硬件,包括固定在終端席位的鍵盤鼠標顯示器或觸摸屏,聯(lián)網(wǎng)的計算機,及各類已固定連接的串口或聲卡外設等,按作用劃分為計算存儲層、交換控制層、接口轉(zhuǎn)換層等3層。
其中,各主要組件通過10G以太網(wǎng)聯(lián)網(wǎng)。計算機就是一個符合一定標準的獨立計算機,運行業(yè)務程序。存儲服務器掛載多個RAID磁盤,提供集群存儲。切換板負責高速視頻數(shù)據(jù)與USB數(shù)據(jù)切換。接口板具有顯示制式轉(zhuǎn)換、網(wǎng)絡外設輸出等功能,外接顯示器、麥克風音響和串口等。集群內(nèi)網(wǎng)絡被分為3個平面,存儲網(wǎng)絡提供NAS/SAN存儲或磁盤數(shù)據(jù)同步服務,管理網(wǎng)絡提供低速外設網(wǎng)絡化和集群心跳、應用遷移等服務,業(yè)務網(wǎng)絡供最終用戶自己使用。
高可用終端集群軟件,包括物理(宿主)機系統(tǒng),虛擬機軟件,各類軟件定義設備,集群管理軟件以及用戶操作系統(tǒng)、用戶應用等,按作用可粗略劃分為設備定義層、集群管理層、操作系統(tǒng)層、用戶應用層等4層。
其中,各主要組件如有必要通過網(wǎng)絡通信交互。設備定義層,按照軟件定義硬件(Software Defined)思想設計,對顯示、聲卡以及串口等外設進行網(wǎng)絡化、虛擬化處理,以滿足終端集群的高可用需求。集群管理層,主要結(jié)合軟件定義設備、虛擬機等,提供給用戶一個操作系統(tǒng)安裝環(huán)境。操作系統(tǒng)與用戶應用,由用戶依據(jù)需求而安裝。在用戶應用層內(nèi),提供一個集群管理客戶端,讓用戶設置策略管理集群。
該集群系統(tǒng)將提供給用戶一個高可用終端運行環(huán)境。例如,用戶的業(yè)務程序正在一個主板上運行,當該主板故障時,這個主板上的操作系統(tǒng)連同業(yè)務程序?qū)⒆詣舆w移到指定主板上,恢復以前運行狀態(tài),繼續(xù)工作。原來用戶所在的鍵盤鼠標、顯示器等繼續(xù)可用。原有外設所接的設備如聲卡外接麥克風、串口GPS等可以繼續(xù)工作。
2.2 硬件環(huán)境設計
本集群內(nèi)的計算機、交換機、存儲服務器等組件,選擇市場通用IT基礎設施即可。其中建議計算機選擇DisplayPort輸出接口,可以輸出到多類制式的顯示器,支持熱插拔完成在線顯示切換。本集群內(nèi)的切換板、接口板,可以選擇市場單板拼裝或者自行開發(fā)。切換板完成顯示切換,可選擇市場高端KVM切換器替代。接口板提供顯示器制式轉(zhuǎn)換、網(wǎng)絡化串口、聲卡等功能,可選擇多個市場設備組裝。為了最終設備簡潔可靠,方便終端用戶使用,可以自行開發(fā)該集群硬件。
2.3 虛擬機選型
虛擬機(Virtual Machine,VM)技術(shù)是虛擬化的一種常用技術(shù),指通過軟件模擬的一個具有完整硬件功能的、運行在物理硬件隔離環(huán)境中的計算機系統(tǒng)。此處根據(jù)上下文,虛擬機有時指稱提供虛擬機運行環(huán)境的管理軟件(Virtual Machine Supervisor),或者僅指運行在模擬硬件上的一個客戶機操作系統(tǒng)(Guest Machine OS)。市場常用的虛擬機軟件如VMWare公司的Vmware虛擬機、ESX服務器,微軟公司的Hyper-V虛擬機,Oracle公司開源VirtualBox虛擬機,原劍橋大學開源的XEN虛擬機,Redhat公司開源的KVM虛擬機等。虛擬機監(jiān)視器(VMM,Virtual Machine Monitor)是虛擬機運行核心,它是一層處于計算機硬件(或宿主機系統(tǒng))與客戶機操作系統(tǒng)之間的代碼,運行在特權(quán)模式,隔離并管理上層運行的虛擬機,仲裁虛擬機對底層硬件的訪問。它結(jié)合虛擬機的設備管理模塊,為每個客戶機操作系統(tǒng)虛擬一套獨立于實際硬件的虛擬硬件環(huán)境(包括處理器,內(nèi)存,I/O設備等),把物理硬件轉(zhuǎn)換成用戶所需的虛擬硬件。
本集群內(nèi)的虛擬機,除了處理作為服務器角色的計算、網(wǎng)絡與存儲外,尚需要處理鍵盤鼠標顯示器或觸摸屏以及各類外設設備,同時具有故障遷移等功能。設計的主要規(guī)格可列表如下:
(1)支持客戶機安裝各系列Windows系統(tǒng)、Linux系統(tǒng)。
(2)支持客戶機SMP計算,虛擬CPU可達32核。
(3)支持IntelVT-x或AMD-V虛擬化技術(shù),提高性能。
(4)支持客戶機掛載虛擬的IDE/SCSI/SATA磁盤存儲。
(5)支持網(wǎng)絡橋接虛擬化。
(6)支持客戶機ACPI/APIC感知能力。
(7)具有客戶機本地顯示功能,不依賴遠端顯示。
(8)支持客戶機多屏顯示。
(9)虛擬機支持遠端顯示能力,不依賴客戶機操作系統(tǒng)。
(10)支持3D硬件加速,提供客戶機3D虛擬化加速能力。
(11)提供本機USB、顯示等設備作為客戶機虛擬設備。
(12)支持掛載遠端物理設備,提供客戶機串口、聲卡等虛擬設備。
(13)支持直接掛載iSCSI磁盤。
(14)客戶機支持網(wǎng)絡PXE啟動(Preboot Execution Environment)。
(15)支持客戶機在線遷移。
(16)客戶機心跳檢測能力,可檢測客戶機操作系統(tǒng)宕機。
由于市場通用虛擬機軟件無法完全滿足這些需求,所以我們將選擇開源的虛擬機軟件定制開發(fā)。
2.4 故障遷移設計
對那些運行在Windows或Linux上的終端應用程序,很難僅遷移應用軟件本身狀態(tài),使其在故障后繼續(xù)運行。此處采用虛擬機遷移技術(shù)實現(xiàn)應用遷移。
虛擬機遷移技術(shù),是指通過復制虛擬機數(shù)據(jù)(如虛擬機配置、磁盤存儲或內(nèi)存狀態(tài)等),可以讓一個虛擬機在不同的物理機上運行。(這里不涉及P2V或V2P的客戶物理機遷移。)一般按遷移時機把其分為2類遷移。第1類遷移是離線遷移(或冷遷移、靜態(tài)遷移、常規(guī)遷移),需要在虛擬機關(guān)閉或暫停的情況下執(zhí)行,它將源物理(宿主)機上的虛擬機配置、磁盤文件等復制到目標物理機內(nèi),通過配置虛擬機可以重新運行。第2類遷移是在線遷移(或熱遷移、動態(tài)遷移、實時遷移),可以在虛擬機正常運行的情況下執(zhí)行,它需要源和目標物理機采用共享存儲,以相同目錄結(jié)構(gòu)存放虛擬機,直接將源物理(宿主)機上的虛擬機運行環(huán)境以及內(nèi)存實時同步到目標物理機,讓虛擬機接著以前狀態(tài)繼續(xù)運行。第1類離線遷移無法滿足高可用性需求。為了達到終端集群的高可用性,這里重點討論第2類在線遷移。
目前開源的虛擬機軟件如LinuxKVM或OracleVirtualBox等,在源和目標物理機都正常運行時執(zhí)行在線遷移,從用戶角度看虛擬機僅有毫秒(milliseconds)級別中斷。
注:遷移成功后,源上客戶機的內(nèi)存、磁盤存儲和網(wǎng)絡連接等在目標物理機上保持不變,源物理機上的客戶機關(guān)閉,目標物理機上的客戶機繼續(xù)運行。
但是此場景并非自動故障遷移所需要的。對于自動故障遷移,僅當源物理機(和其客戶機操作系統(tǒng))故障崩潰時,我們才需要目標物理機上的客戶機操作系統(tǒng)繼續(xù)運行。在源物理機正常時,目標物理機上客戶機系統(tǒng)不應運行。
當集群系統(tǒng)啟用自動故障遷移功能時,在源物理機正常運行時,目標物理機上的虛擬機處于熱備狀態(tài),不實際運行。當源物理機崩潰后,目標物理機上立即接管客戶機系統(tǒng),恢復客戶機系統(tǒng)的運行。在故障遷移后,原客戶機系統(tǒng)所連接的外設如鍵盤鼠標顯示器、串口、聲卡等保持不變,繼續(xù)可用。設計的主要規(guī)格可列表如下:
(1)虛擬機基于共享存儲運行,支持在線遷移。
(2)客戶機系統(tǒng)遷移到目標機后,原外設連接關(guān)系保持不變,外設繼續(xù)可用。
(3)支持設定主備節(jié)點,配置熱備關(guān)系。
(4)提供故障狀態(tài)檢測,支持自動遷移。
(5)磁盤存儲支持文件鎖定機制,避免同一個虛擬機同一時刻在不同主機運行。
(6)支持客戶機內(nèi)終端業(yè)務程序感知遷移事件。
(7)遷移時間滿足一般終端業(yè)務程序中斷的要求。
自動故障遷移,可在開源虛擬機軟件的在線遷移或增量快照源碼上修訂。
2.4.1 熱備時的內(nèi)存復制機制
原在線遷移主要是內(nèi)存復制。設遷移時網(wǎng)絡復制速度為X*Byte/s(考慮壓縮等),VM運行時內(nèi)存速度Y*Byte/s,顯然在時間t內(nèi)如:∫t0x<∫t0y,則不可能在時間t內(nèi)完整復制原VM運行內(nèi)存。只有在時間t之后暫停VM使y=0,才可以復制。
原在線遷移流程無法滿足熱備不停機要求。我們改進流程,采用鎖定并復制機制來實現(xiàn),以新增內(nèi)存代價降低熱備影響,實現(xiàn)不連續(xù)熱備。該鎖定并復制說明如下:
(1)在時間t時刻點,設△M=∫t0y—∫t0x,虛擬機鎖定△M內(nèi)存。
(2)虛擬機在t時刻點之后,新的寫內(nèi)存操作如有涉及到△M內(nèi)存,則觸發(fā)trap,在物理機上分配新的內(nèi)存。
此時理論上,源虛擬機不必暫停。
(3)遷移程序在t時刻點之后,繼續(xù)復制△M內(nèi)存到目標物理機上。這個復制預計可在t2=△M/x時間內(nèi)完成。
(4)則目標物理機上在約t+t2時刻點完成復制,其VM內(nèi)存是源虛擬機在t時刻點的完整鏡像。
如果源虛擬機故障,則此時在目標物理機上,配合正確的運行環(huán)境如磁盤存儲等,就可以恢復虛擬機在t時刻的運行狀態(tài),從t時刻點繼續(xù)運行。
2.4.2 復制機制的性能分析原在線遷移實現(xiàn),在t時刻源虛擬機要暫
停若干毫秒,直至t+t2時刻點才能繼續(xù)運行,嚴重影響性能。
采用鎖定并復制機制,理論上則在t→t+t2時間內(nèi),源虛擬機可以繼續(xù)運行,因?qū)Ω骆i定地址需要觸發(fā)trap,性能比正常運行會有降低。
在采用鎖定并復制機制實現(xiàn)熱備時,應處理內(nèi)存與磁盤存儲的關(guān)系,保持一致性。2.4.3熱備時的故障遷移流程
我們采用鎖定并復制機制,說明熱備時的故障遷移流程。
(1)(Startup)源虛擬機啟動。同時執(zhí)行熱備初始化[1]:a)標記磁盤存儲開始更新,b)分配VM內(nèi)存、虛擬設備數(shù)據(jù)以及VM寄存器等影子緩沖區(qū),c)預備復制VM內(nèi)存(存為目標VM快照文件,或運行目標物理機服務端,復制源VM內(nèi)存到目標機內(nèi)存)。
(2)(Migrating)源虛擬機開始運行,讀寫內(nèi)存,更新存儲。在VM寫存儲時,采用ROW(Redirect On Write)機制更新(注1)。在VM寫內(nèi)存時,同時復制寫數(shù)據(jù)到目標,并開始作熱備倒計時。
(3)源虛擬機正常運行。同時存儲采用ROW機制更新,VM運行時的刷新內(nèi)存被復制傳輸?shù)侥繕耍^續(xù)熱備倒計時。(Migrating)
(4)(Seprating)熱備倒計時結(jié)束。此時,源虛擬機對未復制內(nèi)存首次寫動作采用COW(Copy On Write)機制(注2),保留最后時刻點源VM的寄存器、虛擬設備數(shù)據(jù)和運行內(nèi)存等映像數(shù)據(jù),標記對應時刻的存儲快照。同時復制源VM最后時刻映像數(shù)據(jù)到目標。
(5)源虛擬機正常運行。源VM最后時刻映像數(shù)據(jù)完成復制,目標內(nèi)具有了完整VM狀態(tài)(及存儲數(shù)據(jù))。此時,源虛擬機關(guān)閉內(nèi)存COW機制并更新內(nèi)存索引。同時上次增量存儲分片可合并到原磁盤存儲。
(6)(Migrating)源虛擬機運行,預備下一輪熱備。
如果源虛擬機故障(Collapsed),則此時在目標物理機上,加載上一次完整的VM虛擬機狀態(tài),匹配正確的存儲快照,即可恢復虛擬機運行(Running)(注3)。
注1:ROW機制,Redirect On Write,在虛擬機處于熱備狀態(tài)時(Migrating或Setparing),其間磁盤存儲更新作為分片快照保存。一個分片快照與正在熱備復制的內(nèi)存匹配。一個VM內(nèi)存熱備動作完成后,Migrating期間的快照可被合并到主存儲,形成一個完整VM快照。如果源虛擬機在Migrating期間崩潰,則丟棄當時的存儲更新分片快照,回滾到上一次匹配狀態(tài)。這樣來解決故障恢復時的內(nèi)存與磁盤存儲一致性問題。
注2:COW機制,Coyp On Write,在‘未復制內(nèi)存被首次寫更新時,其原有數(shù)據(jù)頁將被復制到等待緩沖區(qū),后續(xù)再復制到目標內(nèi),避免當VM內(nèi)存刷新速度大于熱備復制速度時的不收斂問題。
注3:此處把這種策略稱為雙機熱備。我們可以選用另一種帶優(yōu)先級的負荷分擔完成自動故障遷移。當集群系統(tǒng)采用負荷分擔時,在源物理機正常運行時,目標物理機上的其它客戶機也正常運行。當一個高優(yōu)先級的客戶機系統(tǒng)所處的物理機崩潰后,該客戶機系統(tǒng)將被遷移到指定目標物理機上繼續(xù)運行,而目標物理機上的原客戶機將自動暫停。
2.5 軟件定義外設
終端計算機在用戶使用時,通常有鍵盤、鼠標、顯示器或觸摸屏,以及各類外設如COM串口、聲卡或攝像頭等設備。作為高可用終端集群,需要在自動故障遷移后,原有終端所接的外設保持可用。但是采用計算機線纜或PCB布線直接連接的外設,很難做到遷移。我們借鑒軟件定義存儲(Software DefinedStorage)模型,對計算機所連的外設進行網(wǎng)絡化、虛擬化,使外設遷移易于實現(xiàn)。其中,網(wǎng)絡服務層與物理聲卡在同一接口板內(nèi),它具有2個功能:
(1)抽象定義原物理聲卡功能與配置;
(2)在TCP/IP網(wǎng)絡上發(fā)布服務。網(wǎng)絡接口與網(wǎng)絡服務交互,連接遠端聲卡設備給本機使用。
管理控制層作為集群管理服務端的一部分功能:
(1)控制設備應用模式;
(2)隨集群策略故障遷移。虛擬聲卡設備,則依據(jù)OS的設備規(guī)范,提供虛擬聲卡給客戶機操作系統(tǒng)。當故障發(fā)生時,虛擬機將自動在故障遷移的同時,把在用聲卡外設隨遷到目標機器,目標機器仍可以采用故障機器的聲卡來播放與錄音。
2.6 軟件定義顯示
考慮到繪圖程序的使用以及DirectDraw與3D硬件加速的場景,顯卡作為一種高負載、大流量的設備,我們需要特殊處理顯卡設備。此處把顯卡內(nèi)置在本計算機,顯卡外接顯示器部分借鑒軟件定義存儲(Software Defined Storage)模型,在硬件架構(gòu)中增加針對顯示的交換控制層,對計算機所連接的顯示器進行虛擬化,使故障時的顯示遷移易于實現(xiàn)。
其中,DP交換控制層完成類似以太網(wǎng)交換機的功能,把一個DP制式數(shù)據(jù)封包交換到指定的顯示器接口內(nèi)。接口轉(zhuǎn)換主要完成從DP到VGA/DVI/HDMI等顯示格式數(shù)據(jù)轉(zhuǎn)換,包括控制數(shù)據(jù)和顯示器應答數(shù)據(jù)。3D硬件加速通過虛擬顯卡轉(zhuǎn)換完成。
這樣在故障遷移時原虛擬顯卡數(shù)據(jù)被隨遷到目標物理上,可以保證源虛擬機正常運行。同時,管理控制層則下發(fā)指令給DP交換控制組件,本物理機顯示數(shù)據(jù)將被交換到原故障機器顯示器上。
軟件定義顯示類似于KVM切換器,與RDP遠程桌面不同。RDP遠程桌面需要2個計算機,顯示性能受2個計算機限制,DirectDraw與3D硬件加速受限(僅Windows 7或以上版本支持RemoteFX)。
2.7 設備健康管理
高可用終端集群,基于IPMB、TCP/IP實現(xiàn)設備健康管理。
設計的主要規(guī)格可列表如下:
(1)設備硬件電壓、溫度檢測,運行狀態(tài)檢測。
(2)宿主機系統(tǒng)CPU、內(nèi)存、網(wǎng)絡與進程狀態(tài)等檢測。
(3)集群的共享存儲、軟件定義外設等檢測。
(4)虛擬機運行狀態(tài)檢測。
(5)熱備遷移狀態(tài)檢測。當檢測到異常數(shù)據(jù)時,系統(tǒng)自動記錄并報警。
3 方案實現(xiàn)
基于此設計,我們實現(xiàn)了一個非完整方案的高可用終端集群。
我們采用自行開發(fā)硬件,完成了方案所述硬件環(huán)境。我們選擇了Ubuntu Linux宿主操作系統(tǒng)+VirtualBox虛擬機實現(xiàn)了集群管理層,增加了各類虛擬設備包括軟件定義串口、軟件定義聲卡、軟件定義CAN口和軟件定義顯示,修復了客戶機3D加速缺陷,重寫了網(wǎng)絡虛擬設備以支持萬兆網(wǎng),基本達到了實用程度,在各種場景下掉電測試可用性約為99%。
參考文獻
[1]肖力.深度實踐KVM[M].機械工業(yè)出版社,2015.
[2]《Windows DriveKit Help》,Microsoft Corporation,2009.
[3]《Oracle VM VirtualBox User Manual》,Oracle Corporation,2017.
[4]梅宏,郭耀.軟件定義的時代,2017.
[5]《Software-Defined Networking: The new Norm for Networks》白皮書,Open Networking Foundation, 2012-4-13.