聊一聊虛擬化基礎知識
引言
開始前給大家舉個例子:
場景如下:一臺服務器只有有8G內存,程序A需要4G內存,程序B需要4G內存,傳統架構無法滿足這樣的場景,那只有依靠虛擬化來解決,通過虛擬化方式,我們可以不僅提供2臺4G內存,更可以通過內存氣泡、內存復用、內存置換等技術實現超分配!
Part A.虛擬化簡介
虛擬化是云計算的基礎,基于虛擬化我們可以實現私有云、公有云、桌面云等。
虛擬化是一種資源管理技術,是將計算機的各種實體資源(CPU、內存、磁盤空間、網絡適配器等),予以抽象、轉換后呈現出來并可供分區、組合為一個或多個電腦配置環境。由此,打破實體結構間的不可切割的障礙,使用戶可以比原本的配置更好的方式來應用這些電腦硬件資源。這些資源的新虛擬部分是不受現有資源的架設方式,地域或物理配置所限制。一般所指的虛擬化資源包括計算能力和數據存儲。
虛擬化架構
幾個重要的概念:
A.宿主機:Host ,即物理服務器
B.虛擬機:Guest ,也稱客戶機、虛機
C.VMM(virtual Machine Monitor):即Hypervisors,它是一種運行在基礎物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享硬件。Hypervisors是一種在虛擬環境中的“元”操作系統。他們可以訪問服務器上包括磁盤和內存在內的所有物理設備。Hypervisor不但協調著這些硬件資源的訪問,也同時在各個虛擬機之間施加防護。當服務器啟動并執行Hypervisor時,它會加載所有虛擬機客戶端的操作系統同時會分配給每一臺虛擬機適量的內存、CPU、網絡和磁盤。
Part B.虛擬化的分類
【常規分類】
此外還有混合虛擬化,是指將一個內核級驅動器插入到宿主操作系統內核。這個驅動器作為虛擬硬件管理器來協調虛擬機和宿主操作系統之間的硬件訪問。混合虛擬化需要底層硬件支持虛擬化擴展功能。
【基于Guest OS CPU對硬件訪問分類】
CPU的運行級別,Ring 0也稱為核心態,操作系統需要直接訪問硬件和內存,使用特權指令,控制中斷、修改頁表、訪問設備,因此它的代碼需要運行在***運行級別。Ring 3也稱為用戶態,需要訪問磁盤、寫文件時,則需要調用系統函數,這樣的操作稱為用戶態到核心態。
大家都知道宿主機的操作系統運行級別是Ring 0,虛擬機的操作系統就無法在Ring 0級別運行,但是虛擬機OS不知道這一點,執行的命令與物理機無異,但是沒有執行權限是會出錯的。所以這時候虛擬機管理程序(VMM)需要避免這件事情發生。 虛機怎么通過 VMM 實現 Guest CPU 對硬件的訪問,根據其原理不同有三種實現技術:
1. 全虛擬化
2. 半虛擬化
3. 硬件輔助的虛擬化
主要區別見下圖:
A.全虛擬化
一般采用優先級壓縮技術(Ring Compression)和二進制代碼翻譯技術(BinaryTranslation)。優先級壓縮技術讓VMM和Guest運行在不同的特權級下。對x86架構而言,即VMM運行在***特權級別Ring 0下,guest OS運行在Ring 1下,用戶應用運行在Ring 3下。因此,Guest OS的核心指令無法直接下達到計算機系統硬件執行,而是需要經過VMM的捕獲和模擬執行(部分難以虛擬化的指令需要通過Binary Translation技術進行轉換)。
B.輔助虛擬化
當前主要有Intel的VT-x和AMD的AMD-V這兩種技術。其核心思想都是通過引入新的指令和運行模式,使VMM和Guest OS分別運行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS運行在Ring 0下。通常情況下,Guest OS的核心指令可以直接下達到計算機系統硬件執行,而不需要經過VMM。當Guest OS執行到特殊指令的時候,系統會切換到VMM,讓VMM來處理特殊指令。
C.全虛擬化
采用Hypercall技術。Guest OS的部分代碼被改變,從而使Guest OS會將和特權指令相關的操作都轉換為發給VMM的Hypercall(超級調用),由VMM繼續進行處理。而Hypercall支持的批處理和異步這兩種優化方式,使得通過Hypercall能得到近似于物理機的速度。
【按虛擬化技術分類】
1.服務器虛擬化,計算、存儲、網絡和IO的虛擬化
2.存儲虛擬化,如Serversan,支持虛擬化的存儲陣列等
3.網絡虛擬化,如vlan、虛擬防火墻、虛擬分布式交換機
4.桌面(應用)虛擬化,即桌面云
其他分類這里不在細說,下面給大家分享下KVM和XEN的一些區別:
【對比KVM和XEN】
Xen作為***秀的半虛擬化引擎,在基于硬件的虛擬化幫助下,現在也完全支持虛擬化MS Windows。被設計成一個獨立的內核,它只需要Linux執行 I/O,這樣使得它非常的大,并且它有自己的調度程序、內存管理器、計時器和機器初始化程序。
做華為虛擬化的同學應該都知道有個Dom0,這個Dom0是個什么東西呢?這個Domain 0(特權虛擬機)是其他虛擬機的管理者和控制者,可以構建其他更多Domain,并管理虛擬設備。它還能執行管理任務,比如虛擬機的休眠、喚醒和遷移其他虛擬機。此外,還有個Dom u,這個是指除了Dom 0之外的普通虛擬機。
KVM是一個獨特的管理程序,其讓Linux內核自身變成一個管理程序,通過KVM作為一個內核模塊實現,在虛擬環境下Linux內核集成管理程序將其作為一個可加載的模塊,可以簡化管理以及提升性能。KVM使用標準Linux調度程序、內存管理器和其他服務。將虛擬技術建立在內核上而不是去替換內核。
KVM架構
Xen架構
此外,還有微軟的Hyper-V、OpenVz,這里不再跟大家介紹!
Part C.虛擬化的優勢
1.降低運營成本
服務器虛擬化降低了IT基礎設施的運營成本,運維人員可以從繁重的物理服務器、OS、中間件及兼容性的管理工作解放處理,減少人工干預頻率,使管理更加強大、便捷。
2.縮短上線周期
虛擬化中對可以將需要批量預安裝機器進行模板化,使用模板創建虛擬機,不僅可以縮短安裝周期,也可以減少人工帶來的配置失誤。從而縮短操作系統安裝部署周期,進而縮短業務的上線周期。
3.提高可靠性
通過集群部署、雙網卡、雙電源以及OS盤的RAID策略都可以為我們提升基礎架構的可靠性。通過對集群設置,我們可以實現虛擬機的冷熱遷移,故障恢復甚至容錯等,從而在架構上實現了高可靠。
4.提高資源利用率
擺脫傳統架構單臺服務器單個應用,通過虛擬化技術,資源可以以更小的單位提供,可以實現一比多的形式,很大程度提高了物理資源的利用率,同時,可對虛擬機進行隔離,保證了安全性。
5.動態資源調度(DRS)
通過DRS可以實現機房節能環保,降低功耗,在資源閑置時自動遷移并關閉部分資源,資源緊張時可自動開啟資源并負載均衡
Part D.幾種虛擬化關鍵技術
一、內存復用
a.內存共享:虛擬機內存只讀時,可共享同一內存空間,需要寫時,再分配空間。
b.內存氣泡:虛擬機之間的內存交換負載,即內存使用低的釋放給內存使用較高的虛擬機。
c.內存置換:暫時不用的內存置換到存儲中,從而提高內存使用。
二、CPU相關
CPU虛擬化的開啟,物理在BIOS里面設置相關Virtual Technology項,如果需要開啟虛擬化嵌套,則需要在VMwareworkstation設置相關虛擬化模式,如果是kvm的嵌套則可能需要升級內核。
三、ServerSan
ServerSan通常基于傳統的X86服務器,配以SSD做緩存和萬兆網卡做傳輸,同時滿足了計算和存儲資源,從而實現了計算和存儲的融合,大多數的ServerSan都基于開源的Ceph,不僅可以實現高性能,也可以實現數據的多副本,更可以實現存儲的高級功能,如快照、鏈接克隆、精簡配置等。
主要特點如下:
1.軟件定義,獨立于硬件;
2.分布式,不存在單點故障;
3.系統自治,自動進行故障自愈和數據平衡;
4.融合系統,存儲和計算部署在相同硬件上;
5.橫向擴展,最小部署(至少3臺),按需擴容;
6.強一致性,只有所有副本寫成功,單次寫操作完成,確保從任意副本數據的完整性;