1.KVM虛擬化
1.1.虛擬化介紹
虛擬化技術(shù)指通過技術(shù)手段,將物理資源虛擬化成多個(gè)獨(dú)立運(yùn)行的邏輯資源,以服務(wù)器計(jì)算資源虛擬化為例,可以通過虛擬化技術(shù),將一臺(tái)物理服務(wù)器虛擬成多個(gè)獨(dú)立運(yùn)行、不相互干擾的虛擬主機(jī)。
虛擬化層(Hypervisor)通常是以內(nèi)核驅(qū)動(dòng)的形式提供,它運(yùn)行于操作系統(tǒng)之上,在虛擬化層之上虛擬出來(lái)一個(gè)個(gè)虛擬主機(jī),而虛擬主機(jī)多數(shù)以操作系統(tǒng)進(jìn)程的形式存在,而針對(duì)虛擬主機(jī)的命令請(qǐng)求,虛擬化層或調(diào)用操作系統(tǒng)命令進(jìn)行解釋執(zhí)行,或透過操作系統(tǒng)直接操作硬件芯片進(jìn)行命令執(zhí)行。
典型的虛擬化工作層次如下圖所示。

圖1虛擬化工作層次
虛擬化有多種分類,包括全虛擬化、半虛擬化、操作系統(tǒng)虛擬化等,不同的虛擬化原理上略有差異,但本質(zhì)上是相似的,這里以全虛擬化為例。
全虛擬化就是上面介紹的在操作系統(tǒng)和硬件之間存在一個(gè)虛擬化層,由虛擬化層完整的模擬虛擬主機(jī)運(yùn)行環(huán)境。
典型的全虛擬化包括VMware、IBM zSeries等,本文所講解的KVM也被認(rèn)為是典型的全虛擬化技術(shù)。
1.2.KVM簡(jiǎn)介
KVM從提出到應(yīng)用時(shí)間并不算長(zhǎng),但是由于主流廠商的支持,以及KVM自身開源的特性,使得大量用戶開始熟悉并使用這一虛擬化技術(shù)?
從使用上講KVM運(yùn)行于Linux操作系統(tǒng)這上,但是支持linux、windows等虛擬主機(jī)的制備與運(yùn)行,在服務(wù)器虛擬化應(yīng)用方面,可面向大型IDC數(shù)據(jù)中心、企業(yè)級(jí)數(shù)據(jù)中心提供穩(wěn)定的虛擬化支撐技術(shù);在桌面虛擬化方面,可面向各類企事業(yè)單位、實(shí)驗(yàn)室、教學(xué)環(huán)境提供穩(wěn)定的虛擬桌面解決方案。
1.3.KVM主要特性
KVM在內(nèi)存、存儲(chǔ)、驅(qū)動(dòng)設(shè)備、性能等方面有比較好的特性,下面簡(jiǎn)述其這些特性:
一、內(nèi)存管理
KVM繼承了Linux的內(nèi)存管理功能,其虛擬機(jī)內(nèi)存管理相當(dāng)于Linux 進(jìn)程中內(nèi)存管理,即可以在內(nèi)存區(qū)域內(nèi)以大頁(yè)面形式進(jìn)行高性能交換,也可以磁盤文件的形式進(jìn)行內(nèi)存擴(kuò)展。
KVM 支持來(lái)CPU芯片廠商最新的內(nèi)存虛擬化功能,支持 Intel 的擴(kuò)展頁(yè)面表 (EPT) 和 AMD 的快速虛擬化索引 (RVI),以實(shí)現(xiàn)更低的 CPU 利用率和更高的吞吐量。此外通過內(nèi)存頁(yè)面共享技術(shù),可以實(shí)現(xiàn)更高效的內(nèi)存管理,這些技術(shù)名為內(nèi)核同頁(yè)合并 (KernelSame-page Merging, KSM)。KSM 掃描每個(gè)虛擬機(jī)的內(nèi)存,如果虛擬機(jī)擁有相同的內(nèi)存頁(yè)面,KSM 將這些頁(yè)面合并?一個(gè)在虛擬機(jī)之間共享的頁(yè)面,僅存儲(chǔ)一個(gè)副本。如果一個(gè)來(lái)賓嘗試更改這個(gè)共享頁(yè)面,它將得到自己的專用副本。
?、存儲(chǔ)管理
KVM 可使用多種存儲(chǔ)協(xié)議來(lái)存儲(chǔ)虛擬機(jī)鏡像,如:本地磁盤(IDE、SCSI與SATA)、NAS、NFS、SAMBA/CIFS、iSCSI、FC SAN。
KVM 支持全局文件系統(tǒng) (GFS2) 等共享文件系統(tǒng)上的虛擬機(jī)鏡像,以允許虛擬機(jī)鏡像在多個(gè)宿主之間共享或使用邏輯卷共享。虛擬主?磁盤鏡像支持瘦配置,支持通過僅在虛擬機(jī)需要時(shí)分配存儲(chǔ)空間,而不是提前分配整個(gè)存儲(chǔ)空間,以節(jié)約存儲(chǔ)空間。
KVM 的原生磁盤格式為 QCOW2,它多級(jí)快照、壓縮?加密。
三、遷移管理
KVM 支持冷遷移與熱遷移,特別是熱遷移可使虛擬主機(jī)在不同的物理宿主之間在線轉(zhuǎn)移而不中斷服務(wù)。熱遷移對(duì)用戶是透明的。
四、設(shè)備驅(qū)動(dòng)程序
KVM 支持混合虛擬化,允許虛擬機(jī)使用優(yōu)化的 I/O 接口而不使用模擬的設(shè)備,以提供網(wǎng)絡(luò)與塊設(shè)備的I/O性能。
KVM 支持半虛擬化驅(qū)動(dòng)要求采用IBM 和 Red Hat 聯(lián)合 Linux 社區(qū)開發(fā)的VirtIO標(biāo)準(zhǔn),它是一個(gè)與虛擬機(jī)管理程序獨(dú)立的、構(gòu)建設(shè)備驅(qū)動(dòng)程序的接口,允許為多個(gè)虛擬機(jī)管理程序使用一組相同的設(shè)備驅(qū)動(dòng)程序,能夠?qū)崿F(xiàn)更出色的虛擬主機(jī)互操作性。
五、性能和可伸縮性
KVM有極強(qiáng)的性能和可伸縮性,單虛擬主機(jī)最多支持16 個(gè)虛擬 CPU 、 256GB 內(nèi)存,可運(yùn)行于2565個(gè)特理CPU核、1TB以上內(nèi)存的物理主機(jī)中。
2.KVM部署與安裝
2.1.軟硬件環(huán)境
常規(guī)的x86服務(wù)器(32位或64位),要求服務(wù)器的CPU芯片或支持AMD-V或支持Intel-VT等硬件虛擬化技術(shù)。
[root@kvm /]# cat /proc/cpuinfo | grep 'vmx smx' | less
flags : fpu vme de pse tscmsr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr ssesse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebsbts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitords_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt aeslahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid
KVM需要運(yùn)行于Linux操作系統(tǒng)環(huán)境下,通常宿主機(jī)器是64位,KVM上面的虛擬主機(jī)可以是64位也可以是32位,如果宿主機(jī)器是32位,KVM上面的虛擬主機(jī)只能是32位。
2.2.安裝KVM及相關(guān)軟件
在Linux下通過yum命令可自動(dòng)下載并安裝 KVM,操作如下:
[root@kvm /]#yum –y install kvm kmod-kvm qemukvm-qemu-img
安裝相關(guān)聯(lián)軟件包,如virt-viewer、virt-manager、libvirt、libvirt-python、python-virtinst等,命令如下:
[root@kvm /]# yum install virt-viewer virt-managerlibvirt libvirt-python python-virtinst
2.3.虛擬網(wǎng)絡(luò)
KVM自身沒有虛擬網(wǎng)絡(luò)的設(shè)置功能,主要依賴于Linux自帶的網(wǎng)絡(luò)工具來(lái)實(shí)現(xiàn)虛擬網(wǎng)絡(luò)搭建,常用的虛擬網(wǎng)絡(luò)是網(wǎng)橋、VLAN,常用的命令包括:brctl、ifconfig、vconfig、tunctl、route等。
情況下的multi-host配置模式。
2.3.1.brctl
brctl是一個(gè)Linux下的網(wǎng)橋?qū)S霉ぞ?,常見用法如下?/p>
命令原型 | 示例 | 說明 |
brctl show | brctl show | 顯示已有網(wǎng)橋 |
brctl addbr <bridge> | brctl addbr br0 | 增加網(wǎng)橋br0 |
brctl delbr <bridge> | brctl delbr br0 | 刪除網(wǎng)橋br0 |
brctl addif <bridge> <device> | brctl addif br0 eth0 | 將接口eth0接到網(wǎng)橋br0 |
brctl delif <bridge> <device> | brctl delif br0 eth0 | 從網(wǎng)橋上刪除一個(gè)接口 |
2.3.2.橋接操作
常規(guī)的網(wǎng)橋操作是先查看物理網(wǎng)卡,去除網(wǎng)卡上已有的IP地址,建立網(wǎng)橋,將網(wǎng)橋綁定物理網(wǎng)卡,配置網(wǎng)橋的IP地址,命令如下所示:
[root@kvm /]# ifconfig -a |grep eth
eth0 Linkencap:Ethernet HWaddr 90:fb:a6:14:cd:42
[root@kvm /]# brctl addbr br0
[root@kvm /]#brctl addif br0 eth0
[root@kvm /]# ifconfig eth0 0.0.0.0
[root@kvm /]# ifconfig br0 192.168.1.51 up
此時(shí)查看網(wǎng)絡(luò)設(shè)備,可以發(fā)現(xiàn)多了一臺(tái)網(wǎng)橋:
[root@kvm /]# ifconfig -a |grep Ethernet
br0 Linkencap:Ethernet HWaddr 2a:24:d3:aa:99:e7
eth0 Linkencap:Ethernet HWaddr 90:fb:a6:14:cd:42
另:如果想刪除網(wǎng)橋可以猜用如下辦法,即先停用網(wǎng)橋再執(zhí)行刪除操作:
[root@kvm /]# brctl delbr br0
bridge br0 is still up; can't delete it
[root@kvm /]# ifconfig br0 down
[root@kvm /]# brctl delbr br0
為了方便用戶操作,這里給出一個(gè)開機(jī)腳本,用于配置網(wǎng)橋:
[root@kvm /]#vi br0.sh
#!/bin/bash
# change eth0 to your network interface(eg. eth1)
ifconfig lo 127.0.0.1 up
if [ ! -z "`ifconfig -a | grep br0`" ]; then
ifconfig br0down
brctl delif br0eth0
brctl delbr br0
fi
brctl addbr br0
brctl addif br0 eth0
ifconfig eth0 0.0.0.0 up
ifconfig br0 192.168.1.51 up
route add default gw 192.168.1.1
exit 0
當(dāng)然也可以寫到網(wǎng)卡的配置文件中,在/etc/sysconfig/network-scripts/目錄下建立ifcfg-br0(br0為網(wǎng)橋接口名稱),配置網(wǎng)橋0:
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.1.51
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0
2.4.虛擬主機(jī)
2.4.1.kvm常用命令
kvm是虛擬主機(jī)創(chuàng)建與管理命令,其基本參數(shù)如下:
參數(shù) | 示例 | 說明 |
-hda | -hda /data/windows.img | 指定windows.img作為硬盤鏡像 |
-cdrom | -hda /data/windows.iso | 指定windows.iso作為光盤鏡像 |
-boot | -boot c | 從硬件啟動(dòng) |
-boot d | 從光盤啟動(dòng) |
|
-m | -m 512 | 分配512M內(nèi)存給虛擬系統(tǒng) |
-vnc | -vnc :0 | 作為vnc服務(wù)器 |
-cpu | -cpu ? | 列出支持的CPU |
-cpu core2duo | 指定CPU為core2duo |
|
-smp | -smp 2 | 指定虛擬機(jī)有2個(gè)CPU |
-net | -net nic | 為虛擬機(jī)網(wǎng)卡(默認(rèn)為tap0) |
-net tap | 系統(tǒng)分配tap設(shè)備(默認(rèn)為tap0) |
|
-net nic -net tap | 將虛擬機(jī)的網(wǎng)卡eth0連接真機(jī)里的tap0 |
|
2.4.2.安裝操作系統(tǒng)
通過kvm-img生成鏡像文件:
[root@kvm /]# kvm-img create windows2003-x86.img 25G -f"vmdk"
通過kvm命令安裝系統(tǒng):
[root@kvm /]# kvm -boot d -m 512-hda ~/kvm/windows2003-x86.img -cdrom~/software/wzmb2003.iso
運(yùn)行系統(tǒng):
[root@kvm /]#qemu- kvm -boot c -m 512 -hda~/kvm/windows2003-x86.img -net nic -net tap
可以發(fā)現(xiàn)多了一個(gè)網(wǎng)絡(luò)設(shè)備tap0,這是系統(tǒng)自動(dòng)創(chuàng)建的。
[root@kvm /]# ifconfig -a |grep Ethernet
br0 Linkencap:Ethernet HWaddr 2a:24:d3:aa:99:e7
eth0 Linkencap:Ethernet HWaddr 90:fb:a6:14:cd:42
tap0 Linkencap:Ethernet HWaddr 2a:24:d3:aa:99:e7
在計(jì)算機(jī)網(wǎng)絡(luò)中,TUN與TAP是操作系統(tǒng)內(nèi)核中的虛擬網(wǎng)絡(luò)設(shè)備。不同于普通靠硬件網(wǎng)路板卡實(shí)現(xiàn)的設(shè)備,這些虛擬的網(wǎng)絡(luò)設(shè)備全部用軟件實(shí)?,并向運(yùn)行與操作系統(tǒng)上的軟件提供與硬件的網(wǎng)絡(luò)設(shè)備完全相同的功能。TAP 等同于一個(gè)以太網(wǎng)設(shè)備,它操作第二層數(shù)據(jù)包如以太網(wǎng)數(shù)據(jù)幀。TUN模擬了網(wǎng)絡(luò)層設(shè)備,操作第三層數(shù)據(jù)包比如IP數(shù)據(jù)封包。
操作系統(tǒng)通過TUN/TAP設(shè)備向綁定該設(shè)備的用戶空間的程序發(fā)送數(shù)據(jù),反之,用戶空間的程序也可以像操作硬件網(wǎng)絡(luò)設(shè)備那樣,通過TNU/TAP設(shè)備發(fā)送數(shù)據(jù)。在后種情況下,TUN/TAP設(shè)備向操作系統(tǒng)的網(wǎng)絡(luò)棧投遞(或“注入”)數(shù)據(jù)包,從而模擬從外部接受數(shù)據(jù)的過程。
2.4.3.遠(yuǎn)程登錄
如果虛擬機(jī)是linux,那么就用ssh;如果是windows,那么就用rdesktop。
[root@kvm /]# rdesktop -uusername -p passwd 192.168.1.52 -f &
用Ctrl-Alt-Enter可從全屏中切回來(lái)。