XEN和KVM雲計算虛擬化技術

一 、虛擬化概論

VMM(Virtual Machine Monitor,虛擬機監控器)它包括規劃、部署、管理和優化虛擬基礎結構等端到端功能,傳統的VMM建立在操作系統之上,但是操作系統本身除了作爲VMM的承載之外並沒有其他作用,所以,爲了更加節約資源,去掉了操作系統由VMM來直接取代。就是我們看到了VMM hypervisor

Hypervisor——一種運行在基礎物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享硬件。也可叫做VMM( virtual machine monitor ),即虛擬機監視器

1497709487863044

Hypervisors是一種在虛擬環境中的“元”操作系統。他們可以訪問服務器上包括磁盤和內存在內的所有物理設備。Hypervisors不但協調着這些硬件資源的訪問,也同時在各個虛擬機之間施加防護。當服務器啓動並執行Hypervisor時,它會加載所有虛擬機客戶端操作系統同時會分配給每一臺虛擬機適量的內存CPU網絡磁盤

主流的hypervisor:VMwareESXi、微軟的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 ServerCitrix XenServerMicrosoft Hyper-V

os-level

在操作系統中模擬出一個個跑應用程序的容器,所有虛擬機共享內核空間,性能最好,耗費資源最少,一個CPU號稱可最多模擬500VPS(Virtual Private Server)VE(Virtual Environment)。缺點是操作系統唯一,如底層操作系統跑的WindowsVPS/VE就都得跑Windows。代表是Parallels公司(以前叫SWsoft)的Virtuozzo(商用產品)和OpenVZ(開源項目)。

library

application

參考文件:http://group.vsharing.com/Article.aspx?aid=1148290

79D94B321858476ABC29B47DFDF7095F

9DD5B7A2361848179F62CC89F0A3C90B

B797DFCCB6214DF1A6003BF4C115E683

IO虛擬化:

完全虛擬化

半虛擬化

IO透傳技術

B941BF07D18C488AA917E134DAEA0D26

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是完全硬件化的虛擬管理器。

WEBRESOURCE6a7bbbdd074accff4225044ddf5c8

二、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支持虛擬化技術。

WEBRESOURCE08ae75eff922269cd6132810c85d5

2、管理工具和接口

每一個應用程序都有管理接口或者管理工具用於管理程序,XEN的主要管理的庫包括libxc(控制檯),libxenguest(管理虛擬機),xinstore(管理虛擬機元數據的存儲),這些庫通過libxenlight來管理,在這個之上通過xl,xend,xapi三種管理接口進行管理。

屏幕快照 2017-05-24 上午9.12.45.png

屏幕快照 2017-05-24 上午9.11.52.png

各個版本支持的管理工具(僅僅支持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  ]

屏幕快照 2017-05-26 上午9.02.13.png

創建橋設備,用於實現虛擬機和宿主機之間的網絡連接方式:

[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虛擬機,並提示一下錯誤。

161256285.png

解決辦法,安裝qemu相關軟件包。

[root@localhost ~]# yum install qemu\*

四、命令行模式配置虛擬機

xen可以通過xm或者xl命令行進行配置,我這裏xen4.6自帶的是xl我就使用它了,xm已經被合併了。

xl配置虛擬機有一個配置模板,就是/etc/xen/*example*的文件。

通過命令行方式登錄虛擬機:

[root@localhost xen]# xl console test

WEBRESOURCE0730339a5f30e122d4a653e35088d

WEBRESOURCE4736f6a9a9d7596063659eaac05bcWEBRESOURCEe19e6e2cd7331cbd184a9c52754a6

六、實時遷移

要實現實時遷移,通常是對於高可用情況說的,就是兩個服務器共享一個文件存儲,其中一個故障,服務會自動轉移到另個一服務器上。

安裝虛擬機文檔: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

紅帽官網解決方法:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/sect-Troubleshooting-Common_libvirt_errors_and_troubleshooting.html#sect-The_URI_failed_to_connect_to_the_hypervisor


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章