【博文推薦】你不得不知的云計(jì)算與虛擬化基礎(chǔ)知識(shí)
本文轉(zhuǎn)自51CTO博客博主徐亮偉的博客,如有任何問題,請(qǐng)進(jìn)入博主頁(yè)面互動(dòng)討論。 |
1.1云計(jì)算概述
云計(jì)算是一種按使用量付費(fèi)的模式,這種模式提供可用的、便捷的、按需的網(wǎng)絡(luò)訪問,進(jìn)入可配置的計(jì)算資源共享池(資源包括網(wǎng)絡(luò),服務(wù)器,存儲(chǔ),應(yīng)用程序,服務(wù)),這些資源能夠被快速提供,只需投入很少的管理工作,或與服務(wù)供應(yīng)商進(jìn)行很少的交互。
在云計(jì)算之前的模式和技術(shù)
- IDC托管
- IDC租用
- 虛擬主機(jī)(賣空間)
- VPS:虛擬專用主機(jī) openvz(通過超賣技術(shù)坑人) xen(不支持超賣)
相對(duì)云計(jì)算,傳統(tǒng)數(shù)據(jù)中心面臨的問題
- 資源利用率低
- 資源分配不合理
- 難以實(shí)現(xiàn)真正的自動(dòng)化運(yùn)維
云計(jì)算特點(diǎn)和優(yōu)勢(shì)
- 云計(jì)算是一種使用模式,不是一種技術(shù)。(通過網(wǎng)絡(luò)、彈性擴(kuò)展、按需付費(fèi))
- 云計(jì)算使用方法必須通過網(wǎng)絡(luò)來(lái)訪問。
- 云計(jì)算的優(yōu)勢(shì)是彈性計(jì)算(按需付費(fèi))。
1.1.1云計(jì)算的特點(diǎn)
- 資源池化
- 無(wú)處不在的網(wǎng)絡(luò)訪問
- 隨需應(yīng)變的自助服務(wù)
- 可測(cè)量的服務(wù)
- 快速的伸縮
云計(jì)算五大特點(diǎn),如圖1-1

圖1-1
1.1.2云計(jì)算服務(wù)模型
云計(jì)算服務(wù)模型如圖1-2

圖1-2
IaaS 基礎(chǔ)設(shè)施即服務(wù)
消費(fèi)者通過Internet 可以從完善的計(jì)算機(jī)基礎(chǔ)設(shè)施獲得服務(wù)。這類服務(wù)稱為基礎(chǔ)設(shè)施即服務(wù)。基于 Internet 的服務(wù)(如存儲(chǔ)和數(shù)據(jù)庫(kù))是 IaaS的一部分。Internet上其他類型的服務(wù)包括平臺(tái)即服務(wù)和軟件即服務(wù)。
PaaS 平臺(tái)即服務(wù)
把服務(wù)器平臺(tái)作為一種服務(wù)提供的商業(yè)模式。而云計(jì)算時(shí)代相應(yīng)的服務(wù)器平臺(tái)或者開發(fā)環(huán)境作為服務(wù)進(jìn)行提供就成為了PaaS。所謂PaaS實(shí)際上是指將軟件研發(fā)的平臺(tái)作為一種服務(wù),以SaaS的模式提交給用戶。因此,PaaS也是SaaS模式的一種應(yīng)用。
SaaS 軟件即服務(wù)
它是一種通過Internet提供軟件的模式,廠商將應(yīng)用軟件統(tǒng)一部署在自己的服務(wù)器上,客戶可以根據(jù)自己實(shí)際需求,通過互聯(lián)網(wǎng)向廠商定購(gòu)所需的應(yīng)用軟件服務(wù),按定購(gòu)的服務(wù)多少和時(shí)間長(zhǎng)短向廠商支付費(fèi)用,并通過互聯(lián)網(wǎng)獲得廠商提供的服務(wù)。用戶不用再購(gòu)買軟件,而改用向提供商租用基于Web的軟件,來(lái)管理企業(yè)經(jīng)營(yíng)活動(dòng),且無(wú)需對(duì)軟件進(jìn)行維護(hù),服務(wù)提供商會(huì)全權(quán)管理和維護(hù)軟件,軟件廠商在向客戶提供互聯(lián)網(wǎng)應(yīng)用的同時(shí),也提供軟件的離線操作和本地?cái)?shù)據(jù)存儲(chǔ),讓用戶隨時(shí)隨地都可以使用其定購(gòu)的軟件和服務(wù)。對(duì)于許多小型企業(yè)來(lái)說(shuō),SaaS是采用先進(jìn)技術(shù)的最好途徑,它消除了企業(yè)購(gòu)買、構(gòu)建和維護(hù)基礎(chǔ)設(shè)施和應(yīng)用程序的需要。
1.1.3云計(jì)算部署模型
公有云(Public Cloud)
公有云通常指第三方提供商為用戶提供的能夠使用的云,公有云一般可通過internet使用,可能是免費(fèi)或成本低廉,公有云的核心屬性是共享資源服務(wù)。這種云有許多實(shí)例,可在當(dāng)今整個(gè)開放的共有網(wǎng)絡(luò)中提供服務(wù)。例如:阿里云、騰訊云、青云、百度云、盛大云、迅達(dá)云、等等。
私有云(Private Clouds)
私有云是為一個(gè)客戶單獨(dú)使用而構(gòu)建的,因而提供對(duì)數(shù)據(jù)、安全性和服務(wù)質(zhì)量的最有效控制。該公司擁有基礎(chǔ)設(shè)施,并可以控制在此基礎(chǔ)設(shè)施上部署應(yīng)用程序的方式。私有云可部署在企業(yè)數(shù)據(jù)中心防火墻內(nèi),也可以將它們部署在一個(gè)安全的主句托管場(chǎng)所,私有云的核心屬性是專有資源。
混合云(Hybrid Cloud)
混合云融合了公有云和私有云,是近年來(lái)云計(jì)算的主要模式和發(fā)展方向。我們已經(jīng)知道私企業(yè)主要是面向企業(yè)用戶,處于安全考慮,企業(yè)更愿意將數(shù)據(jù)存放在私有云中,但是同時(shí)又希望可以獲得公有云的計(jì)算資源,在這種情況下混合云被越來(lái)越多的采用,它將公有云和私有云進(jìn)行混合匹配,以獲得最佳的效果,這種個(gè)性的解決方案,達(dá)到二既省錢又安全的目的。
社區(qū)云(Community Cloud)
社區(qū)云是大的公有云范疇內(nèi)的一個(gè)組成部分。是指在一定的地域范圍內(nèi),由云計(jì)算服務(wù)提供商統(tǒng)一提供計(jì)算資源、網(wǎng)絡(luò)資源、軟件和服務(wù)能力所形成的云計(jì)算形式。即基于社區(qū)的網(wǎng)絡(luò)互連優(yōu)勢(shì)和技術(shù)易于整合特點(diǎn),通過區(qū)域內(nèi)各種計(jì)算能力進(jìn)行統(tǒng)一服務(wù)形式的整合,結(jié)合社區(qū)內(nèi)的用戶需求共性,實(shí)現(xiàn)面向區(qū)域用戶需求的云計(jì)算服務(wù)模式。例如:區(qū)域型和行業(yè)型。資源的高效共享。
1.2虛擬化概述
虛擬化,一種具體的技術(shù),用來(lái)將物理機(jī)虛擬成為多個(gè)相互獨(dú)立的虛擬機(jī)。在一臺(tái)計(jì)算機(jī)上同時(shí)運(yùn)行多個(gè)邏輯計(jì)算機(jī),每個(gè)邏輯計(jì)算機(jī)可運(yùn)行不同的操作系統(tǒng),并且應(yīng)用程序都可以在相互獨(dú)立的空間內(nèi)運(yùn)行而互不影響,可以實(shí)現(xiàn)IT資源的動(dòng)態(tài)分配、靈活調(diào)度、跨域共享,提高IT資源利用率,使IT資源能夠真正成為社會(huì)基礎(chǔ)設(shè)施,服務(wù)于各行各業(yè)中靈活多變的應(yīng)用需求。從而顯著提高計(jì)算機(jī)的工作效率。
1.2.1虛擬化的分類
- 全虛擬化
- 半虛擬化
- 平臺(tái)虛擬化
- 軟件虛擬化
- 硬件虛擬化(Inter vt-x/EPT) (AMD AMD-v /RVI)
- 桌面虛擬化
- 應(yīng)用虛擬化
以上各種虛擬化技術(shù),百度百科都能查閱到相關(guān)資料。
1.2.2虛擬化的優(yōu)勢(shì)
- 虛擬化可以虛擬出來(lái)多個(gè)操作系統(tǒng),它們之間是相互獨(dú)立的,所以每個(gè)操作系統(tǒng)上所跑的應(yīng)用程序是相互不影響的。
- 支持異構(gòu),linux系統(tǒng)可以虛擬化windows系統(tǒng),方便不同場(chǎng)景系統(tǒng)的使用。
- 支持快照、克隆、還原等功能。
企業(yè)案例一
公司虛擬機(jī)你也不知道能不能停,也不知道跑什么了,然后問產(chǎn)品經(jīng)理他也不知道,有可能有用你放著把。如果這是一臺(tái)物理機(jī)你看怎么辦,真的很無(wú)奈、想改個(gè)啥你都不敢該,只能讓他跑在那里。
企業(yè)案例二
公司這臺(tái)物理機(jī)有沒有用,所有人告訴你,沒事刪把肯定沒有用,然后到店慶的時(shí)候,產(chǎn)品經(jīng)理過來(lái)了:我們?nèi)ツ甑陸c做了一個(gè)積分抽獎(jiǎng)的活動(dòng),我花錢買的,我的代碼哪去了,我的服務(wù)器呢?服務(wù)器早都格式化多少遍了,產(chǎn)品經(jīng)理說(shuō)那沒辦法,那么趕緊聯(lián)系提供商把,提供商倒閉了。怎么辦,重新做唄。
如果有虛擬機(jī)就好辦了,我把虛擬機(jī)關(guān)了放在那,只要不刪除,是不是永遠(yuǎn)都在,哪天用在起來(lái)就行了。無(wú)非就占點(diǎn)硬盤,分配的時(shí)候,可以使用多少分配多少。
1.2.3虛擬化與云計(jì)算總結(jié)
- 云計(jì)算不等于虛擬化,兩者并不能相互比較。
- 云計(jì)算是一種資源和使用交互的方式。
- 虛擬化是一種具體的技術(shù)。
- 云計(jì)算要依賴虛擬化技術(shù)來(lái)實(shí)現(xiàn)的一種通過網(wǎng)絡(luò)訪問獲取資源,流量,交付的使用模式。(例如:彈性計(jì)算)。
- 虛擬化相當(dāng)于實(shí)干家,而云計(jì)算是思想家。
虛擬化企業(yè)安裝實(shí)戰(zhàn)
KVM:內(nèi)核級(jí)虛擬化技術(shù)(Kernel-based Virtual Machine)
結(jié)構(gòu)簡(jiǎn)單,包含兩個(gè)部分:
- 設(shè)備驅(qū)動(dòng)/dev/kvm, 針對(duì)模擬PC硬件的用戶空間組件
- KVM需要CPU中虛擬化功能的支持,只可在具有虛擬化支持的CPU上運(yùn)行,即具有VT功能的interCPU和具有ADM-V功能的AMD CPU
1.3.1KVM虛擬化特性
- 嵌入到Linux正式Kernel(提高兼容性)
- 代碼級(jí)資源調(diào)用(提高性能)
- 虛擬機(jī)就是一個(gè)進(jìn)程(內(nèi)存易于管理)
- 直接支持NUMA技術(shù)(提高擴(kuò)展性)
- ------RedHat收購(gòu)KVM---------
- 保持開源發(fā)展模式
- 更好的商業(yè)支持及服務(wù)保障
安裝必備條件
實(shí)驗(yàn)必備條件,必須開啟虛擬機(jī)VT-EPT技術(shù),在vmware虛擬機(jī)選擇上即可。服務(wù)器上默認(rèn)是開啟狀態(tài)。
- [root@linux-node1~]# egrep '(vmx|svm)' /proc/cpuinfo #如果過濾沒有代表不支持虛擬化
- flags:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflushdts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmonpebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pnipclmulqdq vmx ssse3 fma cx16 pcid sse4_1sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrandhypervisor lahf_lm abm 3dnowprefetch ida arat epb xsaveopt pln pts dthermtpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseedadx smap
1.3.2安裝KVM虛擬機(jī)
- [root@linux-node1~]# cat /etc/redhat-release #查看操作系統(tǒng)版本
- CentOSLinux release 7.1.1503 (Core)
- [root@linux-node1~]# yum install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install –y #安裝KVM
- kvm:linux內(nèi)核的一個(gè)模塊,模塊不需要安裝只需要加載,通過用戶態(tài)程序來(lái)管理即可。
- qeum:虛擬化軟件,可以虛擬不同的CPU,支持異構(gòu)(x86的架構(gòu)可以虛擬化不是x86架構(gòu)的)
- qeum-kvm:用戶態(tài)管理kvm,網(wǎng)卡、聲卡、PCI設(shè)備等都是需要qemu來(lái)管理。
- [root@linux-node1~]# lsmod|grep kvm #查看kvm內(nèi)核是否被加載
- kvm_intel 148081 0
- kvm 461126 1 kvm_intel
- [root@linux-node1~]# systemctl enable libvirtd.service #libvirtd加入開機(jī)啟動(dòng)
- [root@linux-node1~]# systemctl start libvirtd.service #啟動(dòng)libvirtd
1.3.3建立一臺(tái)KVM虛擬機(jī)
首先學(xué)習(xí)下virsh-install創(chuàng)建虛擬機(jī)命令
- --virt-type:指定虛擬機(jī)類型(kvm、qemu、xen)
- --name:指定虛擬機(jī)的名稱
- --raw:指定內(nèi)存大小
- --cpu:指定cpu的核數(shù)(默認(rèn)為1)
- --cdrom:指定鏡像
- --disk:指定磁盤路徑(即上文創(chuàng)建的虛擬磁盤)
- --network:指定網(wǎng)絡(luò)類
- [root@linux-node1~]# qemu-img create -f raw /opt/CentOS-7.1-x86_64.raw 10G #創(chuàng)建虛擬磁盤,-f指定格式,路徑/opt/CentOS-7.1-x86_64.raw,大小10G
- [root@linux-node1~]# dd if=/dev/cdrom of=/opt/CentOS-7.1.iso #掛在鏡像,導(dǎo)入至虛擬機(jī)
- [root@linux-node1~]# virt-install --name CentOS-7-x86_64 --virt-type kvm --ram 1024--cdrom=/opt/CentOS-7.1.iso --disk path=/opt/CentOS-7.1-x86_64.raw --networknetwork=default --graphics vnc,listen=0.0.0.0 --noautoconsole #創(chuàng)建一臺(tái)KVM虛擬機(jī)
- Startinginstall...
- Creatingdomain... | 0 B 00:03
- Domaininstallation still in progress. You can reconnect to
- theconsole to complete the installation process.
1.3.4VNC連接KVM虛擬機(jī)
打開一個(gè)VNC客戶端,輸入192.168.56.111:5900(第一個(gè)默認(rèn)5900,第二個(gè)5901,以此類推)連接虛擬機(jī)里面建立的KVM虛擬機(jī),安裝CentOS7的過程,此處不在演示如何安裝。

圖1-3
安裝CentOS7,在啟動(dòng)前修改內(nèi)核讓網(wǎng)卡為eth0,如圖1-4

圖1-4
1.4KVM日常管理
- [root@linux-node1opt]# virsh start CentOS-7-x86_64 #啟動(dòng)剛才創(chuàng)建的CentOS7KVM虛擬機(jī)
- DomainCentOS-7-x86_64 started
- [root@linux-node1opt]# virsh list #查看KVM虛擬機(jī)是否啟動(dòng)
- Id Name State
- ----------------------------------------------------
- 3 CentOS-7-x86_64 running
1.4.1CPU擴(kuò)容
- [root@linux-node1opt]# virsh edit CentOS-7-x86_64 #為了實(shí)現(xiàn)CPU的熱添加,就需要更改Cpu的最大值,當(dāng)然熱添加值不能超過最大值
- <vcpuplacement='auto' current="1">4</vcpu> #當(dāng)前為1,自動(dòng)擴(kuò)容最大為4
- [root@linux-node1opt]# virsh shutdown CentOS-7-x86_64 #關(guān)閉KVM虛擬機(jī)
- DomainCentOS-7-x86_64 is being shutdown
- [root@linux-node1opt]# virsh start CentOS-7-x86_64 #啟動(dòng)KVM虛擬機(jī)
- DomainCentOS-7-x86_64 started
- [root@linux-node1opt]# virsh setvcpus CentOS-7-x86_64 2 --live #熱修改為2個(gè)cpu(不知減少),高版本自動(dòng)激活
- [root@KVM]#grep processor /proc/cpuinfo |wc -l #通過vnc登錄KVM虛擬機(jī)查看是否擴(kuò)容成功
- 2
- 在創(chuàng)建虛擬機(jī)時(shí)指定cpu
- [root@linux-node1~]# virt-install --help|grep vcpus
- --vcpus VCPUS 為虛擬機(jī)配置的 vcpus 數(shù)。例如:
- --vcpus 5
- --vcpus5,maxcpus=10,cpuset=1-4,6,8
- --vcpussockets=2,cores=4,threads=2,
1.4.2內(nèi)存擴(kuò)容
內(nèi)存的設(shè)置擁有一個(gè)氣球(balloon)機(jī)制,可以增大減少,但是也要設(shè)置一個(gè)最大值,默認(rèn)并沒有最大值,也可以在安裝時(shí)指定。
- [root@linux-node1opt]# virsh edit CentOS-7-x86_64 #為了實(shí)現(xiàn)CPU的熱添加,就需要更改Cpu的最大值,當(dāng)然熱添加值不能超過最大值
- <memoryunit='KiB'>4194304</memory> #修改最大支持內(nèi)存擴(kuò)容為4G
- <currentMemoryunit='KiB'>1048576</currentMemory> #當(dāng)前KVM虛擬機(jī)內(nèi)存為1G
- 重啟虛擬機(jī)
- [root@linux-node1opt]# virsh shutdown CentOS-7-x86_64 #關(guān)閉KVM虛擬機(jī)
- DomainCentOS-7-x86_64 is being shutdown
- [root@linux-node1opt]# virsh start CentOS-7-x86_64 #啟動(dòng)KVM虛擬機(jī)
- DomainCentOS-7-x86_64 started
- [root@linux-node1~]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon #查看當(dāng)前KVM內(nèi)存大小
- balloon:actual=1024
- [root@linux-node1~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon #熱添加
- unexpected end of expression
- [root@linux-node1~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon #在次查看
- balloon: actual=2001
1.4.3硬盤管理
更改虛擬機(jī)中存儲(chǔ),硬盤設(shè)置(不建議生產(chǎn)環(huán)境使用硬盤的擴(kuò)大收縮模式,很容易產(chǎn)生故障)
- [root@linux-node1~]# qemu-img --help |grep -i "formats:"
- Supportedformats: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppyhost_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftphttps http cloop bochs blkverify blkdebug
硬盤格式都可以通過qeum-img管理,具體qemu-img --help
全鏡像格式(代表raw):設(shè)置多大就是多大,寫入速度快,方便的轉(zhuǎn)換為其他格式,性能最優(yōu),但是占用空間大。
稀疏格式(代表qcow2):支持壓縮,快照,鏡像,更小的存儲(chǔ)空間(即用多少占多少)
1.4.4網(wǎng)絡(luò)管理
默認(rèn)情況KVM的網(wǎng)絡(luò)是NAT模式,但是在生產(chǎn)情況,用的多的都是網(wǎng)橋模式。
修改eth0(這里CentOS7的eth0在裝機(jī)時(shí)就指定了,那如果沒指定怎么辦? http://www.xuliangwei.com/xubusi/102.html)
- [root@linux-node1~]# brctl addbr br0 #添加一個(gè)網(wǎng)卡
- [root@linux-node1~]# brctl show #查看網(wǎng)卡信息
- bridgename bridge id STP enabled interfaces
- br0 8000.000000000000 no
- virbr0 8000.5254009f0311 yes virbr0-nic
- [root@linux-node1~]# brctl addif br0 eth0 && ip addr del dev eth0 192.168.56.111/24&&ifconfig br0 192.168.56.111/24 up && route add default gw192.168.56.2 && iptables -F #把eth0加入網(wǎng)橋,使用橋接模式,給br設(shè)置ip,添加路由網(wǎng)關(guān),關(guān)閉防火墻
- [root@linux-node1~]# ifconfig br0 #查看網(wǎng)橋的IP
- br0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
- inet 192.168.56.111 netmask 255.255.255.0 broadcast 192.168.56.255
- inet6 fe80::20c:29ff:fe5d:cc27 prefixlen 64 scopeid 0x20<link>
- ether 00:0c:29:5d:cc:27 txqueuelen 0 (Ethernet)
- RX packets 4813 bytes 472527 (461.4 KiB)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 2705 bytes 510369 (498.4 KiB)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- [root@linux-node1~]# virsh edit CentOS-7-x86_64 #編輯虛擬機(jī)的網(wǎng)絡(luò)配置使用br0網(wǎng)橋模式
- <interface type='bridge'> #虛擬機(jī)網(wǎng)絡(luò)連接方式
- <mac address='52:54:00:22:04:0f'/> #為虛擬機(jī)分配MAC地址,務(wù)必唯一,如果是dhcp獲得同樣IP會(huì)引起沖突
- <source bridge='br0'/> #當(dāng)前主機(jī)網(wǎng)橋名稱
- 重啟虛擬機(jī)
- [root@linux-node1opt]# virsh shutdown CentOS-7-x86_64 #關(guān)閉KVM虛擬機(jī)
- DomainCentOS-7-x86_64 is being shutdown
- [root@linux-node1opt]# virsh start CentOS-7-x86_64 #啟動(dòng)KVM虛擬機(jī)
- DomainCentOS-7-x86_64 started
- #然后配置靜態(tài)IP地址,重啟網(wǎng)卡,即可以通過xshell連接上KVM虛擬機(jī)了。
1.5KVM常用管理
- [root@linux-node1~]# virt-install #建立kvm虛擬機(jī)
- [root@linux-node1~]# virsh list #查看正在運(yùn)行的KVM虛擬機(jī)
- [root@linux-node1~]# virsh list --all #查看所有KVM虛擬機(jī)
- [root@linux-node1~]# virsh start name #啟動(dòng)KVM虛擬機(jī)
- [root@linux-node1~]# virsh shutdown name #正常關(guān)閉KVM虛擬機(jī)
- [root@linux-node1~]# virsh destroy name #強(qiáng)制關(guān)閉KVM虛擬機(jī)(類似于直接斷電)
- [root@linux-node1~]# virsh suspend name #掛起KVM虛擬機(jī)
- [root@linux-node1~]# virsh resume name #恢復(fù)掛起的KVM虛擬機(jī)
- [root@linux-node1~]# virsh dumpxml name #查看KVM虛擬機(jī)配置文件
- [root@linux-node1~]# virsh edit name #編輯KVM虛擬機(jī)的xml配置文件
- [root@linux-node1~]# virsh undefine name #徹底刪除KVM虛擬機(jī),不可逆,如果想找回來(lái),需要備份/etc/libvirt/qemu的xml文件)
1.6KVM性能優(yōu)化
1.6.1CPU優(yōu)化
inter的cpu的運(yùn)行級(jí)別,按權(quán)限級(jí)別高低Ring3->Ring1->Ring0(Ring2和Ring1暫時(shí)用不上)Ring3為用戶態(tài),Ring0為內(nèi)核態(tài)

圖1-5
Ring3的用戶態(tài)是沒有權(quán)限管理硬件的,需要切換到內(nèi)核態(tài)Ring0,這樣的切換(系統(tǒng)調(diào)用)稱為上下文切換,物理機(jī)到虛擬機(jī)多次的上下文切換,勢(shì)必會(huì)導(dǎo)致性能出現(xiàn)問題。對(duì)于全虛擬化,inter實(shí)現(xiàn)了技術(shù)VT-x,在CPU硬件上實(shí)現(xiàn)了加速轉(zhuǎn)換,CentOS7默認(rèn)是不需要開啟的。
CPU緩存綁定
- [root@linux-node1~]# lscpu|grep cache #centos7自帶查看cpu信息命令
- L1dcache: 32K
- L1icache: 32K
- L2cache: 256K
- L3cache: 3072K
L1是靜態(tài)緩存,造價(jià)高。
L2,L3是動(dòng)態(tài)緩存,通過脈沖的方式寫入0和1,造價(jià)較低。
cache解決了cpu處理快,內(nèi)存處理慢的問題,類似于memcaced和數(shù)據(jù)庫(kù)。
如果cpu調(diào)度器把進(jìn)程隨便調(diào)度到其他cpu上,而不是當(dāng)前L1,L2,L3的緩存cpu上,緩存就不生效了,就會(huì)產(chǎn)生miss,為了減少cache miss,需要把KVM進(jìn)程綁定到固定的cpu上。
可以使用taskset把某一個(gè)進(jìn)程綁定(cpu親和力綁定,可以提高20%的性能)在某一個(gè)cpu上,例如:taskset -cp 125718(1指的是cpu1,也可以綁定到多個(gè)cpu上,25718是指的pid).
cpu綁定的優(yōu)點(diǎn):提高性能,20%以上
cpu綁定的缺點(diǎn):不方便遷移,靈活性差
1.6.2內(nèi)存優(yōu)化
宿主機(jī)虛擬內(nèi)存-> 宿主機(jī)物理內(nèi)存
虛擬機(jī)的虛擬內(nèi)存 -> 虛擬機(jī)的物理內(nèi)存
VMM通過采用影子列表解決內(nèi)存轉(zhuǎn)換的問題,影子頁(yè)表是一種比較成熟的純軟件的內(nèi)存虛擬化方式,但影子頁(yè)表固有的局限性,影響了VMM的性能,例如,客戶機(jī)中有多個(gè)CPU,多個(gè)虛擬CPU之間同步頁(yè)面數(shù)據(jù)將導(dǎo)致影子頁(yè)表更新次數(shù)幅度增加,測(cè)試頁(yè)表將帶來(lái)異常嚴(yán)重的性能損失。如下圖1-6為影子頁(yè)表的原理圖

圖1-6
在此之際,Inter在最新的Core I7系列處理器上集成了EPT技術(shù)(對(duì)應(yīng)AMD的為RVI技術(shù)),以硬件輔助的方式完成客戶物理內(nèi)存到機(jī)器物理內(nèi)存的轉(zhuǎn)換,完成內(nèi)存虛擬化,并以有效的方式彌補(bǔ)了影子頁(yè)表的缺陷,該技術(shù)默認(rèn)是開啟的,如下圖1-7為EPT技術(shù)的原理。

圖1-7
KSM內(nèi)存合并
宿主機(jī)上默認(rèn)會(huì)開啟ksmd進(jìn)程,該進(jìn)程作為內(nèi)核中的守護(hù)進(jìn)程存在,它定期執(zhí)行頁(yè)面掃描,識(shí)別副本頁(yè)面并合并副本,釋放這些頁(yè)面以供它用,CentOS7默認(rèn)是開啟狀態(tài)
- [root@linux-node1~]# ps aux|grep ksmd|grep -v grep
- root 280 0.0 0.0 0 0 ? SN 04:22 0:00 [ksmd]
大頁(yè)內(nèi)存,CentOS7默認(rèn)開啟的
- [root@linux-node1~]# cat /sys/kernel/mm/transparent_hugepage/enabled
- [always]madvise never
- [root@linux-node1~]# ps aux|grep hugepage|grep -v grep
- root 281 0.0 0.0 0 0 ? SN 04:22 0:03 [khugepaged]
Linux默認(rèn)的內(nèi)存頁(yè)面大小都是4K,HugePage進(jìn)程會(huì)將默認(rèn)的每個(gè)內(nèi)存頁(yè)面可以調(diào)整為2M
1.6.3磁盤IO優(yōu)化
IO調(diào)度算法,也叫電梯算法,詳情請(qǐng)看趙班長(zhǎng)博客:http://www.unixhot.com/article/4
- Noop Scheduler:簡(jiǎn)單的FIFO隊(duì)列,最簡(jiǎn)單的調(diào)度算法,由于會(huì)產(chǎn)生讀IO的阻塞,一般使用在SSD硬盤,此時(shí)不需要調(diào)度,IO效果非常好
- Anticipatory IO Scheduler(asscheduler)適合大數(shù)據(jù)順序順序存儲(chǔ)的文件服務(wù)器,如ftp server和web server,不適合數(shù)據(jù)庫(kù)環(huán)境,DB服務(wù)器不要使用這種算法。
- Deadline Schedler:按照截止時(shí)間的調(diào)度算法,為了防止出現(xiàn)讀取被餓死的現(xiàn)象,按照截止時(shí)間進(jìn)行調(diào)整,默認(rèn)的是讀期限短于寫期限,就不會(huì)產(chǎn)生餓死的狀況,一般應(yīng)用在數(shù)據(jù)庫(kù)
- Complete Fair Queueing Schedule:完全公平的排隊(duì)的IO調(diào)度算法,保證每個(gè)進(jìn)程相對(duì)特別公平的使用IO
- [root@linux-node1~]# dmesg|grep -i "scheduler" #查看本機(jī)Centos7默認(rèn)所支持的調(diào)度算法
- [ 1.332147] io scheduler noop registered
- [ 1.332151] io scheduler deadline registered(default)
- [ 1.332190] io scheduler cfq registered
臨時(shí)更改某個(gè)磁盤的IO調(diào)度算法,將deadling模式改為cfq模式
- [root@linux-node1~]# cat /sys/block/sda/queue/scheduler
- noop[deadline] cfq
- [root@linux-node1~]# echo cfq >/sys/block/sda/queue/scheduler
- [root@linux-node1~]# cat /sys/block/sda/queue/scheduler
- noopdeadline [cfq]
- [root@linux-node1~]# vim /boot/grub/menu.lst #使更改的IO調(diào)度算法永久生效,需要更改內(nèi)核參數(shù)
- kernel/boot/vmlinuz-3.10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet
1.7虛擬化鏡像制作
1.在開始創(chuàng)建過虛擬磁盤,并命名為CentOS-7.1-x86_64.raw,這個(gè)是虛擬機(jī)鏡像。
- [root@linux-node1~]# ll /opt/
- total5203344
- -rw-r--r-- 1 qemu qemu 4310695936 12月 28 04:46CentOS-7.1.iso
- -rw-r--r--.1 qemu qemu 10737418240 12月 28 08:55CentOS-7.1-x86_64.raw
2. 分區(qū)的時(shí)候,只分一個(gè)/分區(qū)(不需要swap分區(qū))。
3. 刪除網(wǎng)卡里面{UUID,MAC}
4. 如果有/etc/udev/rules.d/70-persistent-ipoib.rules 則刪除。
5. iptables關(guān)閉、selinux關(guān)閉
6.安裝基礎(chǔ)軟件包。(net-tools lrzsz screen tree vim wget)