1、雲計算概述css
雲計算主要是一種按需付費的網絡模式,這種模式提供可用的、便捷的、按需的網絡訪問,進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用軟件,服務),這些資源可以被快速提供,只需投入不多的管理工做,或與服務供應商進行不多的交互。分爲三大層:IaaS(基礎設施即服務,面向運維人員)、PaaS(平臺即服務,面向開發人員),SaaS(軟件即服務,面向終端用戶)。node
虛擬化分類:服務器虛擬化、桌面虛擬化、應用虛擬化,私有云python
1)雲計算是一種使用模式linux
2)雲計算必須經過網絡訪問ios
3)彈性計算,按需付費web
1)IDC託管算法
2)IDC租用docker
3)虛擬主機(賣空間的)數據庫
4)vps:虛擬專有主機,openvz超賣很坑人的,xen不支持超賣vim
1)資源利用率低(大部分機器cpu所佔比率低於15%)
2)資源分配不合理
舉例:因爲某個活動,上線各類服務器,可是並未達到實際效果,致使服務器資源浪費
3)很難實現真正的運維自動化
基礎設施:計算,存儲,網絡服務
平臺服務:對象存儲,身份認證,運行環境,消息隊列,數據庫服務
應用平臺:監控,內容,合做,通訊,財務
2、雲計算與虛擬化
公有云(Public Cloud)
一般指第三方提供商爲用戶提供的可以使用的雲,公有云通常可經過 Internet 使用,多是免費或成本低廉的,公有云的核心屬性是共享資源服務。這種雲有許多實例,可在當今整個開放的公有網絡中提供服務。例如:aws,阿里雲,×××,百度雲,騰訊雲。
優勢:價格低廉,使用方便
私有云(Private Clouds)
是爲一個客戶單獨使用而構建的,於是提供對數據、安全性和服務質量的最有效控制。該公司擁有基礎設施,並能夠控制在此基礎設施上部署應用程序的方式。私有云可部署在企業數據中心的防火牆內,也能夠將它們部署在一個安全的主機託管場所,私有云的核心屬性是專有資源。
優勢:可控,數據安全(銀行必然使用私有云
混合雲(Hybrid Cloud)
混合雲融合了公有云和私有云,是近年來雲計算的主要模式和發展方向。咱們已經知道私企業主要是面向企業用戶,出於安全考慮,企業更願意將數據存放在私有云中,可是同時又但願能夠得到公有云的計算資源,在這種狀況下混合雲被愈來愈多的採用,它將公有云和私有云進行混合和匹配,以得到最佳的效果,這種個性化的解決方案,達到了既省錢又安全的目的,例如在一次活動中,只須要暫時幾臺機器,在私有云存在的狀況,考慮混合雲的使用,是最合理化的。
優勢:集合的使用方式更完美,可擴展,更節省
SaaS
提供給客戶的服務是運營商運行在雲計算基礎設施上的應用程序,用戶能夠在各類設備上經過客戶端界面訪問,如瀏覽器。消費者不須要管理或控制任何雲計算基礎設施,包括網絡、服務器、操做系統、存儲等等;平時使用的郵件服務器,即屬於SaaS服務。
PaaS
提供給消費者的服務是把客戶採用提供的開發語言和工具(例如Java,python, .Net等)開發的或收購的應用程序部署到供應商的雲計算基礎設施上去。客戶不須要管理或控制底層的雲基礎設施,包括網絡、服務器、操做系統、存儲等,但客戶能控制部署的應用程序,也可能控制運行應用程序的託管環境配置;更適合提供給開發人員使用,在這裏也可使用docker容器技術實現
IaaS
提供給消費者的服務是對全部計算基礎設施的利用,包括處理CPU、內存、存儲、網絡和其它基本的計算資源,用戶可以部署和運行任意軟件,包括操做系統和應用程序。消費者無論理或控制任何雲計算基礎設施,但能控制操做系統的選擇、存儲空間、部署的應用,也有可能得到有限制的網絡組件(例如路由器,防火牆、負載均衡器等)的控制。更適合提供給運維人員使用
虛擬化能夠虛擬出來多個操做系統:每一個操做系統之間是相互獨立的,因此每一個操做系統上所跑的應用天然是相互不影響的。在這裏用一個經典的例子說明,一臺物理機跑8個tomcat和8個虛擬機上各跑一個tomcat,跑8個tomcat的物理機,若是其中一個tomcat出問題(內存有問題,jvm有問題等),勢必會影響到其餘7個tomcat,可是在8個虛擬機上跑分別各跑一個tomcat,他們之間是互不影響的,因爲虛擬化一層緣由佔用了一些資源,效果並無直接一臺物理機跑8個tomcat效果好,可是虛擬機的互相獨立互不影響是更重要的,並且便於管理,每一個tomcat實例都會起3個端口(8080:對外服務端口,8009:AJP端口,8005:關閉端口),使用虛擬機以後,就不會擔憂多個tomcat端口衝突的狀況。
支持異構:linux系統能夠虛擬化windows系統,方便不一樣場景系統的使用
支持快照功能和克隆等功能:快照功能在某個物理機不知運行什麼,是否正在運行的狀況下,若是是一臺虛擬機就好辦了,直接停了該虛擬機,只不過是佔了一些磁盤空間而已。
虛擬化是一種技術,雲計算是經過虛擬化技術實現的一種經過網絡訪問獲取資源,流量,交付的使用模式,二者並不能相互比較,虛擬化至關於實幹家,而云計算是思想家。
3、虛擬化的分類
全虛擬化
又叫硬件輔助虛擬化技術,最初所使用的虛擬化技術就是全虛擬化(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就是一個典型的半虛擬化的技術。
服務器虛擬化
數量少的狀況推薦使用ESXI,XenServer
數量大的狀況推薦使用KVM,RHEV(並不開源),oVirt,Openstack,Vmvare vshpere
桌面虛擬化
桌面虛擬化依賴於服務器虛擬化,在數據中心的服務器上進行服務器虛擬化,生成大量的獨立的桌面操做系統(虛擬機或者虛擬桌面),同時根據專有的虛擬桌面協議發送給終端設備。用戶終端經過以太網登錄到虛擬主機上,只須要記住用戶名和密碼及網關信息,便可隨時隨地的經過網絡訪問本身的桌面系統,從而實現單機多用戶。多用於IP外包,呼叫中心,銀行辦公、移動桌面。
應用虛擬化
技術原理是基於應用/服務器計算A/S架構,採用相似虛擬終端的技術,把應用程序的人機交互邏輯(應用程序界面、鍵盤及鼠標的操做、音頻輸入輸出、讀卡器、打印輸出等)與計算邏輯隔離開來。在用戶訪問一個服務器虛擬化後的應用時,用戶計算機只須要把人機交互邏輯傳送到服務器端,服務器端爲用戶開設獨立的會話空間,應用程序的計算邏輯在這個會話空間中運行,把變化後的人機交互邏輯傳送給客戶端,而且在客戶端相應設備展現出來,從而使用戶得到如同運行本地應用程序同樣的訪問感覺。
3)硬件虛擬化和軟件虛擬化
參考:
http://virtualization.ctocio.com.cn/38/11466538.shtm
4、虛擬化之KVM
1)嵌入到linxu正式kernel(提升了兼容性)
2)代碼級資源調用(提升性能)
3)虛擬機就是一個進程(內存易於管理)
4)直接支持NUMA技術(提升擴展性)
5)雖然被Redhat收購了,可是依然保持着開源發展模式,社區活躍
6)更好的商業支持及服務保障
7)Centos7較Centos6默認支持cpu熱添加,內存的熱添加,大頁內存默認都是開啓的
inter的cpu:vmx
AMD的cpu:svm
本文使用的是vmvare,須要開啓以下兩個條件便可,若是是物理機,須要在bios裏面設置,默認都是開啓狀態。
在cpuinfo中能夠查看具體的支持虛擬化的信息
[root@localhost ~]# grep -E"svm|vmx" /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscallnx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliablenonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apicpopcnt tsc_deadline_timer xsave avx hypervisor lahf_lm arat epb pln pts dthermtpr_shadow vnmi ept vpid tsc_adjust
安裝kvm
[root@localhost~]# yum install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install –y
kvm: linux內核的一個模塊,模塊不須要安裝,只須要加載
qemu:虛擬化軟件,能夠虛擬不一樣的CPU,支持異構(x86的架構能夠虛擬化出不是x86架構的)
qemu-kvm:用戶態管理kvm,網卡,聲卡,PCI設備等都是qemu來管理的
建立一個虛擬磁盤,-f 指定格式,路徑是/opt/CentOS-7.1-x86_64.raw,大小爲10G
[root@localhost ~]# qemu-
qemu-img qemu-io qemu-nbd
[root@localhost ~]# qemu-img create -f raw/opt/CentOS-7-x86_64-Minimal-1511.raw 10G
Formatting'/opt/CentOS-7-x86_64-Minimal-1511.raw', fmt=raw size=10737418240
顯示內核中kvm的狀態
[root@localhost ~]# lsmod|grep kvm
kvm_intel 162153 0
kvm 525259 1 kvm_intel
啓動libvirt,查看狀態,關鍵字:active
[root@localhost ~]# systemctl enablelibvirtd.service
[root@localhost ~]# systemctl startlibvirtd.service
[root@localhost ~]# systemctl statuslibvirtd.service
libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled;vendor preset: enabled)
Active: active (running) since Sat 2016-11-19 07:39:58 CST; 4s ago
Docs: man:libvirtd(8)
http://libvirt.org
MainPID: 3051 (libvirtd)
CGroup: /system.slice/libvirtd.service
├─3051 /usr/sbin/libvirtd
├─3152 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default....
└─3154 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default....
Nov 19 07:39:58 localhost.localdomainsystemd[1]: Started Virtualization daemon.
Nov 19 07:40:00 localhost.localdomaindnsmasq[3152]: started, version 2.66 ca...
Nov 19 07:40:00 localhost.localdomaindnsmasq[3152]: compile time options: IP...
Nov 19 07:40:00 localhost.localdomaindnsmasq-dhcp[3152]: DHCP, IP range 192....
Nov 19 07:40:00 localhost.localdomain dnsmasq[3152]:reading /etc/resolv.conf
Nov 19 07:40:00 localhost.localdomaindnsmasq[3152]: using nameserver 61.178....
Nov 19 07:40:00 localhost.localdomaindnsmasq[3152]: using nameserver 202.100...
Nov 19 07:40:00 localhost.localdomaindnsmasq[3152]: read /etc/hosts - 2 addr...
Nov 19 07:40:00 localhost.localdomaindnsmasq[3152]: read /var/lib/libvirt/dn...
Nov 19 07:40:00 localhost.localdomaindnsmasq-dhcp[3152]: read /var/lib/libvi...
Hint: Some lines were ellipsized, use -l toshow in full.
在vmvare上掛載一個鏡像
導入到宿主機中,固然時間可能較長
[root@localhost ~]# dd if=/dev/cdromof=/opt/CentOS-7-x86_64-Minimal-1511.iso
1234944+0 records in
1234944+0 records out
632291328 bytes (632 MB) copied, 39.0131 s,16.2 MB/s
[root@localhost ~]# ls /opt/
CentOS-7-x86_64-Minimal-1511.iso CentOS-7-x86_64-Minimal-1511.raw
使用命令建立一臺虛擬機
首先學virt-install命令,在這裏使用- -help查看,而且只學習重要的,其餘的稍後會有提供
virt-install –help
-n(Name):指定虛擬機的名稱
–memory(–raw):指定內存大小
–cpu:指定cpu的核數(默認爲1)
–cdrom:指定鏡像
–disk:指定磁盤路徑(即上文建立的虛擬磁盤)
–virt-type:指定虛擬機類型(kvm,qemu,xen)
–network:指定網絡類型
執行建立虛擬機命令
[root@localhost ~]# virt-install --help
usage:virt-install --name NAME --ram RAM STORAGE INSTALL [options]
Createa new virtual machine from specified install media.
optionalarguments:
-h, --help show this help message and exit
--version show program's version number andexit
--connect URI Connect to hypervisor with libvirt URI
GeneralOptions:
-n NAME, --name NAME Name of the guest instance
--memory MEMORY Configure guest memory allocation. Ex:
--memory 1024 (in MiB)
--memory512,maxmemory=1024
--vcpus VCPUS Number of vcpus to configure for yourguest. Ex:
--vcpus 5
--vcpus5,maxcpus=10,cpuset=1-4,6,8
--vcpussockets=2,cores=4,threads=2,
--cpu CPU CPU model and features. Ex:
--cpu coreduo,+x2apic
--cpu host
--metadata METADATA Configure guest metadata. Ex:
--metadataname=foo,title="My pretty title",uuid=...
--metadatadescription="My nice long description"
InstallationMethod Options:
--cdrom CDROM CD-ROM installation media
-l LOCATION, --location LOCATION
Installation source(eg, nfs:host:/path,
http://host/path,ftp://host/path)
--pxe Boot from the network usingthe PXE protocol
--import Build guest around an existingdisk p_w_picpath
--livecd Treat the CD-ROM media as a LiveCD
-x EXTRA_ARGS, --extra-args EXTRA_ARGS
Additional arguments topass to the install kernel
booted from --location
--initrd-inject INITRD_INJECT
Add given file to rootof initrd from --location
--os-variant DISTRO_VARIANT
The OS variant beinginstalled guests, e.g.
'fedora18', 'rhel6','winxp', etc.
--boot BOOT Configure guest boot settings. Ex:
--boot hd,cdrom,menu=on
--boot init=/sbin/init(for containers)
--idmap IDMAP Enable user namespace for LXCcontainer. Ex:
--idmapuid_start=0,uid_target=1000,uid_count=10
DeviceOptions:
--disk DISK Specify storage with variousoptions. Ex.
--disk size=10 (new10GiB p_w_picpath in default location)
--disk/my/existing/disk,cache=none
--diskdevice=cdrom,bus=scsi
--disk=?
-w NETWORK, --network NETWORK
Configure a guestnetwork interface. Ex:
--network bridge=mybr0
--networknetwork=my_libvirt_virtual_net
--networknetwork=mynet,model=virtio,mac=00:11...
--network none
--network help
--graphics GRAPHICS Configure guest display settings. Ex:
--graphics vnc
--graphicsspice,port=5901,tlsport=5902
--graphics none
--graphicsvnc,password=foobar,port=5910,keymap=ja
--controller CONTROLLER
Configure a guestcontroller device. Ex:
--controllertype=usb,model=ich9-ehci1
--input INPUT Configure a guest input device. Ex:
--input tablet
--inputkeyboard,bus=usb
--serial SERIAL Configure a guest serial device
--parallel PARALLEL Configure a guest parallel device
--channel CHANNEL Configure a guest communication channel
--console CONSOLE Configure a text console connectionbetween the guest
and host
--hostdev HOSTDEV Configure physical USB/PCI/etc hostdevices to be
shared with the guest
--filesystem FILESYSTEM
Pass host directory tothe guest. Ex:
--filesystem/my/source/dir,/dir/in/guest
--filesystemtemplate_name,/,type=template
--sound [SOUND] Configure guest sound device emulation
--watchdog WATCHDOG Configure a guest watchdog device
--video VIDEO Configure guest video hardware.
--smartcard SMARTCARD
Configure a guestsmartcard device. Ex:
--smartcardmode=passthrough
--redirdev REDIRDEV Configure a guest redirection device. Ex:
--redirdevusb,type=tcp,server=192.168.1.1:4000
--memballoon MEMBALLOON
Configure a guestmemballoon device. Ex:
--memballoonmodel=virtio
--tpm TPM Configure a guest TPM device. Ex:
--tpm /dev/tpm
--rng RNG Configure a guest RNG device. Ex:
--rng /dev/random
--panic PANIC Configure a guest panic device. Ex:
--panic default
GuestConfiguration Options:
--security SECURITY Set domain security driver configuration.
--numatune NUMATUNE Tune NUMA policy for the domain process.
--memtune MEMTUNE Tune memory policy for the domain process.
--blkiotune BLKIOTUNE
Tune blkio policy forthe domain process.
--memorybacking MEMORYBACKING
Set memory backing policyfor the domain process. Ex:
--memorybackinghugepages=on
--features FEATURES Set domain <features> XML. Ex:
--features acpi=off
--featuresapic=on,eoi=on
--clock CLOCK Set domain <clock> XML. Ex:
--clockoffset=localtime,rtc_tickpolicy=catchup
--pm PM Configure VM power managementfeatures
--events EVENTS Configure VM lifecycle management policy
--resource RESOURCE Configure VM resource partitioning (cgroups)
VirtualizationPlatform Options:
-v, --hvm This guest should be a fullyvirtualized guest
-p, --paravirt This guest should be a paravirtualizedguest
--container This guest should be a containerguest
--virt-type HV_TYPE Hypervisor name to use (kvm, qemu, xen, ...)
--arch ARCH The CPU architecture to simulate
--machine MACHINE The machine type to emulate
MiscellaneousOptions:
--autostart Have domain autostart on host bootup.
--wait WAIT Minutes to wait for install tocomplete.
--noautoconsole Don't automatically try to connect tothe guest
console
--noreboot Don't boot guest after completinginstall.
--print-xml [XMLONLY]
Print the generateddomain XML rather than create the
guest.
--dry-run Run through install process, butdo not create devices
or define the guest.
--check CHECK Enable or disable validation checks.Example:
--check path_in_use=off
--check all=off
-q, --quiet Suppress non-error output
[root@localhost ~]# virt
virt-clone virtlockd virt-what
virt-host-validate virt-manager virt-xml
virt-install virt-pki-validate virt-xml-validate
[root@localhost ~]# virt-install --nameCentOS-7-x86_64-Minimal-1511 --virt-type kvm --ram 1024--cdrom=/opt/CentOS-7-x86_64-Minimal-1511.iso --diskpath=/opt/CentOS-7-x86_64-Minimal-1511.raw --network network=default --graphicsvnc,listen=0.0.0.0 --noautoconsole
Starting install...
Creating domain... | 0 B 00:01
Domain installation still in progress. Youcan reconnect to
the console to complete the installationprocess.
生成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
啓動剛纔建立的虛擬機
[root@localhost ~]# virsh startCentOS-7-x86_64-Minimal-1511
[root@localhost ~]# ps -ef|grep kvm //kvm就是一個進程
root 686 2 0 19:50 ? 00:00:00 [kvm-irqfd-clean]
qemu 2353 1 91 19:55 ? 00:24:08/usr/libexec/qemu-kvm -name CentOS-7-x86_64-Minimal-1511 -S -machinepc-i440fx-rhel7.0.0,accel=kvm,usb=off -cpu Nehalem -m 1024 -realtime mlock=off-smp 1,sockets=1,cores=1,threads=1 -uuid cf30a98a-143c-4bca-bf61-f27b8799061b-no-user-config -nodefaults -chardevsocket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-CentOS-7-x86_64-Minimal-1511/monitor.sock,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 -globalPIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -deviceich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -deviceich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x4 -drivefile=/opt/CentOS-7-x86_64-Minimal-1511.raw,if=none,id=drive-virtio-disk0,format=raw-devicevirtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2-drivefile=/opt/CentOS-7-x86_64-Minimal-1511.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 -devicevirtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:f0:c7:f8,bus=pci.0,addr=0x3-chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0-chardevsocket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-CentOS-7-x86_64-Minimal-1511/org.qemu.guest_agent.0,server,nowait-devicevirtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0-device usb-tablet,id=input0 -vnc 0.0.0.0:0 -vga cirrus -devicevirtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
root 2411 2 0 19:55 ? 00:00:00 [kvm-pit/2353]
root 2782 2265 0 20:21 pts/0 00:00:00 grep --color=auto kvm
配置虛擬機的cpu,兩種方式(啓動的時候指定核數,更改xml)
第一種方法:爲了實現cpu的熱添加,就須要更改cpu的最大值,固然熱添加的個數不能超過最大值
[root@localhost ~]# ll /etc/libvirt/qemu
total 8
-rw-------. 1 root root 3938 Nov 19 19:55CentOS-7-x86_64-Minimal-1511.xml //kvm虛擬機配置文件
drwx------. 3 root root 4096 Nov 19 07:39networks
[root@localhost ~]# virsh edit CentOS-7-x86_64-Minimal-1511
<vcpuplacement='auto'current="1">4</vcpu> 當前爲1,自動擴容,最大爲4
重啓虛擬機
[root@localhost ~]# virsh shutdown CentOS-7-x86_64-Minimal-1511
DomainCentOS-7-x86_64-Minimal-1511 is being shutdown
[root@localhost ~]# virsh start CentOS-7-x86_64-Minimal-1511
DomainCentOS-7-x86_64-Minimal-1511 started
[root@localhost ~]# virsh setvcpus CentOS-7-x86_64-Minimal-1511 2 --live
kvm版本較高,並不須要echo 「1」到/sys/devices/system/cpu/cpu1/online 進行激活,自動能夠激活。
[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
內存的設置擁有一個「氣球(balloon)機制」,能夠增大減小,可是也要設置一個最大值,默認並無設置最大值,也能夠在安裝的時候指定,這裏再也不重複此方法
[root@localhost ~]# virsh edit CentOS-7-x86_64-Minimal-1511
<memoryunit='KiB'>4194304</memory> //把最大內存改成4G
<currentMemoryunit='KiB'>1048576</currentMemory> //當前內存爲1G
重啓虛擬機並查看當前狀態的內存使用狀況
[root@localhost ~]# virsh qemu-monitor-command CentOS-7-x86_64-Minimal-1511--hmp --cmd info balloon
balloon: actual=1024
對內存進行熱添加並查看
[root@localhost ~]# virsh qemu-monitor-commandCentOS-7-x86_64-Minimal-1511 --hmp --cmd balloon 2000
[root@localhost ~]# virsh qemu-monitor-commandCentOS-7-x86_64-Minimal-1511 --hmp --cmd info balloon
balloon: actual=2260
更改虛擬機中存儲,硬盤設置(不建議在生產環境使用硬盤的擴大收縮模式,很容易產生故障)
[root@localhost ~]# qemu-img --help |grep -i "formats:"
Supported formats: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd rawhost_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsigluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug
從結果看出,kvm支持不少種硬盤格式
硬盤格式整體上分爲兩種:1爲全鏡像格式,2爲稀疏格式
全鏡像格式(典型表明raw格式),其特色:設置多大就是多大,寫入速度快,方便的轉換爲其餘格式,性能最優,可是佔用空間大
稀疏模式(典型表明qcow2格式),其特色:支持壓縮,快照,鏡像,更小的存儲空間(即用多少佔多少)
硬盤格式均可以經過qemu-img管理,詳情qemu-img –help
默認狀況是NAT狀況,可是在生產狀況,使用更多的是橋接模式,更改虛擬機爲網橋模式,原理圖以下,網橋的基本原理就是建立一個橋接接口br0,在物理網卡和虛擬網絡接口之間傳遞數據
修改eth0(這裏Centos7的eth0在裝機的時候就指定,不須要特地指定了)
· 添加一個網橋並查看
[root@localhost ~]# brctl show //查看網橋
bridge name bridge id STP enabled interfaces
virbr0 8000.5254007c0675 yes virbr0-nic
vnet0
[root@localhost ~]# brctl addbr br0 //添加網橋
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000000000000 no
virbr0 8000.5254007c0675 yes virbr0-nic
vnet0
把eth0加入網橋,使用橋接模式,給br設置ip,添加路由網關,關閉防火牆
[root@localhost ~]# ifconfig
eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.113 netmask255.255.255.0 broadcast 192.168.8.255
inet6 fe80::20c:29ff:fe3f:2a6d prefixlen 64 scopeid0x20<link>
ether 00:0c:29:3f:2a:6d txqueuelen 1000 (Ethernet)
RX packets 25918 bytes 2063267(1.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 33036 bytes 5049008(4.8 MiB)
TX errors 0 dropped 0 overruns0 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 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns0 carrier 0 collisions 0
virbr0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.1 netmask255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:7c:06:75 txqueuelen 0 (Ethernet)
RX packets 28 bytes 1204 (1.1KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns0 carrier 0 collisions 0
vnet0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc54:ff:fef0:c7f8 prefixlen 64 scopeid0x20<link>
ether fe:54:00:f0:c7:f8 txqueuelen 500 (Ethernet)
RX packets 28 bytes 1596 (1.5KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1132 bytes 59096 (57.7KiB)
TX errors 0 dropped 0 overruns0 carrier 0 collisions 0
[root@localhost ~]# brctl addif bro eth0 //把eth0加入網橋,注意!此時網絡會斷掉
[root@localhost ~]# brctl addif br0 eth0 && ip addr del deveth0 192.168.8.113/24 && ifconfig br0 192.168.8.113/24 up &&route add default gw 192.168.8.2 && iptables –F //用此命令網絡不會終斷
編輯虛擬機的網絡配置使用br0網橋模式
[root@localhost ~]# 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查看詳情
[root@localhost ~]# ifconfig
br0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.113 netmask255.255.255.0 broadcast 192.168.8.255
inet6 fe80::20c:29ff:fe3f:2a6d prefixlen 64 scopeid0x20<link>
ether 00:0c:29:3f:2a:6d txqueuelen 0 (Ethernet)
RX packets 44 bytes 5895 (5.7KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 47 bytes 5434 (5.3KiB)
TX errors 0 dropped 0 overruns0 carrier 0 collisions 0
eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::20c:29ff:fe3f:2a6d prefixlen 64 scopeid0x20<link>
ether 00:0c:29:3f:2a:6d txqueuelen 1000 (Ethernet)
RX packets 26325 bytes 2108762(2.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 33358 bytes 5095692(4.8 MiB)
TX errors 0 dropped 0 overruns0 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 scopeid0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 8 bytes 800 (800.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 800 (800.0 B)
TX errors 0 dropped 0 overruns0 carrier 0 collisions 0
virbr0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.1 netmask255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:7c:06:75 txqueuelen 0 (Ethernet)
RX packets 28 bytes 1204 (1.1KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns0 carrier 0 collisions 0
vnet0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc54:ff:fef0:c7f8 prefixlen 64 scopeid0x20<link>
ether fe:54:00:f0:c7:f8 txqueuelen 500 (Ethernet)
RX packets 28 bytes 1596 (1.5KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1248 bytes 65128 (63.6KiB)
TX errors 0 dropped 0 overruns0 carrier 0 collisions 0
刪除虛擬機,刪除前先關閉虛擬機,不要輕易的刪除,由於刪除後沒法恢復
[root@localhost ~]# virsh undefine CentOS-7-x86_64-Minimal-1511 //完全刪除虛擬機
若是想刪除後,再恢復所刪除的虛擬機,在刪除前能夠先備份虛擬機的.xml文件,而後再經過.xml文件重建虛擬機就能夠。
導出虛擬機(.xml)
[root@localhost ~]# virsh--help|grep dump
dump dump the core of a domain to a file for analysis
dumpxml domain information in XML
save-p_w_picpath-dumpxml saved state domain information in XML
iface-dumpxml interface information in XML
nwfilter-dumpxml network filter information in XML
net-dumpxml network information in XML
nodedev-dumpxml node device details in XML
secret-dumpxml secret attributes in XML
snapshot-dumpxml Dump XML for a domain snapshot
pool-dumpxml pool information in XML
vol-dumpxml volinformation in XML
關閉虛擬機: //也能夠用kill -9來關閉(至關於拔掉電源)
[root@localhost ~]# virsh --help|grepdestroy
destroy destroy (stop) a domain
iface-destroy destroy a physical host interface (disable it / "if-down")
net-destroy destroy (stop) a network
nodedev-destroy destroy (stop) a device on the node
pool-destroy destroy (stop) a pool
5、KVM的優化
inter的cpu的運行級別,按權限級別高低Ring3->Ring2->Ring1->Ring0,(Ring2和Ring1暫時沒什麼卵用)Ring3爲用戶態,Ring0爲內核態
· Ring3的用戶態是沒有權限管理硬件的,須要切換到內核態Ring0,這樣的切換(系統調用)稱之爲上下文切換,物理機到虛擬機屢次的上下文切換,勢必會致使性能出現問題。對於全虛擬化,inter實現了技術VT-x,在cpu硬件上實現了加速轉換,CentOS7默認是不須要開啓的。
· cpu的緩存綁定cpu的優化
[root@localhost ~]# lscpu|grep cache
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
L1 L2 L3 三級緩存和CPU綁定
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綁定的缺點:不方便遷移,靈活性差
內存尋址:宿主機虛擬內存 -> 宿主機物理內存
虛擬機的虛擬內存 -> 虛擬機的物理內存
之前VMM經過採用影子列表解決內存轉換的問題,影子頁表是一種比較成熟的純軟件的內存虛擬化方式,但影子頁表固有的侷限性,影響了VMM的性能,例如,客戶機中有多個CPU,多個虛擬CPU之間同步頁面數據將致使影子頁表更新次數幅度增長,測試頁表將帶來異常嚴重的性能損失。以下圖爲影子頁表的原理圖
在此之際,Inter在最新的Core I7系列處理器上集成了EPT技術(對應AMD的爲RVI技術),以硬件輔助的方式完成客戶物理內存到機器物理內存的轉換,完成內存虛擬化,並以有效的方式彌補了影子頁表的缺陷,該技術默認是開啓的,以下圖爲EPT技術的原理
KSM內存合併
宿主機上默認會開啓ksmd進程,該進程做爲內核中的守護進程存在,它按期執行頁面掃描,識別副本頁面併合並副本,釋放這些頁面以供它用,CentOS7默認是開啓的
[root@localhost ~]# ps aux|grep ksmd|grep -vgrep
root 297 0.0 0.0 0 0 ? SN 21:45 0:00 [ksmd]
大頁內存,CentOS7默認開啓的
[root@localhost ~]# cat/sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[root@localhost ~]# ps aux |grepkhugepage|grep -v grep
root 298 0.4 0.0 0 0 ? SN 21:45 0:26 [khugepaged]
Linux平臺默認的內存頁面大小都是4K,HugePage進程會將默認的的每一個內存頁面能夠調整爲2M。
IO調度算法,也叫電梯算法,詳情請看http://www.unixhot.com/article/4
① Noop Scheduler:簡單的FIFO隊列,最簡單的調度算法,因爲會產生讀IO的阻塞,通常使用在SSD硬盤,此時不須要調度,IO效果很是好
② Anticipatory IO Scheduler(as scheduler)適合大數據順序順序存儲的文件服務器,如ftp server和web server,不適合數據庫環境,DB服務器不要使用這種算法。
③ Deadline Schedler:按照截止時間的調度算法,爲了防止出現讀取被餓死的現象,按照截止時間進行調整,默認的是讀期限短於寫期限,就不會產生餓死的情況,通常應用在數據庫
④ Complete Fair Queueing Schedule:徹底公平的排隊的IO調度算法,保證每一個進程相對特別公平的使用IO
查看本機Centos7默認所支持的調度算法
[root@localhost ~]# dmesg|grep -i"scheduler"
[ 16.298583] io scheduler noop registered
[ 16.298587] io scheduler deadline registered (default)
[ 16.298804] io scheduler cfq registered
臨時更改某個磁盤的IO調度算法,將deadling模式改成cfq模式
[root@localhost ~]# cat/sys/block/sda/queue/scheduler
noop [deadline] cfq
[root@localhost ~]# echo cfq>/sys/block/sda/queue/scheduler
[root@localhost ~]# cat/sys/block/sda/queue/scheduler
noop deadline [cfq]
使更改的IO調度算法永久生效,須要更改內核參數
關於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。
Write through
只有當數據被寫到物理磁盤中,控制器才向IO調度器返回了寫操做完成信號;這種策略以犧牲IO性能,來保證數據安全性,淘寶這邊的策略:由於Write-Through的io性能沒法知足業務的需求,因此咱們這邊會採用另外一個模式:WB when bad bbu,即無論bbu狀態是否正常,咱們都會採用write-back,那數據安全怎麼辦?服務器異常斷電的狀況,在咱們這邊機率極低;即使很不幸的咱們IDC局部斷電了,咱們也有主備模式來保證數據的相對安全;咱們會監控BBU的狀態,一旦發生了BBU failed,咱們將會安排停機更換。
6、建立虛擬機鏡像
因爲在一開始建立了虛擬磁盤,並命名爲CentOS-7-x86_64-Minimal-1511.raw,這就是虛擬機的鏡像嘍。
[root@localhost ~]# ll /opt
total 1936076
-rw-r--r--. 1 qemu qemu 632291328 Nov 19 19:52CentOS-7-x86_64-Minimal-1511.iso
-rw-r--r--. 1 qemu qemu 5368709120 Nov 2000:19 CentOS-7-x86_64-Minimal-1511.raw
分區的時候,只分一個/根分區,並不須要swap分區,因爲虛擬機的磁盤性能就很差,若是設置了swap分區,當swap工做的時候,性能會更差。例如阿里雲主機,就沒有交換分區。
鏡像製做須要刪除網卡(eth0)中的UUID,若是有udev(/etc/udev/rules.d/70-persistent-ipoib.rules)的規則也要刪除
關閉selinux,關閉iptables
安裝基礎軟件的包:net-tools lrzsz screen tree vim wget