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