一 、虛擬化概論
VMM(Virtual Machine Monitor,虛擬機監控器)它包括規劃、部署、管理和優化虛擬基礎結構等端到端功能,傳統的VMM建立在操作系統之上,但是操作系統本身除了作爲VMM的承載之外並沒有其他作用,所以,爲了更加節約資源,去掉了操作系統由VMM來直接取代。就是我們看到了VMM hypervisor
Hypervisor——一種運行在基礎物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享硬件。也可叫做VMM( virtual machine monitor ),即虛擬機監視器。
Hypervisors是一種在虛擬環境中的“元”操作系統。他們可以訪問服務器上包括磁盤和內存在內的所有物理設備。Hypervisors不但協調着這些硬件資源的訪問,也同時在各個虛擬機之間施加防護。當服務器啓動並執行Hypervisor時,它會加載所有虛擬機客戶端的操作系統同時會分配給每一臺虛擬機適量的內存,CPU,網絡和磁盤。
主流的hypervisor:VMware的ESXi、微軟的Hyper-V或者思傑的XenServer。
CPU虛擬化:
硬件虛擬化(HVM)是在半虛擬化發展後提出的一種解決虛擬化性能的方法,主要就是在cpu上增加了一個RING,然後實現guestVM工作在ring0上的方法。
兩大CPU廠商各自提出了自己的方法,INTEL提出了VT-X,而AMD公司使用的是CPU的AMD-V技術。
內存虛擬化:
通過在VMM上添加MMU模塊,實現將guestvm的線性地址(內存)通過VMM的MMU來進行轉換成實際地址,並返回給guestvm,並且在TLB上添加標籤的方式避免不同guestvm之間的地址衝突。
MMU
INTER:EPT
AMD:NPT
虛擬化實現的種類:
hosted:
先說下Hypervisor或叫做Virtual Machine Monitor(VMM),它是管理虛擬機VM的軟件平臺。在主機虛擬化中,Hypervisor就是跑在基礎操作系統上的應用軟件,與OS-Level中VE的主要區別在於:
Hypervisor構建出一整套虛擬硬件平臺(CPU/Memory/Storage/Adapter),上面需要你再去安裝新的操作系統和需要的應用軟件,這樣底層和上層的OS就可以完全無關化,諸如Windows上跑Linux一點兒問題沒有;
VE則可以理解爲盜用了底層基礎操作系統的資源去欺騙裝在VE上的應用程序,每新創建出一個VE,其操作系統都是已經安裝好了的,和底層操作系統完全一樣,所以VE比較VM(包括主機虛擬化和後面的裸金屬虛擬化)運行在更高的層次上,相對消耗資源也少很多。
主機虛擬化中VM的應用程序調用硬件資源時需要經過:VM內核->Hypervisor->主機內核,導致性能是三種虛擬化技術中最差的。主機虛擬化技術代表是VMware Server(GSX)、Workstation和Microsoft Virtual PC、Virtual Server等。
bare-metal
裸金屬虛擬化中Hypervisor直接管理調用硬件資源,不需要底層操作系統,也可以理解爲Hypervisor被做成了一個很薄的操作系統。這種方案的性能處於主機虛擬化與操作系統虛擬化之間。代表是VMware ESX Server、Citrix XenServer和Microsoft Hyper-V。
os-level
在操作系統中模擬出一個個跑應用程序的容器,所有虛擬機共享內核空間,性能最好,耗費資源最少,一個CPU號稱可最多模擬500個VPS(Virtual Private Server)或VE(Virtual Environment)。缺點是操作系統唯一,如底層操作系統跑的Windows,VPS/VE就都得跑Windows。代表是Parallels公司(以前叫SWsoft)的Virtuozzo(商用產品)和OpenVZ(開源項目)。
library
application
參考文件:http://group.vsharing.com/Article.aspx?aid=1148290
IO虛擬化:
完全虛擬化
半虛擬化
IO透傳技術
1、xen虛擬機的一般工作方式:
xen宿主機負責管理物理硬件的cpu,中斷、內存,並且自身僅僅是一個內核並不能直接被用戶操作,需要一個dom0這樣的虛擬機,dom0完成遠程登錄管理xen和管理其他虛擬機的功能,並且其他虛擬機的調用cpu、內存、中斷是通過xen來完成的,而調用硬盤,io則是通過dom0來完成的。
2、qumu
一款高性能的跨物理硬件的開源模擬器軟件,這裏說跨物理硬件是指模擬器如果是x86平臺的,虛擬機可以搭建在x86平臺,也可以是64位平臺,並且可以按照aix等其他類型的操作系統。如果平臺相同可以通過kqemu軟件來進行加速。而kvm也是一個qemu的加速器軟件。
3、kvm
這樣kvm實際上就是接替qemu的一個虛擬化軟件,其實就是linux自身的一個模塊,當linux加載這個模塊後,linux就變成了”VMM”,實現了虛擬機管理器的功能,在此的用戶空間創建guestos,此時的guestos就是“VMM”的一個進程,可以隨意的kill掉。所以kvm是完全硬件化的虛擬管理器。
二、XEN
1、 redhat5.0版本默認是可以通過加載內核進行安裝xen的,實際操作就是通過grub.conf修改加載的內核模塊來完成,而到了6.0版本redhat收購了kvm後,就不再支持xen了,而是提供了kvm的支持。只有在linux2.6.37之後的內核版本才正式支持了xen的功能,而到了3.0內核版本支持了完全功能。
XEN支持32位和64位的CPU,而KVM只支持64位CPU並且要求CPU支持虛擬化技術。
2、管理工具和接口
每一個應用程序都有管理接口或者管理工具用於管理程序,XEN的主要管理的庫包括libxc(控制檯),libxenguest(管理虛擬機),xinstore(管理虛擬機元數據的存儲),這些庫通過libxenlight來管理,在這個之上通過xl,xend,xapi三種管理接口進行管理。
各個版本支持的管理工具(僅僅支持xen):
XEN4.0:xm/xend
XEN4.1:xl,xm/xend,xm和xl兩者同一時間只能有一個在運行。
XEN4.2:xl
注意:紅帽自己研發的管理工具支持了多個平臺的虛擬化解決方案,virsh,它需要在被管理節點上啓動一個libvirtd的服務進程。這個進程需要libvirt這個程序。但是由於紅帽6.4以後不再支持xen所以需要自行編譯安裝。
所以實現xen功能的幾個基本步驟是:
1、下載linux3.0以上內核,並編譯安裝,並添加一下選項。
2、下載安裝libvirt1.0以上版本。
3、安裝kernel-xen3.0以上版本。
三、XEN安裝
1、環境介紹:
操作系統:centos6.7mini版
安裝參照文件:https://wiki.xen.org/wiki/Xen_Project_Software_Overview#Host_and_Guest_Install
2、安裝
[root@localhost ~]# yum install centos-release-xen
[root@localhost ~]# yum install xen
======================================================================================================================
軟件包 架構 版本 倉庫 大小
======================================================================================================================
正在安裝:
linux-firmware noarch 20170213-71.git6d3bc888.1.el6 centos-virt-xen 49
replacing kernel-firmware.noarch 2.6.32-573.el6
xen x86_64 4.6.3-14.el6 centos-virt-xen 112 k
爲依賴而
SDL x86_64 1.2.14-7.el6_7.1 base 193 k
atk x86_64 1.30.0-1.el6 base 195 k
avahi-libs x86_64 0.6.25-17.el6 base 55 k
cairo x86_64 1.8.8-6.el6_6 base 309 k
cups-libs x86_64 1:1.4.2-77.el6 base 322 k
fontconfig x86_64 2.8.0-5.el6 base 186
freetype x86_64 2.3.11-17.el6 base 361 k
gdk-pixbuf2 x86_64 2.24.1-6.el6_7 base 501 k
glusterfs x86_64 3.7.9-12.el6 base 422 k
glusterfs-api x86_64 3.7.9-12.el6 base 58 k
glusterfs-client-xlators x86_64 3.7.9-12.el6 base 1.1 M
glusterfs-libs x86_64 3.7.9-12.el6 base 313 k
gnutls x86_64 2.12.23-21.el6 base 389 k
gtk2 x86_64 2.24.23-9.el6 base 3.2 M
hicolor-icon-theme noarch 0.11-1.1.el6 base 40 k
jasper-libs x86_64 1.900.1-21.el6_9 updates 138 k
kernel x86_64 4.9.25-27.el6 centos-virt-xen 41 M
libX11 x86_64 1.6.4-3.el6 base 587 k
libX11-common noarch 1.6.4-3.el6 base 171 k
libau x86_64 1.0.6-4.el6 base 24 k
libXcomposite x86_64 0.4.3-4.el6 base 20 k
libXcursor x86_64 1.1.14-2.1.el6 base 28 k
libXdamage x86_64 1.1.3-4.el6 base 18 k
libXext x86_64 1.3.3-1.el6 base 35 k
libXfixes x86_64 5.0.3-1.el6 base 17 k
libXft x86_64 2.3.2-1.el6 base 55 k
libXi x86_64 1.7.8-1.el6 base 38 k
libXinerama x86_64 1.1.3-2.1.el6 base 13 k
libXrandr x86_64 1.5.1-1.el6 base 25 k
libXrender x86_64 0.9.10-1.el6 base 24 k
libXxf86vm x86_64 1.1.3-2.1.el6 base 16 k
libjpeg-turbo x86_64 1.2.1-3.el6_5 base 174 k
libpng x86_64 2:1.2.49-2.el6_7 base 182 k
libthai x86_64 0.1.12-3.el6 base 183 k
libtiff x86_64 3.9.4-21.el6_8 base 346 k
libusb1 x86_64 1.0.9-0.7.rc1.el6 base 80 k
libxcb x86_64 1.12-4.el6 base 180 k
libxslt x86_64 1.1.26-2.el6_3.1 base 452 k
mesa-dri-drivers x86_64 11.0.7-4.el6 base 4.1 M
mesa-dri-filesystem x86_64 11.0.7-4.el6 base 17 k
mesa-dri1-drivers x86_64 7.11-8.el6 base 3.8 M
mesa-libGL x86_64 11.0.7-4.el6 base 142 k
mesa-private-llvm x86_64 3.6.2-1.el6 base 6.5 M
pango x86_64 1.28.1-11.el6 base 351 k
pciutils x86_64 3.1.10-4.el6 base 85 k
perl x86_64 4:5.10.1-144.el6 base 10 M
perl-Module-Pluggable x86_64 1:3.90-144.el6 base 41 k
perl-Pod-Escapes x86_64 1:1.04-144.el6 base 33 k
perl-Pod-Simple x86_64 1:3.13-144.el6 base 213 k
perl-libs x86_64 4:5.10.1-144.el6 base 579 k
perl-version x86_64 3:0.77-144.el6 base 52 k
pixman x86_64 0.32.8-1.el6 base 243 k
python-lxml x86_64 2.2.3-1.1.el6 base 2.0 M
qemu-img x86_64 2:0.12.1.2-2.503.el6_9.3 updates 846 k
usbredir x86_64 0.5.1-3.el6 base 41 k
xen-hypervisor x86_64 4.6.3-14.el6 centos-virt-xen 932 k
xen-libs x86_64 4.6.3-14.el6 centos-virt-xen 534 k
xen-licenses x86_64 4.6.3-14.el6 centos-virt-xen 87 k
xen-runtime x86_64 4.6.3-14.el6 centos-virt-xen 16 M
yajl x86_64 1.0.7-3.el6 base 27 k
爲依賴而更新:
libdrm x86_64 2.4.65-2.el6 base 136 k
3、查看當前xen中有幾個虛擬機
[root@localhost ~]# xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 24 r----- 28.8
4、基於圖形化界面安裝虛擬機(guestos),需要先安裝libvirt軟件包。
[root@localhost ~]# yum install libvirt
[root@localhost ~]# service libvirtd start
Starting libvirtd daemon: [ OK ]
創建橋設備,用於實現虛擬機和宿主機之間的網絡連接方式:
[root@localhost ~]# virsh iface-bridge eth0 xenbr0 //xenbr0名稱隨意
刪除定義的橋設備。使用iface-undefine參數,這個刪除完畢需要重啓,並且重啓後設置的物理網卡會“消失”,需要創建相關的ifcfg-ethx文件,纔可以。
查看橋設備,(virbr0是libvirt虛擬出來的)
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400a6a9bb yes virbr0-nic
[root@localhost ~]#
5、ssh登錄xen服務器,然後通過virt-manager開啓xen的圖形化管理界面。
yum install virt-manager
故障點分析:
1、出現一下情況,需要安裝 yum -y install xorg-x11-xauth
[root@localhost ~]# virt-manager
Unable to initialize GTK: could not open display
2、出現一下情況的時候,需要創建一個文件/var/lib/dbus/machine-id 並通過dbus-uuidgen生成一個隨機碼,並放到/var/lib/dbus/machine-id
[root@localhost ~]# virt-manager
process 4326: D-Bus library appears to be incorrectly set up; failed to read machine uuid: UUID file '/var/lib/dbus/machine-id' should contain a hex string of length 32, not length 0, with no other text
See the manual page for dbus-uuidgen to correct this issue.
D-Bus not built with -rdynamic so unable to print a backtrace
已放棄
3、圖形界面出現亂碼的解決方法:
[root@localhost ~]# yum install dejavu-lgc-sans-fonts
如果按照的版本是virt-manager-0.9.0-34先卸載0.9.0-34版本,然後按照0.9.0-31版本。即可解決問題。
[root@localhost ~]# yum localinstall virt-manager-0.9.0-31.el6.x86_64.rpm
[root@localhost ~]# vi /etc/sysconfig/i18n
英文:
LANG="en_US.UTF-8"
中文:
LANG="zh_CN.UTF-8"
即時生效
source /etc/sysconfig/i18n
4、啓動圖形界面後無法連接到xen虛擬機,並提示一下錯誤。
解決辦法,安裝qemu相關軟件包。
[root@localhost ~]# yum install qemu\*
四、命令行模式配置虛擬機
xen可以通過xm或者xl命令行進行配置,我這裏xen4.6自帶的是xl我就使用它了,xm已經被合併了。
xl配置虛擬機有一個配置模板,就是/etc/xen/*example*的文件。
通過命令行方式登錄虛擬機:
[root@localhost xen]# xl console test
六、實時遷移
要實現實時遷移,通常是對於高可用情況說的,就是兩個服務器共享一個文件存儲,其中一個故障,服務會自動轉移到另個一服務器上。
安裝虛擬機文檔:http://blog.csdn.net/jincm13/article/details/8362509
第二部分 KVM
一、KVM簡介
簡稱kernel-based VM,必須運行在64位系統系統上。KVM是一個混合類型的VMM,它能夠以模擬方式支持硬件的完全虛擬化,也能夠通過guestos中安裝驅動程序進而支持部分硬件的半虛擬化。(對於網絡設備和塊設備來說,半虛擬化能夠提高設備性能)REDHAT和IBM連同linux社區開了了一種獨立於VMM的半虛擬化驅動程序標準virtio,根據這個標準開發的半虛擬化程序可兼容的運行於多種不同的VMM上,提高了VMM之間的互操作性。
virtio驅動已經集成在linux2.6以上的內核版本中。
常見的虛擬化模型:
type1:hosted(運行在操作系統之上)
type2:bare-metal(直接運行在硬件基礎上)
常見虛擬化技術:
完全虛擬化
半虛擬化para:通用半虛擬化技術是virtio。
混合虛擬化
KVM自身是完全虛擬化的,CPU是HVM(硬件虛擬化),但是使用了virtio的kvm實質上是混合技術的KVM。
過量使用CPU:單個虛擬機使用CPU數量建議不要超過真實物理機cpu個數,而虛擬機總數的CPU使用量可以超過。
支持安裝的虛擬機(guest)
linux 、windows、openbsd、FreeBSD、solaris。
二、安裝KVM(要實現安裝虛擬機的功能,就要安裝其他軟件了比如qemu。)
1、安裝模塊,需要CPU硬件支持虛擬化。
kvm模塊
kvm-intel 或者kvm-amd
查看CPU虛擬化:
[root@localhost ~]# grep -E "svm|vmx" /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
安裝kvm模塊、kvm-intel模塊
[root@localhost ~]# modprobe kvm kvm-intel
kvm虛擬出來的設備,用於API(接口)。
[root@localhost ~]# ll /dev/|grep kvm
crw-rw----. 1 root root 10, 232 5月 31 19:56 kvm
實時遷移要求:
guestos映像文件放在共享存儲上,比如iscsi、nfs
目標物理主機的kvm要能夠兼容源物理主機的kvm及其準備遷移的guestos。(也就是建議兩臺物理機型號相同)
在兩臺主機上,共享存儲必須掛載在同一個位置,並且掛載的目錄名必須相同。
兩臺物理主機的cpu必須具有相同的特性
虛擬機沒有使用透傳I/O
物理機要求時間同步
兩臺物理主機必須使用一致的網絡配置,並且所有網橋和網絡配置一致
kvm型號相同,兼容
KVM管理工具
1、libvirtd包括:
virtinst軟件包,類似於XEM的xl命令行工具,包括virt-install、virt-clone、virt-convert、virt-p_w_picpath。
virtual machine manager
virsh
virsh的本地和遠程管理模式:
2、qemu工具
處理器仿真
設備仿真(顯卡,網卡,硬盤)
關聯仿真設備到真實設備的通用設備
調試器
仿真主機的描述(pc、power、mac)
與仿真器交互的用戶接口
2、安裝KVM實現虛擬化
qemu-kvm、virtinst、libvirt、libguestfs(這些文件可以通過安裝包組的方式簡化依賴關係,具體包組是virtualization、virtualization client、virtualization platform)
[root@localhost ~]# yum groupinstall virtualization
[root@localhost ~]# yum groupinstall "virtualization client"
[root@localhost ~]# yum groupinstall virtualization-platform
將qemu-kvm創建軟連接到/bin目錄中。
[root@localhost ~]# ln -sv /usr/libexec/qemu-kvm /bin/
創建橋設備,用於虛擬機和物理機通信
[root@localhost ~]# virsh iface-bridge eth0 br0
通過圖形化界面安裝操作系統
[root@localhost ~]# virt-manager
virsh的幾個常見命令:
創建虛擬機,事先準備好xml格式的配置文件,可以dump其它已經運行的虛擬機
create:創建並啓動
define:創建不啓動
刪除虛擬機的步驟:
destroy之後undefine,最後刪除相關的文件。
所有虛擬機創建完畢後,都在/etc/libvirt/qemu下生成相關的xml文件
[root@localhost ~]# ll /etc/libvirt/qemu
總用量 12
drwxr-xr-x. 2 root root 4096 6月 1 16:36 autostart
drwx------. 3 root root 4096 6月 1 14:51 networks
-rw-------. 1 root root 3191 6月 1 16:45 ttt.xml
[root@localhost ~]#
改變在線狀態(動態)的虛擬機內存空間大小,在當前版本測試中修改內存大小後系統崩潰
[root@localhost ~]# virsh setmem ttt 2048 --live
查看虛擬機cpu格式,並修改。測試時不可用
[root@localhost ~]# virsh vcucount ttt
maximum config 1
maximum live 1
current config 1
current live 1
創建虛擬磁盤,並掛載到虛擬機上,卸載用detach-disk
[root@localhost ~]# qemu-img create -f raw /root/ttt.img 512M
Formatting '/root/ttt.img', fmt=raw size=536870912
[root@localhost ~]# virsh attach-disk ttt /root/ttt.img vdb
查看虛擬機狀態相關命令 virt help domain
查看CPU狀態信息,cpu-stats