什麼是虛拟化?
Virtualization
通過虛拟化技術,将單獨的計算機邏輯上模拟成多台邏輯計算機;->虛拟化過程
虛拟化:使用軟體的方法重新定義劃分IT資源[如:SDN(Software Define Network)]
虛拟化的優缺點:
優點:
1、節省實體資源[每台邏輯計算機資源互補影響,支援動态配置設定、靈活排程可作為獨立的一個體]
2、虛拟化可以建構一個整體的系統平台,友善管理和維護
3、适用性強;
缺點:
1、實體裝置出現損壞會導緻,虛拟化系統重組;
2、故障率提升;
計算機的五大元件:
處理器、I/O裝置、存儲器、控制器
可以做虛拟化的元件有:
存儲虛拟化、CPU虛拟化、I/O虛拟化
實作虛拟化:
在作業系統和底層硬體之間,添加了一種運作在基礎實體伺服器和作業系統之間的中間軟體層
[Hypervisor];有可以叫做VMMVirtual machine monitor
作用:允許多個作業系統和應用共享硬體,同時可以在虛拟出來的各個虛拟機之間施加防護;
配置設定資源、和硬體裝置;
虛拟化的分類:
一、完全虛拟化[主流]
通過Hypervisor捕捉CPU指令,為指令通路硬體控制器和外設充當中介,
能夠讓任何作業系統工作在虛拟伺服器上,而它們并不知道自己運作在虛拟化環境中;
缺點:性能不如直接調用實體裝置機器。【因為Hypervisor需要占用一些資源,用于處理資源調控】
二、準虛拟化
完全虛拟化是處理器密集型技術,因為它要求Hypervisor管理各個虛拟伺服器,并讓它們彼此獨立
。減輕這種負擔的一種方法就是,改動客戶作業系統,讓它以為自己運作在虛拟環境下,能夠與Hypervisor協同工作,這種方法就叫準虛拟化。
優點:性能高,可以通過準虛拟化處理的伺服器和Hypervisor協調工作;相應能力幾乎不亞于未經過虛拟化處理的伺服器。它的客戶作業系統(Guest OS)內建了虛拟化方面的代碼。該方法無需重新編譯或引起陷阱,因為作業系統自身能夠與虛拟程序進行很好的協作。
如:XEN
三、系統虛拟化:
實作虛拟化還有一個方法,那就是在作業系統層面增添虛拟伺服器功能。如:Solaris Container;
就作業系統層的虛拟化而言,沒有獨立的hypervisor層。相反,主機作業系統本身就負責在多個虛拟伺服器之間配置設定硬體資源,并且讓這些伺服器彼此獨立。一個明顯的差別是,如果使用作業系統層虛拟化,
所有虛拟伺服器必須運作同一作業系統(不過每個執行個體有各自的應用程式和使用者賬戶)。
作業系統層虛拟化的靈活性比較差,但本機速度性能比較高。此外,由于架構在所有虛拟伺服器上使用單一、标準的作業系統,管理起來比異構環境要容易。
四、桌面虛拟:
桌面虛拟化主要功能是将分散的桌面環境集中儲存并管理起來,包括桌面環境的集中下發,集中更新,集中管理。
硬體虛拟化支援功能讓hypervisor從極其繁重的管理事務中脫離出來。這除了提高性能外,還有作業系統不用改動就能在準虛拟化環境下運作,包括Windows環境。
五、硬體虛拟化
Intel虛拟化技術[IVT:Intel Virtualization Technology)],通過虛拟機檢視器(VMM,Virtual Machine Monitor)來虛拟一套硬體裝置,以供客作業系統使用。這些技術以往在VMware與Virtual PC上都通過軟體實作,而通過IVT的硬體支援可以加速此類軟體的進行。
AMD、Intel
AMD[AMD-V]、Interl[IVT]
虛拟化技術:[實作工具]
通過軟體層面實作虛拟化,開源和商業虛拟化
典型:Xen、KVM、Vmware、Docker、Hyper-V
開源:Xen和KVM
商業化:Hyper-V[Microsoft]
Docker是一種容器技術,屬于一種輕量級虛拟化技術
CPU虛拟化:按時間切割
模拟:[emulation]軟體方式實作,上層架構和底層可以不一樣;需要模拟環0,1,2,3
虛拟:[virtulization]上層架構和底層要保持一緻
完全虛拟化[full-virtulization]:
主控端完全虛拟出一個完整的平台,guest不清楚自己運作在虛拟環境中;隻需要模拟環0,
假設各guest的核心運作在環1(實際上不可能運作在環1,因為環1沒有特權指令)。
BT:二進制翻譯(軟體)
HVM:硬體輔助的虛拟化(硬體),模拟出環-1,host的核心運作在環-1,guest核心運作在環0上,
此時環0上沒有特權指令,guest運作特權時指令cpu會被觸發,這個過程不需要hyper進行監控,提高性能。
半虛拟化[para-virtulization]:
各host知道自己運作在虛拟化環境中,當需要運作特權指令時,直接請求主控端的核心
vm monitor=hypervisor 虛拟化螢幕相當于核心;
hypervisor運作在硬體平台上,對底層硬體(cpu和記憶體不包括io)使用配置設定過程虛拟成hyper call(hyper 調用),
虛拟機的核心運作特權指令時,調用hyper call;
求主控端的核心
vm monitor=hypervisor 虛拟化螢幕相當于核心
hypervisor運作在硬體平台上,對底層硬體(cpu和記憶體不包括io)使用配置設定過程虛拟成hyper call(hyper 調用),虛拟機的核心運作特權指令時,調用hyper call
記憶體虛拟化:按空間切割
程序視角看記憶體:線性位址空間 虛拟位址
核心視角看記憶體:實體位址空間
MMU将線性位址轉化為實體位址
1、MMU:memory management unit,稱為記憶體管理單元,或者是存儲器管理單元,
MMU是硬體裝置,它被儲存在主存(main memory)的兩級也表控制,并且是由協處理器CP15的寄存器1的M位來決定是enabled還是disabled。MMU的主要作用是負責從CPU核心發出的虛拟位址到實體位址的映射,并提供硬體機制的記憶體通路權限檢查。MMU使得每個使用者程序擁有自己的位址空間(對于WINCE5.0,每個程序是32MB;而對于WINCE6.0,每個程序的獨占的虛拟空間是2GB),
并通過記憶體通路權限的檢查保護每個程序所用的記憶體不被其他程序破壞。
Intel:EPT[Extended Page Table]
AMD:NTP[Nested Page Table]
VA:virtual address 稱為虛拟位址
PA:physical address稱為實體位址
CPU通過位址來通路記憶體中的單元,如果CPU沒有MMU,或者有MMU但沒有啟動,那麼CPU核心在取指令或者通路記憶體時發出的位址(此時必須是實體位址,假如是虛拟位址,那麼目前的動作無效)将直接傳到CPU晶片的外部位址引腳上,直接被記憶體晶片(實體記憶體)接收,這時候的位址就是實體位址。如果CPU啟用了MMU(一般是在bootloader中的eboot階段的進入main()函數的時候啟用),
CPU核心發出的位址将被MMU截獲,這時候從CPU到MMU的位址稱為虛拟位址,而MMU将這個VA翻譯成為PA發到CPU晶片的外部位址引腳上,也就是将VA映射到PA中。MMU将VA映射到PA是以頁(page)為機關的,對于32位的CPU,通常一頁為4k,實體記憶體中的一個實體頁面稱頁為一個頁框(page frame)。
虛拟位址空間劃分成稱為頁(page)的機關,而相應的實體位址空間也被進行劃分,機關是頁框(frame).頁和頁框的大小必須相同。
2、CPU通路記憶體時的硬體操作順序
1)CPU核心發出VA請求讀資料,TLB(translation lookaside buffer)接收到該位址,那為什麼是TLB先接收到該位址呢?
因為TLB是MMU中的一塊高速緩存(也是一種cache,是CPU核心和實體記憶體之間的cache),它緩存最近查找過的VA對應的頁表項,如果TLB裡緩存了目前VA的頁表項就不必做translation table walk了,否則就去實體記憶體中讀出頁表項儲存在TLB中,TLB緩存可以減少通路實體記憶體的次數。
2)頁表項中不僅儲存着實體頁面的基位址,還儲存着權限和是否允許cache的标志。MMU首先檢查權限位,如果沒有通路權限,就引發一個異常給CPU核心。然後檢查是否允許cache,如果允許cache就啟動cache和CPU核心互操作。
3)如果不允許cache,那直接發出PA從實體記憶體中讀取資料到CPU核心。
4)如果允許cache,則以VA為索引到cache中查找是否緩存了要讀取的資料,如果cache中已經緩存了該資料(稱為cache hit)則直接傳回給CPU核心,如果cache中沒有緩存該資料(稱為cache miss),則發出PA從實體記憶體中讀取資料并緩存到cache中,同時傳回給CPU核心。
但是cache并不是隻去CPU核心所需要的資料,而是把相鄰的資料都去上來緩存,這稱為一個cache line。ARM920T的cache line是32個位元組,例如CPU核心要讀取位址0x30000134~0x3000137的4個位元組資料,cache會把位址0x30000120~0x3000137(對齊到32位元組位址邊界)的32位元組都取上來緩存。
3、TLB:Translation Lookaside Buffer.
根據功能可以譯為快表,直譯可以翻譯為旁路轉換緩沖,也可以把它了解成頁表緩沖。裡面存放的是一些頁表檔案(虛拟位址到實體位址的轉換表)。當處理器要在主記憶體尋址時,不是直接在記憶體的實體位址裡查找的,而是通過一組虛拟位址轉換到主記憶體的實體位址,TLB就是負責将虛拟記憶體位址翻譯成實際的實體内 存位址,而CPU尋址時會優先在TLB中進行尋址。處理器的性能就和尋址的命中率有很大的關系。
由于CPU首先接到的是由程式傳來的ee虛拟記憶體位址,是以CPU必須先到實體記憶體中取頁表,然後對應程式傳來的虛拟頁面号,在表裡找到對應的實體頁面 号,最後才能通路實際的實體記憶體位址,也就是說整個過程中CPU必須通路兩次實體記憶體(實際上通路的次數更多)。是以,為了減少CPU通路實體記憶體的次 數,引入TLB。
MMU的虛拟化:
INTEL:EPT,Extended Page Table
AMD:NTP,Nested Page Table
TLB的虛拟化:
tagged TLB
I/O虛拟化:
I/0:
外存、硬碟、CD光牒、u盤
網絡裝置:
網卡
顯示裝置:
VGA:frame buffer機制;
鍵盤滑鼠:
ps/2,usb:完全模拟實作,目前焦點捕獲,将虛拟裝置和實體裝置建立關聯關。
I/O虛拟化的方式:
模拟:完全使用軟體來模拟真實硬體
半虛拟化:核心明确知道虛拟化子產品中
IO-through:IO透傳,讓虛拟機直接使用實體裝置,幾乎接近于硬體性能,硬體必須要支援透傳技術;
Intel:VT-d 基于北橋的硬體輔助的虛拟化技術;提升I/O的可靠、靈活性性能
VMM兩種虛拟化的實作方式:
主機虛拟化技術的兩種類型:
Type-I(能等同于半虛拟化嗎?):xen,vmware ESX/ESXi
虛拟機在系統上建立之後,首先運作監控程式;[沒運作任何核心]
Type-II(能等同于完全虛拟化嗎?):kvm,vmware workstation,virtualbox
在系統上建立後,直接啟動是一個作業系統;在作業系統上安裝一個軟體[虛拟機管理器]
Intel硬體輔助的虛拟化:
CPU:vt-x,EPT,tagged-TLB
IO/CPU:vt-d,vt-x,IOV,VMDq
第一類:跟處理器相關:vt-x
第二類:跟晶片相關:vt-d
第三類:跟IO相關:VMDq和SR-IOV
注意:在實作硬體模拟方面,在linux上使用最多的為:QEMU[可以跨平台管理]、virtio
虛拟化技術的分類:
模拟:Emulation
上層的虛拟機架構和底層可以不一樣,性能比較差
著名的模拟器 PearPC,Bochs,QEMU
完全虛拟化:Full Vitualization 也稱為native virtulization
類似于模拟但不完全等同于模拟(模型相同)
cpu和記憶體不做模拟,隻作管理,i/o需要模拟。
兩種加速方式:BT,HVM
著名軟體實作:VMware Workstation,VMware Server,VirtuaBox,Parallels,Desktop(實作虛拟化的方式靈活,輕量),KVM,Xen(HVM)
半虛拟化:para-virtualization [guest的OS核心需要知道運作在虛拟化環境中,虛拟機的架構和底層架構完全一樣]
hyper将底層實體硬體平台略加修改後輸出為虛拟機環境,虛拟機的架構和底層架構完全一樣
虛拟機上的作業系統核心需要做修改,讓其明确知道自己運作在虛拟化環境中,其核心不能直接發起系統調用、而是發起hypercall來實作
Xen,UML(user-mode linux) ->使用者模式linux
OS虛拟化:
本身沒有hyper,直接運作于實體硬體上,
将作業系統的使用者空間切割成多份,每份各自獨立,互相隔離,每個使用者空間當成一個虛拟機來用
性能好,但隔離性,穩定性不好
更多地被稱為容器級虛拟化,OpenVZ[可提供vps],LXC(linux container),libcontainer, Solaris Containers,FreeBSD jails
庫虛拟化:
虛拟化一個程式的運作環境
wine,
應用程式虛拟化:
jvm
虛拟化網絡的認識和配置[SDN]、KVM的配置
虛拟化網絡:
網絡虛拟化模型:bridge 橋接、Host-Only 僅主機、route 路由、NAT、isolation 隔離
Bridge橋接[把實體機上的網卡當作虛拟裝置的網卡]
在橋接方式下,模拟一個虛拟的網卡給虛拟系統,宿主系統對于虛拟系統來說相當于是一個橋接
器虛拟系統好像是有自己的網卡一樣,自己直接連上網絡,也就是說虛拟系統對于外部是直接可見。
注意:Bridge模式可以直接通過本地實體網卡,上Internet;
Host-Only僅主機[]
預設情況下,虛拟機隻能到主機通路虛拟機之間也能互相通信而不能通路Internet。
[無法使得虛拟機通路外網]
route 路由
僅主機模式隻要實體機打開網卡間轉發功能就成了route模式
NAT
僅主機模式模型一樣[可以通過NAT技術,實作外網的通路]
isolation 隔離
各虛拟機虛拟網卡連在虛拟交換機上,虛拟機之間能互相通信,但虛拟機與主機和internet不能
通信。
檢查CPU是否支援虛拟化技術
egrep ‘vmx|svm’ /proc/cpuinfo #有輸出則可以使用
關閉selinux狀态關閉防火牆
安裝KVM需要的元件包;
yum install -y kvm python-virtinst libvirt bridge-utils virt-manager qemu-kvm-tools virt-viewer
yum groupinstall “Desktop” 安裝桌面環境
yum groupinstall “Chinese Support” 安裝中文包
libvirt 虛拟機管理工具
virt-manager 圖形化界面管理虛拟機
bridge-utils 網絡橋接工具
python-virtinst python元件,記錄建立VM時的xml值
qemu-kvm-tools kvm調試工具
virt-viewer 圖像化界面
lsmod |grep kvm #檢查KVM子產品是否安裝
設定橋接網絡,首先關閉網絡
service network stop
vim /etc/sysconfig/network-script/ifcfg-br0 #配置如下
DEVICE=”br0”
TYPE=”Bridge”
ONBOOT=”yes”
BOOTPROTO=”static”
IPADDR=10.1.23.91
PREFIX=24
GATEWAY=10.1.23.254
DELAY=0
vim /etc/sysconfig/network-script/ifcfg-em2 #配置如下
DEVICE=”em2”
BOOTPROTO=”static”
HWADDR=”D4:AE:52:C8:44:70”
NM_CONTROLLED=”no”
ONBOOT=”yes”
TYPE=”Ethernet”
BTIDGE=”br0”
UUID=”df80185e-a55f-4874-b9f5-475bf57d64c9”
IPADDR=”10.1.23.4”
NETMASK=”255.255.255.0”
GATEWAY=”10.1.23.254”
service network start 啟動服務
ifconfig 檢查網絡資訊
brctl show
> bridge name bridge id STP enabled interfaces
> br0 8000.d4ae52c84470 no em2
> virbr0 8000.52540074b466 yes virbr0-nic
若不是如上顯示,則按如下輸入指令
service network stop
brctl addif br0 em2
ifup br0
ifup em2
檢查ip轉發是否開啟
cat /etc/sysctl.conf |grep ip_forward
net.ipv4.ip_forward = 1
如果沒有開啟,則
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
/sbin/sysctl -p
修改qemu.conf配置
vi /etc/libvirt/qemu.conf
vnc_listen = “0.0.0.0”修改vnc監聽端口
建立空硬碟,相當于實體機的硬碟(公司常用的qcow2格式)
qemu-img create -f qcow2 /virtal/data/server.qcow2 100G
啟動libvirt
/etc/init.d/libvirtd start
virt-install –virt-type kvm –name server –ram 1024 –cdrom=/virtal/CentOS-6.3-x86_64-bin-DVD1.iso \
–disk path=/virtal/data/server.qcow2,size=100 –network bridge=br0 –graphics vnc,listen=0.0.0.0,port=5904 –foce –autostart
檢視虛拟機狀态
virsh list –all
Id Name State
1 server running
ss -a|grep 5904
檢視vnc端口是否啟用
LISTEN 0 1 :5904 :*
在windos上配置vnc viewer
通路10.1.23.4:5904即可安裝
若vnc配置失敗,則在桌面平台的linux終端輸入
virt-viewer 檢視安裝程度
常用virsh指令
1)virsh list 列出目前虛拟機清單,不包括未啟動的
2)virsh list –all 列出所有虛拟機,包括所有已經定義的虛拟機
3)virsh destroy vm-name 關閉虛拟機
4)virsh start vm-name 啟動虛拟機
5)virsh edit vm-name 編輯虛拟機xml檔案
6)virsh undefine vm-name 删除虛拟機
7)virsh shutdown vm-name 停止虛拟機
8)virsh reboot vm-name 重新開機虛拟機
9)virsh autostart vm-name 虛拟機随主控端啟動
10)virt-clone -o test -n test01 –-file /data/test01.img
在-o後面為被克隆虛拟機名稱,-n後克隆所得虛拟機名稱,file為克隆所得虛拟機鏡像存放位址
克隆虛拟機
virt-clone -o server -n server1 –-file /home/virtal/server1.img(server1.qcow2)
virsh edit server1
修改vnc監聽端口
virsh start server1
利用vnc遠端連接配接該虛拟機,修改ip位址與mac
vi /dev/udev/rules.d/70-presistent-net.rules
注釋第一個eth0
記錄mac位址
vi /etc/sysconfig/network-script/ifcfg-eth0
修改MAC位址與IP位址
reboot