1. 什么是虛擬化和遷移
什么是虛擬化
“虛擬化 ”是一個描述運行軟件的廣義計算機術(shù)語喻圃,通常體現(xiàn)為在單一系統(tǒng)上運行多個操作系統(tǒng)队寇,這些操作系統(tǒng)同時運行澈蚌,而每個操作系統(tǒng)又是相互獨立的轴猎。大多數(shù)現(xiàn)行的虛擬化實現(xiàn)使用一個“虛擬機管理程序 ”(hypervisor)辑奈,即一個軟件層或子系統(tǒng)仇冯,該子系統(tǒng)控制硬件并向“客機操作系統(tǒng) ”提供訪問底層硬件的途徑腮猖。通過向客機操作系統(tǒng)提供虛擬化的硬件虛擬機管理程序允許多種操作系統(tǒng)在相同的物理系統(tǒng)中運行,該虛擬機管理系統(tǒng)稱為“客機 ”(guest)赞枕,虛擬化操作系統(tǒng)有多種方式:
虛擬化方式
- 全虛擬化
全虛擬化利用處理器的硬件特性澈缺,向客機提供底層實體系統(tǒng)的總抽象。這創(chuàng)建了新的虛擬系統(tǒng)炕婶,被稱為一個“虛擬機 ”(virtual machine)姐赡,它允許客機操作系統(tǒng)在無需修改的情況下運行∧啵客機操作系統(tǒng)和任何在客機虛擬機器中的應(yīng)用并不會察覺出虛擬化環(huán)境并正常運作项滑。硬件支持虛擬化這項技術(shù),用于實現(xiàn)在 Red Hat Enterprise Linux 中 KVM 的全面虛擬化涯贞。- 半虛擬化
半虛擬化應(yīng)用一系列呈現(xiàn)給虛擬機的軟件和數(shù)據(jù)結(jié)構(gòu)枪狂,需要客機中的軟件修改以使用半虛擬環(huán)境。半虛擬化包含整個內(nèi)核宋渔,就像 Xen 準虛擬機州疾,或者虛擬化 I/O 設(shè)備的驅(qū)動程序一樣。- 軟件虛擬化(或仿真)
軟件虛擬化利用更慢的二進制轉(zhuǎn)換和其他仿真技術(shù)運行未更改的操作系統(tǒng)皇拣。Red Hat Enterprise Linux 不支持軟件虛擬化严蓖。
什么是遷移薄嫡?
“遷移 ”(migration)描述了一個客體虛擬機從一個主機遷移到另一個主機的過程。鑒于虛擬機在虛擬化環(huán)境下運行颗胡,而非直接在硬件上運行毫深,該遷移是可以實現(xiàn)的。遷移一個虛擬機有兩種途徑:即時遷移和離線遷移毒姨。
遷移類型
- 離線遷移
離線遷移暫脱颇瑁或關(guān)閉虛擬機,接著移動一個虛擬機的內(nèi)存鏡像到目標主機弧呐。虛擬機在目標主機上恢復闸迷,在源主機上被虛擬機使用的內(nèi)存得以釋放。- 即時遷移
即時遷移是將一個活躍虛擬機從一個實體主機遷移到另一個實體主機的過程泉懦。
2. Red Hat Enterprise Linux 的 KVM 和虛擬化
何謂 KVM 稿黍?
KVM(基于內(nèi)核的虛擬機疹瘦,Kernel-based Virtual Machine)是為 AMD64 和 Intel 64 硬件上的 Linux 提供的完全虛擬化的解決方案崩哩,它包括在標準 Red Hat Enterprise Linux 7 內(nèi)核中。KVM 可運行多種無需修改的 Windows 和 Linux 客機操作系統(tǒng)言沐。 Red Hat Enterprise Linux 的 KVM 虛擬機監(jiān)控程序使用 libvirt API 和 libvirt 的工具程序(如 virt-manager邓嘹、virsh)進行管理。虛擬機以多線程的 Linux 進程形式運行险胰,并通過上面提到的工具程序進行管理汹押。
過度分配
KVM 監(jiān)控程序支持系統(tǒng)資源“過度分配 ”(overcommitting)功能。過度分配意味著可以分配比系統(tǒng)中實際擁有的資源更多的虛擬化 CPU 或內(nèi)存起便。過度分配內(nèi)存允許主機充分利用物理內(nèi)存來分配更多虛擬內(nèi)存棚贾,從而達到提升客機密度的目的。
精簡配置
“精簡配置 ”(thin provisioning)允許靈活分配內(nèi)存榆综,并且為每個客機虛擬機優(yōu)化可用空間妙痹。它產(chǎn)生一種現(xiàn)象,即客機物理內(nèi)存比實際可用內(nèi)存更多鼻疮。這與過度分配功能不同怯伊,因為它只適用于存儲,而不適用于 CPU 或內(nèi)存分配判沟。但是耿芹,過度分配功能所存在的風險同樣適用于這個功能。
KSM
KVM hypervisor 使用的 “Kernel SamePage Merging ”(KSM)允許 KVM 客機共享相同內(nèi)存頁面挪哄。這些共享頁一般是通用的庫或其他相同的吧秕、高頻使用的數(shù)據(jù)。KSM 通過避免重復的內(nèi)存迹炼,使具有相同或相似客機操作系統(tǒng)的客機密度更大寇甸。
QEMU 客機代理
“QEMU 客機代理 ”(QEMU Guest Agent)在客機操作系統(tǒng)上運行,通過它,主機可以向客機操作系統(tǒng)發(fā)出命令拿霉。
Hyper-V 入門知識
Red Hat Enterprise Linux 7 的 KVM 實現(xiàn)了幾個 Hyper-V 兼容功能吟秩,Windows 客機通過使用它們可以提高性能和穩(wěn)定性,從而使得 Windows 客機如在微軟 Hyper-V 虛擬機監(jiān)控程序上運行一般绽淘。
磁盤 I/O 節(jié)流
當幾個虛擬機同時運行涵防,可能會因為使用過多磁盤 I/O 對系統(tǒng)性能形成干擾。KVM 中的“磁盤 I/O 節(jié)流 ”(Disk I/O throttling)對從虛擬機器向主機發(fā)出的磁盤 I/O請求作出限定 沪铭。這可以防止虛擬機過度使用共享資源壮池,并影響其他虛擬機的性能。
自動化 NUMA 平衡
“自動化 NUMA 平衡 ”功能在不需要對 Red Hat Enterprise Linux7 虛擬機進行手工性能優(yōu)化的情況下杀怠,提高 NUMA 硬件系統(tǒng)上運行的應(yīng)用程序的性能椰憋。自動化 NUMA 平衡功能會把所執(zhí)行的任務(wù)(線程或進程)移到和所需要訪問的內(nèi)存更接近的地方。
虛擬 CPU 熱添加
虛擬 CPU (vCPU) 熱添加功能可以在無需要停機的情況下赔退,根據(jù)需要為運行的虛擬機增加處理能力橙依。分配到虛擬機的 vCPU 可能會被添加到運行的客機上,來滿足工作量需求硕旗,或維持與工作負載相關(guān)的服務(wù)等級協(xié)議 (SLA)窗骑。
3. 虛擬化硬件設(shè)備
Red Hat Enterprise Linux 7 的虛擬化功能為虛擬機提供了三種不同形式的系統(tǒng)設(shè)備。這三種形式包括:
- 虛擬和仿真設(shè)備
- 半虛擬化設(shè)備
- 物理共享設(shè)備
這些硬件設(shè)備都被顯示為物理連接到虛擬機漆枚,但設(shè)備的驅(qū)動以不同方式工作创译。
3.1 虛擬和仿真設(shè)備
KVM 在軟件中實現(xiàn)了虛擬機的多個核心設(shè)備。這些仿真硬件設(shè)備對虛擬化操作系統(tǒng)至關(guān)重要墙基。
仿真設(shè)備即完全使用軟件實現(xiàn)的虛擬化設(shè)備软族。
仿真驅(qū)動可能使用物理設(shè)備,或虛擬化軟件設(shè)備残制。仿真驅(qū)動是虛擬機和 Linux 內(nèi)核(管理源設(shè)備)間的“翻譯層”立砸。設(shè)備層的指示會由 KVM 虛擬機監(jiān)控程序進行完全轉(zhuǎn)換。任何可以被 Linux 內(nèi)核識別的同類設(shè)備(儲存痘拆、網(wǎng)絡(luò)仰禽、鍵盤和鼠標),都可以作為仿真驅(qū)動的后端源設(shè)備纺蛆。
虛擬化 CPU (vCPU)
無論主機 CPU 的數(shù)量有多少吐葵,主機系統(tǒng)都可以為客機提供多達 160 個虛擬化 CPU (vCPU)。
仿真圖形設(shè)備
有兩種仿真圖形設(shè)備可供選擇桥氏。這類設(shè)備可以使用 SPICE (Simple Protocol for Independent Computing Environments)協(xié)議或 VNC 進行連接:
- Cirrus CLGD 5446 PCI VGA 卡(使用cirrus設(shè)備)
- 標準 VGA 圖形卡温峭,帶有 Bochs VESA 擴展程序(硬件等級,包括所有非標準模式)
仿真系統(tǒng)組件
仿真以下核心系統(tǒng)組件來提供基本系統(tǒng)功能:
- Intel i440FX 主機 PCI 網(wǎng)橋
- PIIX3 PCI 到 ISA 的網(wǎng)橋
- PS/2 鼠標和鍵盤
- EvTouch USB 圖形平板設(shè)備
- PCI UHCI USB 控制器與虛擬化 USB 集線器
- 仿真串口
- EHCI 控制器字支,虛擬化 USB 存儲和 USB 鼠標
- USB 3.0 xHCI 主機控制器(Red Hat Enterprise Linux 7.1 技術(shù)預(yù)覽)
仿真聲音設(shè)備
Red Hat Enterprise Linux 6.1 以上版本提供了仿真(Intel) HDA 聲音設(shè)備凤藏, intel-hda
奸忽。此設(shè)備由以下客機運行系統(tǒng)進行支持:
- Red Hat Enterprise Linux 7,用于 x86_64 架構(gòu)
- Red Hat Enterprise Linux 6揖庄,用于 i386 和 x86_64 架構(gòu)
- Red Hat Enterprise Linux 5栗菜,用于 i386 和 x86_64 架構(gòu)
- Red Hat Enterprise Linux 4,用于 i386 和 x86_64 架構(gòu)
- Windows 7蹄梢,用于 i386 和 x86_64 架構(gòu)
- Windows 2008 R2疙筹,用于 x86_64 架構(gòu)
以下仿真聲音系統(tǒng)同樣可供選擇,但鑒于與固定客機運行系統(tǒng)兼容性問題禁炒,不推薦使用:ac97
,仿真 Intel 82801AA AC97 音頻兼容聲卡
仿真監(jiān)視器設(shè)備
Red Hat Enterprise Linux 6.0 及以上版本提供了兩種仿真監(jiān)視器設(shè)備幕袱。監(jiān)視器可以在虛擬機超載或未響應(yīng)時,自動重啟虛擬機擂煞。
watchdog程序包務(wù)必安裝在客機上惦辛。
兩種可供選擇的設(shè)備為:
i6300esb
箫锤,仿真 Intel 6300 ESB PCI 監(jiān)視器設(shè)備浪耘。它支持客機操作系統(tǒng) Red Hat Enterprise Linux 版本 6.0 以上,為推薦使用設(shè)備。ib700
,仿真 iBase 700 ISA 監(jiān)視器設(shè)備冒冬。ib700
監(jiān)視器僅支持使用 Red Hat Enterprise Linux 6.2 以上版本的客機。
兩種監(jiān)視器設(shè)備均支持客機操作系統(tǒng) Red Hat Enterprise Linux 6.2 以上版本的 i386 與 x86_64 架構(gòu)。
仿真網(wǎng)絡(luò)設(shè)備
兩種仿真網(wǎng)絡(luò)設(shè)備可供選擇:
e1000
設(shè)備仿真了 Intel E1000 網(wǎng)絡(luò)適配器(Intel 82540EM、82573L、82544GC)戳表。rtl8139
設(shè)備仿真了 Realtek 8139 網(wǎng)絡(luò)適配器。
仿真儲存驅(qū)動
儲存驅(qū)動與儲存池可以使用這些仿真設(shè)備昼伴,將儲存設(shè)備與虛擬機相連匾旭。客機使用仿真儲存驅(qū)動可訪問儲存池圃郊。
注意季率,同所有虛擬設(shè)備一樣,儲存驅(qū)動不是儲存設(shè)備描沟。對于虛擬機器飒泻,該驅(qū)動作為備用儲存設(shè)備、文件或儲存池容量進行使用吏廉。備用儲存設(shè)備可為任何支持的儲存設(shè)備泞遗、文件、或儲存池容量形式席覆。
仿真 IDE 驅(qū)動
KVM 提供兩種仿真 PCI IDE 接口史辙。仿真 IDE 驅(qū)動可以用于將多達四個虛擬化 IDE 硬盤或虛擬化 IDE 光盤驅(qū)動組合與每臺虛擬機相連接。仿真 IDE 驅(qū)動同樣可用于虛擬化 CD-ROM 和 DVD-ROM 驅(qū)動佩伤。
仿真軟盤驅(qū)動
仿真軟盤驅(qū)動用于創(chuàng)造虛擬化軟驅(qū)聊倔。
仿真 AHCI 控制器
仿真 Advanced Host Controller Interface(AHCI)是 IDE 的一種替代產(chǎn)品。它包括在 Red Hat Enterprise Linux 7.1 中作為技術(shù)預(yù)覽生巡。
3.2 半虛擬化設(shè)備
半虛擬化為客機使用主機上的設(shè)備提供了快速且高效的通訊方式耙蔑。KVM 為虛擬機提供準虛擬化設(shè)備,它使用 Virtio API 作為虛擬機監(jiān)控程序和客機的中間層孤荣。
一些半虛擬化設(shè)備可以減少 I/O 的延遲甸陌,并把 I/O 的吞吐量提高至近裸機水平,而其它準虛擬化設(shè)備可以把本來無法使用的功能添加到虛擬機上盐股。當虛擬機運行大小需要密集 I/O 操作的應(yīng)用程序時钱豁,推薦使用半虛擬化設(shè)備,而不是使用仿真設(shè)備疯汁。
所有 virtio 設(shè)備都有兩部分:主機設(shè)備和客機驅(qū)動牲尺。半虛擬化設(shè)備驅(qū)動允許客機操作系統(tǒng)訪問主機系統(tǒng)上的物理設(shè)備。
半虛擬化設(shè)備的驅(qū)動必須安裝在客機操作系統(tǒng)上幌蚊。默認情況下谤碳,半虛擬化設(shè)備驅(qū)動包含在 Red Hat Enterprise Linux 4.7 以上版本凛澎、Red Hat Enterprise Linux 5.4 以上版本、以及 Red Hat Enterprise Linux6.0 以上版本中估蹄。半虛擬化設(shè)備驅(qū)動須在 Windows 客機上手動安裝塑煎。
半虛擬化網(wǎng)絡(luò)設(shè)備(virtio-net)
半虛擬化網(wǎng)絡(luò)設(shè)備是虛擬化網(wǎng)絡(luò)設(shè)備,它為虛擬機提供了網(wǎng)絡(luò)訪問能力臭蚁,并可以提供網(wǎng)絡(luò)性能及減少網(wǎng)絡(luò)延遲最铁。
半虛擬化塊設(shè)備(virtio-blk)
半虛擬化塊設(shè)備是高性能虛擬化儲存設(shè)備,它可以為虛擬機提供高性能垮兑、低延遲的 I/O 存儲冷尉。半虛擬化塊設(shè)備由虛擬機監(jiān)控程序支持,與虛擬機相連(軟盤驅(qū)動除外系枪,它只能被仿真)雀哨。
半虛擬化控制器設(shè)備(virtio-scsi)
半虛擬化 SCSI 控制器設(shè)備是一種更為靈活且可擴展的 virtio-blk 替代品。virtio-scsi 客機能繼承目標設(shè)備的各種特征私爷,并且能操作幾百個設(shè)備雾棺,相比之下,virtio-blk 僅能處理 28 臺設(shè)備衬浑。
virtio-scsi 完全支持以下客機操作系統(tǒng):
- Red Hat Enterprise Linux 7
- Red Hat Enterprise Linux 6.4 以上版本捌浩。
- Windows Server 2008(32/64 比特)
- Windows Server 2008 R2
- Windows 7(32/64 比特)
- Windows Server 2012
- Windows Server 2012 R2
- Windows 8(32/64 比特)
- Windows 8.1(32/64 比特)
半虛擬化時鐘
使用時間戳計數(shù)器(TSC,Time Stamp Counter)作為時鐘源的客機可能會出現(xiàn)與時間相關(guān)的問題工秩。KVM 在主機外圍工作尸饺,這些主機在向客機提供半虛擬化時間時沒有固定的 TSC。此外助币,半虛擬化時鐘會在客機運行 S3 或掛起 RAM 時幫助調(diào)整所需時間浪听。半虛擬化時鐘不支持 Windows 客機。
半虛擬化串口設(shè)備 (virtio-serial)
半虛擬化串口設(shè)備是面向比特流的字符流設(shè)備眉菱,它為主機用戶空間與客機用戶空間之間提供了一個簡單的交流接口迹栓。
氣球設(shè)備(virtio-balloon)
氣球(ballon)設(shè)備可以指定虛擬機的部分內(nèi)存為沒有被使用(這個過程被稱為氣球“充氣” — inflation),從而使這部分內(nèi)存可以被主機(或主機上的其它虛擬機)使用倍谜。當虛擬機這部分內(nèi)存時迈螟,氣球可以進行“放氣”(deflated),主機就會把這部分內(nèi)存重新分配給虛擬機尔崔。
半虛擬化隨機數(shù)字生成器 (virtio-rng)
半虛擬化隨機數(shù)字生成器使虛擬機可以直接從主機收集熵或隨意值來使用,以進行數(shù)據(jù)加密和安全褥民。因為典型的輸入數(shù)據(jù)(如硬件使用情況)不可用季春,虛擬機常常急需熵。取得熵很耗時消返;virtio-rng 通過直接把熵從主機注入客機虛擬機從而使這個過程加快 载弄。
半虛擬化圖形卡(QXL)
半虛擬化圖形卡與 QXL 驅(qū)動一同提供了一個有效地顯示來自遠程主機的虛擬機圖形界面耘拇。SPICE 需要 QXL 驅(qū)動。
3.3 物理主機設(shè)備
特定硬件平臺允許虛擬機直接訪問多種硬件設(shè)備及組件宇攻。在虛擬化中惫叛,此操作被稱為 “設(shè)備分配”(device assignment)。設(shè)備分配又被稱作 “傳遞”(passthrough)逞刷。
VFIO 設(shè)備分配
虛擬功能 I/O(VFIO)是 Red Hat Enterprise Linux 7 中一個新的內(nèi)核驅(qū)動嘉涌,它為虛擬機提供了訪問物理硬件的高性能。
VFIO 把主機系統(tǒng)上的 PCI 設(shè)備與虛擬機直接相連夸浅,允許客機在執(zhí)行特定任務(wù)時有獨自訪問 PCI 設(shè)備的權(quán)限仑最。這就象 PCI 設(shè)備物理地連接到客機虛擬機上一樣。
通過把設(shè)備分配從 KVM 虛擬機監(jiān)控系統(tǒng)中移出帆喇,并在內(nèi)核級中強制進行設(shè)備隔離警医,VFIO 比以前的 PCI 設(shè)備分配有了很大的改進。VFIO 安全性更高且與安全啟動兼容坯钦。在 Red Hat Enterprise Linux 7 中预皇,它是默認的設(shè)備分配機制。
Red Hat Enterprise Linux 7 中 VFIO 把分配設(shè)備的數(shù)量從 Red Hat Enterprise Linux 6 中最多 8 個增加到 32 個婉刀。VFIO 也支持對 NVIDIA GPU 的分配深啤。
USB 傳遞
KVM hyperviso 支持把主機系統(tǒng)上的 USB 設(shè)備連接到虛擬機。USB 設(shè)備分配允許客機擁有在執(zhí)行特定任務(wù)時有專有訪問 USB 設(shè)備的權(quán)利路星。這就象 USB 設(shè)備物理地連接到虛擬機上一樣溯街。
SR-IOV
SR-IOV (Single Root I/O Virtualization)是一個 PCI 快捷標準,把單一物理 PCI 功能擴展到同分散的虛擬化功能(VF)一樣共享 PCI 資源洋丐。通過 PCI 設(shè)備分配呈昔,每個功能可以被不同虛擬機使用。
支持 SR-IOV 的 PCI-e 設(shè)備提供一個單一根功能(如單一以太網(wǎng)接口)友绝,并把多個各自分離的虛擬設(shè)備作為獨特 PCI 設(shè)備功能堤尾。每個虛擬化設(shè)備都可能有自身獨特的 PCI 配置空間、內(nèi)存映射的寄存器以及單獨的基于 MSI 的中斷系統(tǒng)迁客。
NPIV
N_Port ID Virtualization(NPIV)是對光纖通道設(shè)備有效的功能郭宝。NPIV 共享單一物理 N_Port 作為多個 N_Port ID。NPIV 為 HBA(光纖通道主機總線適配器掷漱,F(xiàn)ibre Channel Host Bus Adapter)提供和 SR-IOV 為 PCIe 接口提供的功能相似的功能粘室。有了 NPIV,可以為 SAN(存儲區(qū)域網(wǎng)絡(luò)卜范,Storage Area Network)提供帶有虛擬光纖通道發(fā)起程序的虛擬機衔统。
NPIV 可以提供帶有企業(yè)級存儲解決方案的高密度虛擬環(huán)境。
3.4 客機 CPU 型號
“CPU 型號”(CPU model)規(guī)定了哪些主機 CPU 功能對客機操作系統(tǒng)有效。
qemu-kvm和libvirt包含了幾種當前處理器型號的定義锦爵,允許用戶啟用僅在新型 CPU 型號中可用的 CPU 功能舱殿。 對客機有效的的 CPU 功能取決于主機 CPU 的支持、內(nèi)核以及qemu-kvm代碼险掀。為了使虛擬機可以在具有不同 CPU 功能集的主機間安全地進行遷移沪袭,qemu-kvm在默認狀態(tài)下不會把主機 CPU 的所有功能都提供給客機操作系統(tǒng),而是根據(jù)所選的 CPU 型號來為虛擬機提供相關(guān)的 CPU 功能。如果虛擬機啟用了某個 CPU 功能,則此虛擬機無法遷移到不支持向客機提供此功能的主機上先壕。