淺談虛擬化超融合架構(gòu)在G行的實踐
本文轉(zhuǎn)載自微信公眾號「匠心獨運維妙維效」,作者張智峰。轉(zhuǎn)載本文請聯(lián)系匠心獨運維妙維效公眾號。
一、概述
為進一步整合基礎(chǔ)設(shè)施資源以達到統(tǒng)一規(guī)范管理,G行于2016年選用了適用于分行的超融合基礎(chǔ)架構(gòu)方案,并以分布式部署的方式建立了私有云分行資源池。其上運行的系統(tǒng)多達數(shù)千套,支撐了分行本地業(yè)務系統(tǒng)在內(nèi)的大量生產(chǎn)系統(tǒng)的快速落地和穩(wěn)定運行,已經(jīng)成為各分行主要的IT基礎(chǔ)設(shè)施環(huán)境,實現(xiàn)了資源集中管理、靈活調(diào)配和高效部署的建設(shè)目標。
二、G行超融合基礎(chǔ)架構(gòu)
1.為什么采用超融合基礎(chǔ)架構(gòu)
超融合基礎(chǔ)架構(gòu)(HCI)是軟件定義的統(tǒng)一系統(tǒng),兼具傳統(tǒng)數(shù)據(jù)中心的所有要素:存儲、計算、網(wǎng)絡連接和管理。在虛擬化資源池的表現(xiàn)形式為每一個資源節(jié)點不僅僅具備計算、網(wǎng)絡、存儲和虛擬化等資源,還可以將多個節(jié)點通過網(wǎng)絡聚合起來,有統(tǒng)一的資源調(diào)度平臺來進行管理,并且可以實現(xiàn)模塊化的無縫橫向擴展。
相比較傳統(tǒng)的X86服務器與集中式存儲構(gòu)成的虛擬化平臺,以超融合架構(gòu)部署的資源池具有部署速度快,成本小,計算資源浪費少,節(jié)省機房空間等優(yōu)勢。
虛擬化超融合架構(gòu)恰好可以解決當時G行分行數(shù)據(jù)中心計算資源調(diào)配不靈活、系統(tǒng)高可用度低的痛點。而其良好的橫向擴展能力也能夠很好地應對日新月異的銀行業(yè)務高速增長,并且在建設(shè)初期無需投入大量的資金。
2、組網(wǎng)
基于可靠性考慮管理、業(yè)務、存儲平面由2個網(wǎng)口綁定,雙上行到2個接入交換機,不同網(wǎng)絡平面采用獨立的虛擬交換機在虛擬化平臺內(nèi)部完成配置,并采用vlan隔離。
3.分布式存儲場景下的數(shù)據(jù)保護
在超融合架構(gòu)中,每一個超融合節(jié)點既是一個計算節(jié)點也是存儲節(jié)點,這種分布式的特性再結(jié)合數(shù)據(jù)保護機制,使得分布式存儲可以很好地基于超融合架構(gòu)構(gòu)建一個易擴展、高可靠的存儲資源池。
而對于存儲用戶而言,存儲系統(tǒng)的可靠性是一個老生常談的話題了。在傳統(tǒng)的存儲中,大多是采用RAID的方式,來保證數(shù)據(jù)的高可靠性;而在分布式存儲系統(tǒng)中,多副本和EC(ErasureCode)是比較常見的數(shù)據(jù)保護方法。
那么什么是多副本?又如何理解EC?他們之間的區(qū)別和優(yōu)勢又是什么呢?
簡單說,多副本就是一份數(shù)據(jù)以副本的方式寫到多個分布式系統(tǒng)中的存儲節(jié)點中。這種多副本的數(shù)據(jù)保護方式,一來實現(xiàn)簡單,二來可靠性高。除非所有副本所在的存儲節(jié)點都故障,才會影響業(yè)務。但缺點是多副本的空間利用率偏低。
我們以三副本舉例(參見下圖)
對于服務器A的物理磁盤A上的數(shù)據(jù)塊P1,系統(tǒng)將它的數(shù)據(jù)備份為服務器B的物理磁盤B上的P1''和服務器C的物理磁盤C上的P1',P1、P1'和P1''共同構(gòu)成了同一個數(shù)據(jù)塊的三個副本。若P1所在的物理磁盤發(fā)生故障,則P1'和P1''可以繼續(xù)提供存儲服務,確保業(yè)務不受影響。
另外其數(shù)據(jù)重建機制也保證了,在存儲容量情況良好的條件下,當發(fā)生單個或多個存儲節(jié)點發(fā)生故障時,可以快速進行重建以保證同一元數(shù)據(jù)存在三個副本。示意圖如下:
然而三副本機制雖然在數(shù)據(jù)高可靠強一致方面表現(xiàn)出色,其存儲空間利用率僅為33%,這也增加了企業(yè)級用戶的存儲成本。
4.EC
EC是一種數(shù)據(jù)保護技術(shù),是指將n份原始數(shù)據(jù),增加m份數(shù)據(jù),并能通過n+m份中的任意n份數(shù)據(jù),還原為原始數(shù)據(jù)。如果把n+m份數(shù)據(jù)分布在存儲系統(tǒng)的不同節(jié)點上,那么任意小于等于m個節(jié)點故障(m份數(shù)據(jù)失效),都可以通過其他剩余的數(shù)據(jù)還原出原始數(shù)據(jù),從而達到不影響業(yè)務的目的。EC算法可以靈活配置,比如系統(tǒng)要滿足支持2個節(jié)點同時故障,則m=2即可。從空間利用率上,EC是優(yōu)于多副本的,以4+2為例,空間利用率為4/(4+2)=67%。這個利用率相當于三副本的2倍。而可靠性上,與三副本一樣可以滿足支持2個節(jié)點同時故障。不過以EC4+2為例,此種數(shù)據(jù)保護機制限制了超融合節(jié)點的擴容方式,每次最少擴容數(shù)量4+2=6臺。喪失了一部分超融合架構(gòu)引以為傲的靈活擴展能力。
最終G行從金融行業(yè)數(shù)據(jù)可靠性要求出發(fā),選擇了數(shù)據(jù)可靠性和強一致性更高的三副本機制,并保留了超融合架構(gòu)的靈活橫向擴容能力。
5.Xen Or KVM
G行超融合架構(gòu)資源池在建立初期選擇了技術(shù)上較為成熟的Xen架構(gòu)虛擬化技術(shù),而隨著kvm技術(shù)的日趨成熟,最終在2020年選擇了從Xen架構(gòu)升級到了KVM架構(gòu),兩者又有什么優(yōu)劣勢呢?
首先我們需要了解什么是虛擬化技術(shù)。Hypervisor是一種運行在基礎(chǔ)物理服務器和操作系統(tǒng)之間的中間軟件層,可允許多個操作系統(tǒng)和應用共享硬件。也可叫做VMM(virtualmachine monitor ),即虛擬機監(jiān)視器。
Hypervisors是一種在虛擬環(huán)境中的操作系統(tǒng)。他們可以訪問服務器上包括磁盤和內(nèi)存在內(nèi)的所有物理設(shè)備。Hypervisors不但協(xié)調(diào)著這些硬件資源的訪問,也同時在各個虛擬機之間施加防護。當服務器啟動并執(zhí)行Hypervisor時,它會加載所有虛擬機客戶端的操作系統(tǒng)同時會分配給每一臺虛擬機適量的內(nèi)存,CPU,網(wǎng)絡和磁盤。而根據(jù)Hypervisors扮演的角色和功能不同,衍生出了多種虛擬化技術(shù)。可以說Xen和KVM分別代表了半虛擬化和全虛擬化兩種虛擬化技術(shù)中。
全虛擬化(左)與半虛擬化(右)
全虛擬化:虛擬機完整的模擬了底層硬件,Linux系統(tǒng)直接從內(nèi)核級別為虛擬化提供支持,進行Hypervisor適配時不需要對操作系統(tǒng)進行修改。在全虛擬化的虛擬平臺中,GuestOS(客戶機操作系統(tǒng)即虛擬機操作系統(tǒng))并不知道自己是一臺虛擬機,它會認為自己就是運行在計算機物理硬件設(shè)備上的HostOS(宿主機操作系統(tǒng))。因為全虛擬化的Hypervisor會將一個OS所能夠操作的CPU、內(nèi)存、外設(shè)等物理設(shè)備邏輯抽象成為虛擬CPU、虛擬內(nèi)存、虛擬外設(shè)等虛擬設(shè)備后,再交由GuestOS來操作使用。這樣的GuestOS會將底層硬件平臺視為自己所有的,但是實際上,這些都是Hypervisor為GuestOS制造了這種假象。
KVM作為硬件輔助全虛擬化技術(shù),主要由兩個部分組成:KVM驅(qū)動和Qemu。KVM驅(qū)動直接被集成到linux系統(tǒng)(Intel-VT或AMD-V)中了,主要負責虛擬機創(chuàng)建、CPU和內(nèi)存的分配等等。
作為硬件輔助全虛擬化技術(shù),處理器直接提供了虛擬化支持(可以為多個操作系統(tǒng)虛擬化處理器)。內(nèi)存可以通過kvm進行虛擬化(借助linux的能力)。最后,I/O通過一個稍加修改的QEMU進程(執(zhí)行每個客戶操作系統(tǒng)進程的一個拷貝)進行虛擬化。
KVM向Linux中引入了一種除現(xiàn)有的內(nèi)核模式之外的新進程模式---客戶模式,它用來執(zhí)行部分客戶操作系統(tǒng)代碼。內(nèi)核模式表示代碼執(zhí)行的特權(quán)模式,而用戶模式則表示非特權(quán)模式(用于運行在內(nèi)核之外的程序)。根據(jù)運行內(nèi)容和目的,執(zhí)行模式可以針對不同的目的進行定義??蛻裟J降拇嬖诰褪菫榱藞?zhí)行客戶操作系統(tǒng)代碼即虛擬機操作系統(tǒng)的代碼,但是只針對那些非I/O的代碼。 在客戶模式中有兩種標準模式,因此客戶操作系統(tǒng)在客戶模式中運行可以支持標準的內(nèi)核,而在用戶模式下運行則支持自己的內(nèi)核和用戶空間應用程序??蛻舨僮飨到y(tǒng)的用戶模式可以用來執(zhí)行I/O操作,這是單獨進行管理的。
在客戶操作系統(tǒng)上執(zhí)行I/O的功能是由QEMU提供的。QEMU是一個平臺虛擬化解決方案,允許對一個完整的PC環(huán)境進行虛擬化(包括磁盤、圖形適配器和網(wǎng)絡設(shè)備)??蛻舨僮飨到y(tǒng)所生成的任何I/O請求都會被中途截獲,并重新發(fā)送到QEMU進程模擬的用戶模式中。
在內(nèi)存虛擬化方面上,由于KVM僅是一個簡單的虛擬化模塊,所以它的內(nèi)存管理沒有自我實現(xiàn),需借助于Linux內(nèi)核實現(xiàn)內(nèi)存管理。KVM能夠使用Linux所支持的任何存儲,在驅(qū)動程序的實現(xiàn)上,直接借助于Linux內(nèi)核來驅(qū)動硬件。
半虛擬化:需要對GuestOS的內(nèi)核代碼做一定的修改,才能夠?qū)uestOS運行在半虛擬化的VMM中。修改內(nèi)核后的GuestOS也知道自己就是一臺虛擬機。所以能夠很好的對核心態(tài)指令和敏感指令進行識別和處理,但缺點在于GuestOS的鏡像文件并不通用。
XEN包含三個基本組件:Hypervisor、Domain0、DomainU。其中Hypervisor運行在硬件之上,承載所有的操作系統(tǒng),提供CPU和內(nèi)存調(diào)度的作用。Domain0是管理員,,主要負責IO設(shè)備虛擬化。DomainU則是真正的XEN中的虛擬客戶機,而DomainU又分為兩類:一類全虛擬客戶機,一類半虛擬客戶機,后者是運行在經(jīng)過修改的操作系統(tǒng)之上。
總體來看,Xen是一個直接運行在計算機硬件之上的用以替代操作系統(tǒng)的軟件層,以此來實現(xiàn)在HostOS上并發(fā)運行多個GuestOS。而KVM是已經(jīng)被內(nèi)嵌到HostOS(Linux)內(nèi)核中。鑒于現(xiàn)在主流CPU都對虛擬化進行了適配,具備硬件虛擬化的條件,因此KVM可以適配市場上絕大部分的CPU。而從輕量化角度看,KVM更加精簡,不需要對客戶機操作系統(tǒng)進行修改,更加靈活易于部署,當遇到版本升級的需求時,Xen架構(gòu)往往要對宿主機底層OS打補丁,重新編譯整個內(nèi)核,風險可想而知。另外KVM作為虛擬化開源架構(gòu),其生態(tài)更加完善。因此最終G行選擇從Xen架構(gòu)升級為KVM虛擬化架構(gòu)。
三、超融合架構(gòu)未來發(fā)展
G行分行超融合基礎(chǔ)架構(gòu)資源池致力于為分行生產(chǎn)系統(tǒng)提供快速部署、靈活調(diào)配、高可用的基礎(chǔ)設(shè)施服務能力,為全行業(yè)務尤其是分行業(yè)務的快速發(fā)展提供有力支撐。繼續(xù)深耕基礎(chǔ)設(shè)施服務能力,配置調(diào)優(yōu),超融合組件升級迭代,總行管控平臺全面替換升級,監(jiān)控細粒度化建設(shè),都將是未來G行超融合架構(gòu)資源池發(fā)展的方向。在專注于加強基礎(chǔ)設(shè)施服務能力的基礎(chǔ)上,緊跟時代,以超融合為底座培育容器虛擬化部署適配能力也將是未來努力的方向。