centos6.5kvm虛擬化安裝部署


一、走進雲計算

雲計算:雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問, 進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用軟件,服務),這些資源能夠被快速提供,只需投入很少的管理工作,或與服務供應商進行很少的交互。

1、雲計算的特點和優勢

1)雲計算是一種使用模式

2)雲計算必須通過網絡訪問

3)彈性計算,按需付費

2、在雲計算之前的模式或技術

1)IDC托管

2)IDC租用

3)虛擬主機(賣空間的)

4)vps:虛擬專有主機,openvz超賣很坑人的,xen不支持超賣

3、相對於雲計算,傳統數據中心面臨的問題

1)資源利用率低(大部分機器cpu所占比率低於15%)

2)資源分配不合理  

   舉例:由於某個活動,上線各種服務器,但是並未達到實際效果,導致服務器資源浪費

3)很難實現真正的運維自動化

4、圖解雲計算的三層服務

wKioL1Zm8cjDD5RcAAEntanuGhU488.jpg

基礎設施:計算,存儲,網絡服務

平台服務:對象存儲,身份認證,運行環境,消息隊列,數據庫服務

應用平台:監控,內容,合作,通信,財務

二、雲計算與虛擬化

1、公有雲、私有雲和混合雲

公有雲(Public Cloud):通常指第三方提供商為用戶提供的能夠使用的雲,公有雲一般可通過 Internet 使用,可能是免費或成本低廉的,公有雲的核心屬性是共享資源服務。這種雲有許多實例,可在當今整個開放的公有網絡中提供服務。例如:aws,阿里雲,青雲,百度雲,騰訊雲。

優點:價格低廉,使用方便

私有雲(Private Clouds):是為一個客戶單獨使用而構建的,因而提供對數據、安全性和服務質量的最有效控制。該公司擁有基礎設施,並可以控制在此基礎設施上部署應用程序的方式。私有雲可部署在企業數據中心的防火牆內,也可以將它們部署在一個安全的主機托管場所,私有雲的核心屬性是專有資源。

優點:可控,數據安全(銀行必然使用私有雲)

混合雲(Hybrid Cloud):混合雲融合了公有雲和私有雲,是近年來雲計算的主要模式和發展方向。我們已經知道私企業主要是面向企業用戶,出於安全考慮,企業更願意將數據存放在私有雲中,但是同時又希望可以獲得公有雲的計算資源,在這種情況下混合雲被越來越多的采用,它將公有雲和私有雲進行混合和匹配,以獲得最佳的效果,這種個性化的解決方案,達到了既省錢又安全的目的,例如在一次活動中,只需要暫時幾台機器,在私有雲存在的情況,考慮混合雲的使用,是最合理化的。

優點:集合的使用方式更完美,可擴展,更節省。

 

 

wKiom1Zm80DjTWeXAAM85ysyv94891.png

 

 

2、雲計算的層次

 

wKiom1Zm9lqTSc21AABrG6A4NEk059.gif

wKioL1Zm9s2RoeSCAAN5nceyebY282.jpg

 

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、全虛擬化與半虛擬化

wKiom1Znupvh84RTAAARM418Qvc784.jpg

全虛擬化:又叫硬件輔助虛擬化技術,最初所使用的虛擬化技術就是全虛擬化(Full Virtualization)技術,它在虛擬機(VM)和硬件之間加了一個軟件層--Hypervisor,或者叫做虛擬機管理程序(VMM)。hypervisor 可以划分為兩大類。首先是類型 1,這種 hypervisor 是直接運行在物理硬件之上的。其次是類型 2,這種 hypervisor 運行在另一個操作系統(運行在物理硬件之上)中。類型 1 hypervisor 的一個例子是基於內核的虛擬機(KVM —— 它本身是一個基於操作系統的 hypervisor)。類型 2 hypervisor 包括 QEMU 和 WINE。因為運行在虛擬機上的操作系統通過Hypervisor來最終分享硬件,所以虛擬機發出的指令需經過Hypervisor捕獲並處理。為此每個客戶操作系統(Guest OS)所發出的指令都要被翻譯成CPU能識別的指令格式,這里的客戶操作系統即是運行的虛擬機,所以Hypervisor的工作負荷會很大,因此會占用一定的資源,所以在性能方面不如裸機。但是運行速度要快於硬件模擬。全虛擬化最大的優點就是運行在虛擬機上的操作系統沒有經過任何修改,唯一的限制就是操作系統必須能夠支持底層的硬件,不過目前的操作系統一般都能支持底層硬件,所以這個限制就變得微不足道了。

wKioL1ZnuwzAea4kAAATeFBBmOc642.jpg

半虛擬化:半虛擬化技術是后來才出現的技術,半虛擬化技術英文是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里面設置,默認都是開啟狀態。

spacer.gifwKioL1ZoA93iM6rCAABheGWPmTo040.jpg

在cpuinfo中可以查看具體的支持虛擬化的信息

1
2
3
[root@chuck~] # 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

 

1
[root@chuck~] # yum install qemu-kvm qemu-kvm-tools virt-manager libvirt -y

kvm:linux內核的一個模塊,模塊不需要安裝,只需要加載

qemu:虛擬化軟件,可以虛擬不同的CPU,支持異構(x86的架構可以虛擬化出不是x86架構的)

qemu-kvm:用戶態管理kvm,網卡,聲卡,PCI設備等都是qemu來管理的

2)創建一個虛擬磁盤,-f 指定格式,路徑是/opt/CentOS-7.1-x86_64.raw,大小為10G

1
2
[root@chuck opt] # qemu-img create -f raw /opt/CentOS-7.1-x86_64.raw 10G
Formatting  '/opt/CentOS-7.1-x86_64.raw' fmt =raw size=10737418240

3)顯示內核中kvm的狀態

1
2
3
[root@chuck opt] # lsmod|grep kvm
kvm_intel                148081  0 
kvm                   461126  1 kvm_intel

4)啟動libvirt,查看狀態,關鍵字:active

wKiom1ZoC1qwxQtfAADnLhwF05w013.png

5)開始裝一台虛擬機

a、首先在vmvare上掛載一個鏡像

wKioL1ZoDL6SHbC_AABi8Yn_3l8092.pngb、把鏡像導入到虛擬機中,當然時間可能較長

1
2
3
4
5
6
[root@localhost opt] # dd if=/dev/cdrom of=/opt/CentOS-7.1-x86_64.iso
8419328+0 records  in
8419328+0 records out
4310695936 bytes (4.3 GB) copied, 229.618 s, 18.8 MB /s
[root@localhost opt] # ls /opt/
CentOS-7.1-x86_64.iso  CentOS-7.1-x86_64.raw  rh

c、創建一台虛擬機

首先學virt-install命令,在這里使用--help查看,並且只學習重要的,其他的稍后會有提供

virt-install --help

-n(Name):指定虛擬機的名稱

--memory(--raw):指定內存大小

--cpu:指定cpu的核數(默認為1)

--cdrom:指定鏡像

--disk:指定磁盤路徑(即上文創建的虛擬磁盤)

--virt-type:指定虛擬機類型(kvm,qemu,xen)

--network:指定網絡類型

執行創建虛擬機命令:

1
2
3
4
5
6
[root@chuck ~] # virt-install --name CentOS-7.1-x86_64 --virt-type kvm --ram 1024 --cdrom=/opt/CentOS-7.1-x86 --cdrom=/opt/CentOS-7.1-x86_64.iso  --disk path=/opt/CentOS-7.1-x86_64.raw --nehics vnc,listen=0.0.0.0 --notwork network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
 
Starting  install ...
Creating domain...                                       |    0 B     00:03     
Domain installation still  in  progress. You can reconnect to 
the console to complete the installation process.

如此一個虛擬機就完成了!

此時,打開一個VNC客戶端,輸入10.0.0.123:5900(第一個默認就是5900,第二個是5901,以此類推),可連接到所通過vmvare創建的虛擬機上,然后就是安裝Centos7的過程,此處不再強調。

前文說過,虛擬機就是宿主機的一個進程

1
2
3
4
5
[root@chuck ~] # ps -ef|grep kvm
root        671      2  0 19:54 ?        00:00:00 [kvm-irqfd-clean]
qemu       2829      1 75 20:09 ?        00:18:49  /usr/libexec/qemu-kvm  -name CentOS-7.1-x86_64 -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off -cpu Nehalem -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 1bd0464f-133b-4d51-b60b-5d33c5dde17f -no-user-config -nodefaults -chardev socket, id =charmonitor,path= /var/lib/libvirt/qemu/CentOS-7 .1-x86_64.monitor,server,nowait -mon chardev=charmonitor, id =monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-reboot -boot strict=on -device ich9-usb-ehci1, id =usb,bus=pci.0,addr=0x4.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 -device ich9-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 -device virtio-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 -device ide- cd ,bus=ide.0,unit=0,drive=drive-ide0-0-0, id =ide0-0-0,bootindex=1 -netdev tap,fd=23, id =hostnet0,vhost=on,vhostfd=24 -device virtio-net-pci,netdev=hostnet0, id =net0,mac=52:54:00:99:1b:4e,bus=pci.0,addr=0x3 -chardev pty, id =charserial0 -device isa-serial,chardev=charserial0, id =serial0 -device usb-tablet, id =input0 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci, id =balloon0,bus=pci.0,addr=0x6 -msg timestamp=on
root       2850      2  0 20:09 ?        00:00:00 [kvm-pit /2829 ]
root      30667   2055  0 20:34 pts /0     00:00:00  grep  --color=auto kvm

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、啟動剛才創建的虛擬機

1
2
[root@chuck ~] # virsh start CentOS-7.1-x86_64  
Domain CentOS-7.1-x86_64 started

5、編輯kvm的xml文件,更改虛擬機配置

a、配置虛擬機的cpu,兩種方式(啟動的時候指定核數,更改xml)

第一種方法:為了實現cpu的熱添加,就需要更改cpu的最大值,當然熱添加的個數不能超過最大值

1
2
[root@chuck ~] # virsh edit CentOS-7.1-x86_64 
<vcpu placement= 'auto'  current= "1" >4< /vcpu >  當前為1,自動擴容,最大為4

重啟虛擬機

1
2
3
4
[root@chuck ~] # virsh shutdown CentOS-7.1-x86_64       
Domain CentOS-7.1-x86_64 is being  shutdown
[root@chuck ~] # virsh start CentOS-7.1-x86_64    
Domain CentOS-7.1-x86_64 started

登錄虛擬機上,查看cpu信息,確認cpu的個數,下面開始進行cpu熱添加

wKiom1Zo_KjwvnZyAAARoIR8aAM601.png

cpu的熱添加(cpu只支持熱添加,不支持熱減少)

1
[root@chuck ~] # virsh setvcpus CentOS-7.1-x86_64 2 --live

再到虛擬機中查看cpu信息

wKiom1Zo_eai19fFAAAwBl4NwvE634.png

kvm版本較高,並不需要echo "1"到/sys/devices/system/cpu/cpu1/online 進行激活,自動可以激活。

1
2
[root@chuck ~] # 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)機制”,可以增大減少,但是也要設置一個最大值,默認並沒有設置最大值

,也可以在安裝的時候指定,這里不再重復此方法

1
2
3
[root@chuck ~] # virsh edit CentOS-7.1-x86_64  
  <memory unit= 'KiB' >4194304< /memory >把最大內存改為4G
   <currentMemory unit= 'KiB' >1048576< /currentMemory >當前內存為1G

重啟虛擬機

查看當前狀態的內存使用情況

1
2
[root@chuck ~] # virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon
balloon: actual=1024

對內存進行熱添加並查看

1
2
3
4
[root@chuck ~] # virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon 
unexpected end of expression
[root@chuck ~] # virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon
balloon: actual=2000

c、更改虛擬機中存儲,硬盤設置(不建議在生產環境使用硬盤的擴大收縮模式,很容易產生故障)

1
2
[root@chuck ~] # qemu-img --help |grep -i "formats:"  
Supported formats: vvfat vpc vmdk vhdx vdi sheepdog rbd raw host_cdrom host_floppy host_device  file  qed qcow2 qcow parallels nbd iscsi gluster dmg cloop bochs blkverify blkdebug

有結果看出,kvm支持很多種硬盤格式

硬盤格式總體上分為兩種:1為全鏡像格式,2為稀疏格式

全鏡像格式(典型代表raw格式),其特點:設置多大就是多大,寫入速度快,方便的轉換為其他格式,性能最優,但是占用空間大

稀疏模式(典型代表qcow2格式),其特點:支持壓縮,快照,鏡像,更小的存儲空間(即用多少占多少)

硬盤格式都可以通過qemu-img管理,詳情qemu-img --help

d、kvm的網絡管理

默認情況是NAT情況,但是在生產情況,使用更多的是橋接模式

更改虛擬機為網橋模式,原理圖如下,網橋的基本原理就是創建一個橋接接口br0,在物理網卡和虛擬網絡接口之間傳遞數據。

wKiom1ZoKQHy9oVuAABjiOuoUOo259.png

修改eth0(這里Centos7的eth0在裝機的時候就指定,不需要特意指定了)

添加一個網橋並查看

1
[root@chuck ~] # brctl addbr br0

把eth0加入網橋,使用橋接模式,給br設置ip,添加路由網關,關閉防火牆

1
[root@chuck ~] # brctl addif br0 eth0 && ip addr del dev eth0 10.0.0.123/24 && ifconfig br0 10.0.0.123/24 up && route add default gw 10.0.0.2 && iptables -F

編輯虛擬機的網絡配置使用br0網橋模式

1
2
3
4
5
[root@chuck ~]# virsh edit CentOS-7.1-x86_64 
< interface  type = "bridge" <!--虛擬機網絡連接方式-->
     < source  bridge = "br0"  />  <!-- 當前主機網橋的名稱-->
     < mac  address = "00:16:e4:9a:b3:6a"  />  <!--為虛擬機分配mac地址,務必唯一,如果是dhcp獲得同樣ip,引起沖突-->
</ interface >

重啟虛擬機,網橋模式生效,此時使用crt便可以鏈接到所創建的虛擬機了,

在vmvare機器上使用ifconfig查看詳情

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@chuck ~] # ifconfig 
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 10.0.0.123  netmask 255.255.255.0  broadcast 10.0.0.255
         inet6 fe80::20c:29ff:fe67:5a43  prefixlen 64  scopeid 0x20<link>
         ether 00:0c:29:67:5a:43  txqueuelen 0  (Ethernet)
         RX packets 5178  bytes 278872 (272.3 KiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 7599  bytes 862371 (842.1 KiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet6 fe80::20c:29ff:fe67:5a43  prefixlen 64  scopeid 0x20<link>
         ether 00:0c:29:67:5a:43  txqueuelen 1000  (Ethernet)
         RX packets 13641  bytes 973732 (950.9 KiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 21843  bytes 2417546 (2.3 MiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
         inet 127.0.0.1  netmask 255.0.0.0
         inet6 ::1  prefixlen 128  scopeid 0x10<host>
         loop  txqueuelen 0  (Local Loopback)
         RX packets 10  bytes 1044 (1.0 KiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 10  bytes 1044 (1.0 KiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
         inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
         ether 52:54:00:fc:d1:d1  txqueuelen 0  (Ethernet)
         RX packets 97  bytes 8122 (7.9 KiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 36  bytes 5157 (5.0 KiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet6 fe80::fc54:ff:fe99:1b4e  prefixlen 64  scopeid 0x20<link>
         ether fe:54:00:99:1b:4e  txqueuelen 500  (Ethernet)
         RX packets 42  bytes 7295 (7.1 KiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 45  bytes 4919 (4.8 KiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

6、kvm的優化

a、cpu的優化

inter的cpu的運行級別,按權限級別高低Ring3->Ring2->Ring1->Ring0,(Ring2和Ring1暫時沒什么卵用)Ring3為用戶態,Ring0為內核態

wKiom1ZpEHGgVPZTAACx5jfGqTY777.png

Ring3的用戶態是沒有權限管理硬件的,需要切換到內核態Ring0,這樣的切換(系統調用)稱之為上下文切換,物理機到虛擬機多次的上下文切換,勢必會導致性能出現問題。對於全虛擬化,inter實現了技術VT-x,在cpu硬件上實現了加速轉換,CentOS7默認是不需要開啟的。

cpu的緩存綁定cpu的優化

1
2
3
4
5
[root@chuck ~] # lscpu|grep cache
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K

L1是靜態緩存,造價高,L2,L3是動態緩存,通過脈沖的方式寫入0和1,造價較低。cache解決了cpu處理快,內存處理慢的問題,類似於memcaced和數據庫。如果cpu調度器把進程隨便調度到其他cpu上,而不是當前L1,L2,L3的緩存cpu上,緩存就不生效了,就會產生miss,為了減少cache miss,需要把KVM進程綁定到固定的cpu上,可以使用taskset把某一個進程綁定(cpu親和力綁定,可以提高20%的性能)在某一個cpu上,例如:taskset -cp 1 25718(1指的是cpu1,也可以綁定到多個cpu上,25718是指的pid).

cpu綁定的優點:提高性能,20%以上

cpu綁定的缺點:不方便遷移,靈活性差

b、內存的優化

1)內存尋址:宿主機虛擬內存 -> 宿主機物理內存

       虛擬機的虛擬內存  -> 虛擬機的物理內存

以前VMM通過采用影子列表解決內存轉換的問題,影子頁表是一種比較成熟的純軟件的內存虛擬化方式,但影子頁表固有的局限性,影響了VMM的性能,例如,客戶機中有多個CPU,多個虛擬CPU之間同步頁面數據將導致影子頁表更新次數幅度增加,測試頁表將帶來異常嚴重的性能損失。如下圖為影子頁表的原理圖

wKioL1ZpjiySSHaLAABARR8ozpY926.png       

在此之際,Inter在最新的Core I7系列處理器上集成了EPT技術(對應AMD的為RVI技術),以硬件輔助的方式完成客戶物理內存到機器物理內存的轉換,完成內存虛擬化,並以有效的方式彌補了影子頁表的缺陷,該技術默認是開啟的,如下圖為EPT技術的原理。

wKiom1ZpmeDDA8vsAAAfYt6BdjU357.jpg

2)KSM內存合並

宿主機上默認會開啟ksmd進程,該進程作為內核中的守護進程存在,它定期執行頁面掃描,識別副本頁面並合並副本,釋放這些頁面以供它用,CentOS7默認是開啟的

1
2
[root@chuck ~] # ps aux|grep ksmd|grep -v grep
root        286  0.0  0.0      0     0 ?        SN   12:32   0:00 [ksmd]

3)大頁內存,CentOS7默認開啟的

1
2
3
4
[root@chuck ~] # cat /sys/kernel/mm/transparent_hugepage/enabled 
[always] madvise never
[root@chuck ~] # ps aux |grep khugepage|grep -v grep
root        287  0.2  0.0      0     0 ?        SN   12:32   0:21 [khugepaged]

Linux平台默認的內存頁面大小都是4K,HugePage進程會將默認的的每個內存頁面可以調整為2M。

c、磁盤IO的優化

IO調度算法,也叫電梯算法,詳情請看http://www.unixhot.com/article/4

1、Noop Scheduler:簡單的FIFO隊列,最簡單的調度算法,由於會產生讀IO的阻塞,一般使用在SSD硬盤,此時不需要調度,IO效果非常好

2、Anticipatory IO Scheduler(as scheduler)適合大數據順序順序存儲的文件服務器,如ftp server和web server,不適合數據庫環境,DB服務器不要使用這種算法。

3、Deadline Schedler:按照截止時間的調度算法,為了防止出現讀取被餓死的現象,按照截止時間進行調整,默認的是讀期限短於寫期限,就不會產生餓死的狀況,一般應用在數據庫

4、Complete Fair Queueing Schedule:完全公平的排隊的IO調度算法,保證每個進程相對特別公平的使用IO

查看本機Centos7默認所支持的調度算法

1
2
3
4
[root@chuck ~] # dmesg|grep -i "scheduler"
[   11.312549] io scheduler noop registered
[   11.312555] io scheduler deadline registered (default)
[   11.312606] io scheduler cfq registered

臨時更改某個磁盤的IO調度算法,將deadling模式改為cfq模式

1
2
3
4
5
[root@chuck ~] # cat /sys/block/sda/queue/scheduler 
noop [deadline] cfq 
[root@chuck ~] # echo cfq >/sys/block/sda/queue/scheduler             
[root@chuck ~] # cat /sys/block/sda/queue/scheduler       
noop deadline [cfq]

使更改的IO調度算法永久生效,需要更改內核參數

1
2
[root@chuck ~] # vim /boot/grub/menu.lst
kernel  /boot/vmlinuz-3 .10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet

d、cache的優化,關於write through和write back,默認write through即可

Write-back

在這種策略下,當數據被寫到raid卡的cache中,控制器就向IO調度器返回了寫操作完成信號; 雙刃劍,它雖然帶來了IO性能的提升,但是隨之而來的風險:因為cache是ROM,假設服務器突然斷電,則cache中的數據可能丟失; 為了解決這個問題,raid卡加加裝一塊鋰電池(BBU),即當服務器斷電時,能把cache中的數據刷到磁盤上;同樣的道理,BBU又成為一個風險點,因為鋰電池需要保證始終有足夠的電量來保證能將cache中的數據寫到磁盤上,raid卡會加入一個BBU的管理策略,learn cycle(充放電周期,一般有30/90天,讓電池充放電一次,持續約6小時),那么這6小時又稱為一個風險點;所以raid卡又會增加一個策略:No WB when bad bbu,即當BBU壞掉,或者BBU正在充放電時,禁用write-back,此時Write policy就會變成:write-through。

wKioL1ZpqjuSBfqHAADscRDGpgM591.png

Write through

只有當數據被寫到物理磁盤中,控制器才向IO調度器返回了寫操作完成信號; 這種策略以犧牲IO性能,來保證數據安全性,淘寶這邊的策略:因為Write-Through的io性能無法滿足業務的需求,所以我們這邊會采用另一個模式:WB when bad bbu,即不管bbu狀態是否正常,我們都會采用write-back,那數據安全怎么辦?服務器異常斷電的情況,在我們這邊概率極低;即便很不幸的我們IDC局部斷電了,我們也有主備模式來保證數據的相對安全;我們會監控BBU的狀態,一旦發生了BBU failed,我們會將安排停機更換

wKiom1Zpqknh_30-AAEAvIAoG2Y580.png

 

 

五、創建虛擬機鏡像

1、由於在一開始創建了虛擬磁盤,並命名為CentOS-7.1-x86_64.raw,這就是虛擬機的鏡像嘍。

1
2
3
[root@chuck ~] # cd /opt/
[root@chuck opt] # ls
CentOS-7.1-x86_64.iso  CentOS-7.1-x86_64.raw  rh

2、鏡像制作原則

1、分區的時候,只分一個/根分區,並不需要swap分區,由於虛擬機的磁盤性能就不好,如果設置了swap分區,當swap工作的時候,性能會更差。例如阿里雲主機,就沒有交換分區。

2、鏡像制作需要刪除網卡(eth0)中的UUID,如果有udev(/etc/udev/rules.d/70-persistent-ipoib.rules)的規則也要刪除

3、關閉selinux,關閉iptables

4、安裝基礎軟件的包:net-tools lrzsz screen tree vim wget 

如果對本文有疑問,或者哪里有錯誤,請留言聯系本人。謝謝合作,

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM