KVM的概念和雲端計算
一、走進雲端計算
雲端計算:雲端計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網路訪問, 進入可配置的計算資源共享池(資源包括網路,伺服器,儲存,應用軟體,服務),這些資源能夠被快速提供,只需投入很少的管理工作,或與服務供應商進行很少的互動。
1、雲端計算的特點和優勢
1)雲端計算是一種使用模式
2)雲端計算必須通過網路訪問
3)彈性計算,按需付費
2、在雲端計算之前的模式或技術
1)IDC託管
2)IDC租用
3)虛擬主機(賣空間的)
4)vps:虛擬專有主機,openvz超賣很坑人的,xen不支援超賣
3、相對於雲端計算,傳統資料中心面臨的問題
1)資源利用率低(大部分機器cpu所佔比率低於15%)
2)資源分配不合理
舉例:由於某個活動,上線各種伺服器,但是並未達到實際效果,導致伺服器資源浪費
3)很難實現真正的運維自動化
4、圖解雲端計算的三層服務
基礎設施:計算,儲存,網路服務
平臺服務:物件儲存,身份認證,執行環境,訊息佇列,資料庫服務
應用平臺:監控,內容,合作,通訊,財務
二、雲端計算與虛擬化
1、公有云、私有云和混合雲
公有云(Public Cloud):通常指第三方提供商為使用者提供的能夠使用的雲,公有云一般可通過 Internet 使用,可能是免費或成本低廉的,公有云的核心屬性是共享資源服務。這種雲有許多例項,可在當今整個開放的公有網路中提供服務。例如:aws,阿里雲,×××,百度雲,騰訊雲。
優點:價格低廉,使用方便
私有云(Private Clouds):是為一個客戶單獨使用而構建的,因而提供對資料、安全性和服務質量的最有效控制。該公司擁有基礎設施,並可以控制在此基礎設施上部署應用程式的方式。私有云可部署在企業資料中心的防火牆內,也可以將它們部署在一個安全的主機託管場所,私有云的核心屬性是專有資源。
優點:可控,資料安全(銀行必然使用私有云)
混合雲(Hybrid Cloud):混合雲融合了公有云和私有云,是近年來雲端計算的主要模式和發展方向。我們已經知道私企業主要是面向企業使用者,出於安全考慮,企業更願意將資料存放在私有云中,但是同時又希望可以獲得公有云的計算資源,在這種情況下混合雲被越來越多的採用,它將公有云和私有云進行混合和匹配,以獲得最佳的效果,這種個性化的解決方案,達到了既省錢又安全的目的,例如在一次活動中,只需要暫時幾臺機器,在私有云存在的情況,考慮混合雲的使用,是最合理化的。
優點:集合的使用方式更完美,可擴充套件,更節省。
2、雲端計算的層次
1. SaaS:提供給客戶的服務是運營商執行在雲端計算基礎設施上的應用程式,使用者可以在各種裝置上通過客戶端介面訪問,如瀏覽器。消費者不需要管理或控制任何雲端計算基礎設施,包括網路、伺服器、作業系統、儲存等等;平時使用的郵件伺服器,即屬於SaaS服務。
2. PaaS:提供給消費者的服務是把客戶採用提供的開發語言和工具(例如Java,python, .Net等)開發的或收購的應用程式部署到供應商的雲端計算基礎設施上去。客戶不需要管理或控制底層的雲基礎設施,包括網路、伺服器、作業系統、儲存等,但客戶能控制部署的應用程式,也可能控制執行應用程式的託管環境配置;更適合提供給開發人員使用,在這裡也可以使用docker容器技術實現
3. IaaS:提供給消費者的服務是對所有計算基礎設施的利用,包括處理CPU、記憶體、儲存、網路和其它基本的計算資源,使用者能夠部署和執行任意軟體,包括作業系統和應用程式。消費者不管理或控制任何雲端計算基礎設施,但能控制作業系統的選擇、儲存空間、部署的應用,也有可能獲得有限制的網路元件(例如路由器、,防火牆,、負載均衡器等)的控制。更適合提供給運維人員使用
3、虛擬化的優勢
1)虛擬化可以虛擬出來多個作業系統,它們之間是相互獨立的,所以每個作業系統上所跑的應用自然是相互不影響的,在這裡用一個經典的例子說明,一臺物理機跑8個tomcat和8個虛擬機器上各跑一個tomcat,跑8個tomcat的物理機,如果其中一個tomcat出問題(記憶體有問題,jvm有問題等),勢必會影響到其他7個tomcat,但是在8個虛擬機器上跑分別各跑一個tomcat,他們之間是互不影響的,由於虛擬化一層原因佔用了一些資源,效果並沒有直接一臺物理機跑8個tomcat效果好,但是虛擬機器的互相獨立互不影響是更重要的,而且便於管理,每個tomcat例項都會起3個埠(8080:對外服務埠,8009:AJP埠,8005:關閉埠),使用虛擬機器之後,就不會擔心多個tomcat埠衝突的情況。
2)支援異構,linux系統可以虛擬化windows系統,方便不同場景系統的使用
3)支援快照功能,克隆功能,快照功能在某個物理機不知執行什麼,是否正在執行的情況下,如果是一臺虛擬機器就好辦了,直接停了該虛擬機器,只不過是佔了一些磁碟空間而已。
4、虛擬化和雲端計算的簡單總結
虛擬化是一種技術,雲端計算是通過虛擬化技術實現的一種通過網路訪問獲取資源,流量,交付的使用模式,兩者並不能相互比較,虛擬化相當於實幹家,而云計算是思想家。
三、虛擬化的分類方式
1、全虛擬化與半虛擬化
全虛擬化:又叫硬體輔助虛擬化技術,最初所使用的虛擬化技術就是全虛擬化(Full Virtualization)技術,它在虛擬機器(VM)和硬體之間加了一個軟體層--Hypervisor,或者叫做虛擬機器管理程式(VMM)。hypervisor 可以劃分為兩大類。首先是型別 1,這種 hypervisor 是直接執行在物理硬體之上的。其次是型別 2,這種 hypervisor 執行在另一個作業系統(執行在物理硬體之上)中。型別 1 hypervisor 的一個例子是基於核心的虛擬機器(KVM —— 它本身是一個基於作業系統的 hypervisor)。型別 2 hypervisor 包括 QEMU 和 WINE。因為執行在虛擬機器上的作業系統通過Hypervisor來最終分享硬體,所以虛擬機發出的指令需經過Hypervisor捕獲並處理。為此每個客戶作業系統(Guest OS)所發出的指令都要被翻譯成CPU能識別的指令格式,這裡的客戶作業系統即是執行的虛擬機器,所以Hypervisor的工作負荷會很大,因此會佔用一定的資源,所以在效能方面不如裸機。但是執行速度要快於硬體模擬。全虛擬化最大的優點就是執行在虛擬機器上的作業系統沒有經過任何修改,唯一的限制就是作業系統必須能夠支援底層的硬體,不過目前的作業系統一般都能支援底層硬體,所以這個限制就變得微不足道了。
半虛擬化:半虛擬化技術是後來才出現的技術,半虛擬化技術英文是paravirtualization,也叫做準虛擬化技術,現在比較熱門,它就是在全虛擬化的基礎上,把客戶作業系統進行了修改,增加了一個專門的API,這個API可以將客戶作業系統發出的指令進行最優化,即不需要Hypervisor耗費一定的資源進行翻譯操作,因此Hypervisor的工作負擔變得非常的小,因此整體的效能也有很大的提高。不過缺點就是,要修改包含該API的作業系統,但是對於某些不含該API的作業系統(主要是windows)來說,就不行能用這種方法,Xen就是一個典型的半虛擬化的技術。
2、伺服器虛擬化,桌面虛擬化,應用虛擬化
1)伺服器虛擬化
數量少的情況推薦使用ESXI,XenServer
數量大的情況推薦使用KVM,RHEV(並不開源),oVirt,Openstack,Vmvare vshpere
2)桌面虛擬化
桌面虛擬化依賴於伺服器虛擬化,在資料中心的伺服器上進行伺服器虛擬化,生成大量的獨立的桌面作業系統(虛擬機器或者虛擬桌面),同時根據專有的虛擬桌面協議傳送給終端裝置。使用者終端通過乙太網登陸到虛擬主機上,只需要記住使用者名稱和密碼及閘道器資訊,即可隨時隨地的通過網路訪問自己的桌面系統,從而實現單機多使用者。多用於IP外包,呼叫中心,銀行辦公、移動桌面。
應用虛擬化:技術原理是基於應用/伺服器計算A/S架構,採用類似虛擬終端的技術,把應用程式的人機互動邏輯(應用程式介面、鍵盤及滑鼠的操作、音訊輸入輸出、讀卡器、列印輸出等)與計算邏輯隔離開來。在使用者訪問一個伺服器虛擬化後的應用時,使用者計算機只需要把人機互動邏輯傳送到伺服器端,伺服器端為使用者開設獨立的會話空間,應用程式的計算邏輯在這個會話空間中執行,把變化後的人機互動邏輯傳送給客戶端,並且在客戶端相應裝置展示出來,從而使使用者獲得如同執行本地應用程式一樣的訪問感受。
3)硬體虛擬化和軟體虛擬化
http://virtualization.ctocio.com.cn/38/11466538.shtml
四、虛擬化之KVM
1、kvm的虛擬化特性
1)嵌入到linxu正式kernel(提高了相容性)
2)程式碼級資源呼叫(提高效能)
3)虛擬機器就是一個程序(記憶體易於管理)
4)直接支援NUMA技術(提高擴充套件性)
5)雖然被Redhat收購了,但是依然保持著開源發展模式,社群活躍
6)更好的商業支援及服務保障
7)Centos7較Centos6預設支援cpu熱新增,記憶體的熱新增,大頁記憶體預設都是開啟的
2、支援虛擬化的條件:
inter的cpu:vmx
AMD的cpu:svm
本文使用的是vmvare,需要開啟如下兩個條件即可,如果是物理機,需要在bios裡面設定,預設都是開啟狀態。
在cpuinfo中可以檢視具體的支援虛擬化的資訊
1 2 3 [[email protected]~]# 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 mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust
3、kvm安裝實戰
1)安裝kvm
[[email protected]~]
#yuminstallqemu-kvmqemu-kvm-toolsvirt-managerlibvirt-y
kvm:linux核心的一個模組,模組不需要安裝,只需要載入
qemu:虛擬化軟體,可以虛擬不同的CPU,支援異構(x86的架構可以虛擬化出不是x86架構的)
qemu-kvm:使用者態管理kvm,網絡卡,音效卡,PCI裝置等都是qemu來管理的
2)建立一個虛擬磁碟,-f 指定格式,路徑是/opt/CentOS-7.1-x86_64.raw,大小為10G
[[email protected]opt]
#qemu-imgcreate-fraw/opt/CentOS-7.1-x86_64.raw10G
Formatting
'/opt/CentOS-7.1-x86_64.raw'
,
fmt
=rawsize=10737418240
3)顯示核心中kvm的狀態
[root[email protected]opt]
#lsmod|grepkvm
kvm_intel1480810
kvm4611261kvm_intel
4)啟動libvirt,檢視狀態,關鍵字:active
5)開始裝一臺虛擬機器
a、首先在vmvare上掛載一個映象
[[email protected]opt]
#ddif=/dev/cdromof=/opt/CentOS-7.1-x86_64.iso
8419328+0records
in
8419328+0recordsout
4310695936bytes(4.3GB)copied,229.618s,18.8MB
/s
[[email protected]opt]
#ls/opt/
CentOS-7.1-x86_64.isoCentOS-7.1-x86_64.rawrh
c、建立一臺虛擬機器
首先學virt-install命令,在這裡使用--help檢視,並且只學習重要的,其他的稍後會有提供
virt-install --help
-n(Name):指定虛擬機器的名稱
--memory(--raw):指定記憶體大小
--cpu:指定cpu的核數(預設為1)
--cdrom:指定映象
--disk:指定磁碟路徑(即上文建立的虛擬磁碟)
--virt-type:指定虛擬機器型別(kvm,qemu,xen)
--network:指定網路型別
執行建立虛擬機器命令:
[[email protected]~]
#virt-install--nameCentOS-7.1-x86_64--virt-typekvm--ram1024--cdrom=/opt/CentOS-7.1-x86--cdrom=/opt/CentOS-7.1-x86_64.iso--diskpath=/opt/CentOS-7.1-x86_64.raw--nehicsvnc,listen=0.0.0.0--notworknetwork=default--graphicsvnc,listen=0.0.0.0--noautoconsole
Starting
install
...
Creatingdomain...|0B00:03
Domaininstallationstill
in
progress.Youcanreconnectto
theconsoletocompletetheinstallationprocess.
如此一個虛擬機器就完成了!
此時,開啟一個VNC客戶端,輸入10.0.0.123:5900(第一個預設就是5900,第二個是5901,以此類推),可連線到所通過vmvare建立的虛擬機器上,然後就是安裝Centos7的過程,此處不再強調。
前文說過,虛擬機器就是宿主機的一個程序
[[email protected]~]
#ps-ef|grepkvm
root6712019:54?00:00:00[kvm-irqfd-clean]
qemu282917520:09?00:18:49
/usr/libexec/qemu-kvm
-nameCentOS-7.1-x86_64-S-machinepc-i440fx-rhel7.0.0,accel=kvm,usb=off-cpuNehalem-m1024-realtimemlock=off-smp1,sockets=1,cores=1,threads=1-uuid1bd0464f-133b-4d51-b60b-5d33c5dde17f-no-user-config-nodefaults-chardevsocket,
id
=charmonitor,path=
/var/lib/libvirt/qemu/CentOS-7
.1-x86_64.monitor,server,nowait-monchardev=charmonitor,
id
=monitor,mode=control-rtcbase=utc,driftfix=slew-globalkvm-pit.lost_tick_policy=discard-no-hpet-no-reboot-bootstrict=on-deviceich9-usb-ehci1,
id
=usb,bus=pci.0,addr=0x4.0x7-deviceich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4-deviceich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1-deviceich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2-drive
file
=
/opt/CentOS-7
.1-x86_64.raw,
if
=none,
id
=drive-virtio-disk0,
format
=raw-devicevirtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,
id
=virtio-disk0,bootindex=2-drive
file
=
/opt/CentOS-7
.1-x86_64.iso,
if
=none,
id
=drive-ide0-0-0,
readonly
=on,
format
=raw-deviceide-
cd
,bus=ide.0,unit=0,drive=drive-ide0-0-0,
id
=ide0-0-0,bootindex=1-netdevtap,fd=23,
id
=hostnet0,vhost=on,vhostfd=24-devicevirtio-net-pci,netdev=hostnet0,
id
=net0,mac=52:54:00:99:1b:4e,bus=pci.0,addr=0x3-chardevpty,
id
=charserial0-deviceisa-serial,chardev=charserial0,
id
=serial0-deviceusb-tablet,
id
=input0-vnc0.0.0.0:0-vgacirrus-devicevirtio-balloon-pci,
id
=balloon0,bus=pci.0,addr=0x6-msgtimestamp=on
root28502020:09?00:00:00[kvm-pit
/2829
]
root306672055020:34pts
/0
00:00:00
grep
--color=autokvm
4、虛擬機器基本操作學習
生成kvm虛擬機器:virt-install
檢視在執行的虛擬機器:virsh list
檢視所有虛擬機器:virsh list --all
檢視kvm虛擬機器配置檔案:virsh dumpxml name
啟動kvm虛擬機器:virsh start name
正常關機:virsh shutdown name
非正常關機(相當於物理機直接拔掉電源):virsh destroy name
刪除:virsh undefine name(徹底刪除,找不回來了,如果想找回來,需要備份/etc/libvirt/qemu的 xml檔案)
根據配置檔案定義虛擬機器:virsh define file-name.xml
掛起,終止:virsh suspend name
恢復掛起狀態:virsh resumed name
a、啟動剛才建立的虛擬機器
[[email protected]~]
#virshstartCentOS-7.1-x86_64
DomainCentOS-7.1-x86_64started
5、編輯kvm的xml檔案,更改虛擬機器配置
a、配置虛擬機器的cpu,兩種方式(啟動的時候指定核數,更改xml)
第一種方法:為了實現cpu的熱新增,就需要更改cpu的最大值,當然熱新增的個數不能超過最大值
[[email protected]~]
#virsheditCentOS-7.1-x86_64
<vcpuplacement=
'auto'
current=
"1"
>4<
/vcpu
>當前為1,自動擴容,最大為4
重啟虛擬機器
[[email protected]~]
#virshshutdownCentOS-7.1-x86_64
DomainCentOS-7.1-x86_64isbeing
shutdown
[[email protected]~]
#virshstartCentOS-7.1-x86_64
DomainCentOS-7.1-x86_64started
登入虛擬機器上,檢視cpu資訊,確認cpu的個數,下面開始進行cpu熱新增
cpu的熱新增(cpu只支援熱新增,不支援熱減少)
[[email protected]~]
#virshsetvcpusCentOS-7.1-x86_642--live
再到虛擬機器中檢視cpu資訊
kvm版本較高,並不需要echo "1"到/sys/devices/system/cpu/cpu1/online 進行啟用,自動可以啟用。
[[email protected]~]
#cat/sys/devices/system/cpu/cpu1/online
1
第二種方法:安裝的時候指定virt-install --vcpus 5 --vcpus 5,maxcpus=10,cpuset=1-4,6,8 --vcpus sockets=2,cores=4,thread=2
b、更改虛擬機器中記憶體的設定
記憶體的設定擁有一個“氣球(balloon)機制”,可以增大減少,但是也要設定一個最大值,預設並沒有設定最大值
,也可以在安裝的時候指定,這裡不再重複此方法
[[email protected]~]
#virsheditCentOS-7.1-x86_64
<memoryunit=
'KiB'
>4194304<
/memory
>把最大記憶體改為4G
<currentMemoryunit=
'KiB'
>1048576<
/currentMemory
>當前記憶體為1G
重啟虛擬機器
檢視當前狀態的記憶體使用情況
[[email protected]~]
#virshqemu-monitor-commandCentOS-7.1-x86_64--hmp--cmdinfoballoon
balloon:actual=1024
對記憶體進行熱新增並檢視
[[email protected]~]
#virshqemu-monitor-commandCentOS-7.1-x86_64--hmp--cmdballoon
unexpectedendofexpression
[[email protected]~]
#virshqemu-monitor-commandCentOS-7.1-x86_64--hmp--cmdinfoballoon
balloon:actual=2000
c、更改虛擬機器中儲存,硬碟設定(不建議在生產環境使用硬碟的擴大收縮模式,很容易產生故障)
[[email protected]~]
#qemu-img--help|grep-i"formats:"
Supportedformats:vvfatvpcvmdkvhdxvdisheepdogrbdrawhost_cdromhost_floppyhost_device
file
qedqcow2qcowparallelsnbdiscsiglusterdmgcloopbochsblkverifyblkdebug
有結果看出,kvm支援很多種硬碟格式
硬碟格式總體上分為兩種:1為全映象格式,2為稀疏格式
全映象格式(典型代表raw格式),其特點:設定多大就是多大,寫入速度快,方便的轉換為其他格式,效能最優,但是佔用空間大
稀疏模式(典型代表qcow2格式),其特點:支援壓縮,快照,映象,更小的儲存空間(即用多少佔多少)
硬碟格式都可以通過qemu-img管理,詳情qemu-img --help
轉載於:https://blog.51cto.com/chenjisong/1725471