一、走進雲計算
雲計算:雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡通路, 進入可配置的計算資源共享池(資源包括網絡,伺服器,存儲,應用軟體,服務),這些資源能夠被快速提供,隻需投入很少的管理工作,或與服務供應商進行很少的互動。
1.1 雲計算的特點和優勢
1)雲計算是一種使用模式
2)雲計算必須通過網絡通路
3)彈性計算,按需付費
1.2 在雲計算之前的模式或技術
1)IDC托管
2)IDC租用
3)虛拟主機(賣空間的)
4)v1p1s:虛拟專有主機,openvz超賣很坑人的,xen不支援超賣
1.3 相對于雲計算,傳統資料中心面臨的問題
1)資源使用率低(大部分機器cpu所占比率低于15%)
2)資源配置設定不合理
舉例:由于某個活動,上線各種伺服器,但是并未達到實際效果,導緻伺服器資源浪費
3)很難實作真正的運維自動化
1.4圖解雲計算的三層服務
基礎設施:計算,存儲,網絡服務
平台服務:對象存儲,身份認證,運作環境,消息隊列,資料庫服務
應用平台:監控,内容,合作,通信,财務
二、雲計算與虛拟化
2.1 公有雲、私有雲和混合雲
公有雲(Public Cloud)
通常指第三方提供商為使用者提供的能夠使用的雲,公有雲一般可通過 Internet 使用,可能是免費或成本低廉的,公有雲的核心屬性是共享資源服務。這種雲有許多執行個體,可在當今整個開放的公有網絡中提供服務。例如:aws,阿裡雲,青雲,百度雲,騰訊雲。
優點:價格低廉,使用友善
私有雲(Private Clouds)
是為一個客戶單獨使用而建構的,因而提供對資料、安全性和服務品質的最有效控制。該公司擁有基礎設施,并可以控制在此基礎設施上部署應用程式的方式。私有雲可部署在企業資料中心的防火牆内,也可以将它們部署在一個安全的主機托管場所,私有雲的核心屬性是專有資源。
優點:可控,資料安全(銀行必然使用私有雲
混合雲(Hybrid Cloud)
混合雲融合了公有雲和私有雲,是近年來雲計算的主要模式和發展方向。我們已經知道私企業主要是面向企業使用者,出于安全考慮,企業更願意将資料存放在私有雲中,但是同時又希望可以獲得公有雲的計算資源,在這種情況下混合雲被越來越多的采用,它将公有雲和私有雲進行混合和比對,以獲得最佳的效果,這種個性化的解決方案,達到了既省錢又安全的目的,例如在一次活動中,隻需要暫時幾台機器,在私有雲存在的情況,考慮混合雲的使用,是最合理化的。
優點:集合的使用方式更完美,可擴充,更節省
2.2雲計算的層次
SaaS
提供給客戶的服務是營運商運作在雲計算基礎設施上的應用程式,使用者可以在各種裝置上通過用戶端界面通路,如浏覽器。消費者不需要管理或控制任何雲計算基礎設施,包括網絡、伺服器、作業系統、存儲等等;平時使用的郵件伺服器,即屬于SaaS服務。
PaaS
提供給消費者的服務是把客戶采用提供的開發語言和工具(例如Java,python, .Net等)開發的或收購的應用程式部署到供應商的雲計算基礎設施上去。客戶不需要管理或控制底層的雲基礎設施,包括網絡、伺服器、作業系統、存儲等,但客戶能控制部署的應用程式,也可能控制運作應用程式的托管環境配置;更适合提供給開發人員使用,在這裡也可以使用docker容器技術實作
IaaS
提供給消費者的服務是對所有計算基礎設施的利用,包括處理CPU、記憶體、存儲、網絡和其它基本的計算資源,使用者能夠部署和運作任意軟體,包括作業系統和應用程式。消費者不管理或控制任何雲計算基礎設施,但能控制作業系統的選擇、存儲空間、部署的應用,也有可能獲得有限制的網絡元件(例如路由器,防火牆、負載均衡器等)的控制。更适合提供給運維人員使用
2.3 虛拟化的優勢
虛拟化可以虛拟出來多個作業系統:每個作業系統之間是互相獨立的,是以每個作業系統上所跑的應用自然是互相不影響的。在這裡用一個經典的例子說明,一台實體機跑8個tomcat和8個虛拟機上各跑一個tomcat,跑8個tomcat的實體機,如果其中一個tomcat出問題(記憶體有問題,jvm有問題等),勢必會影響到其他7個tomcat,但是在8個虛拟機上跑分别各跑一個tomcat,他們之間是互不影響的,由于虛拟化一層原因占用了一些資源,效果并沒有直接一台實體機跑8個tomcat效果好,但是虛拟機的互相獨立互不影響是更重要的,而且便于管理,每個tomcat執行個體都會起3個端口(8080:對外服務端口,8009:AJP端口,8005:關閉端口),使用虛拟機之後,就不會擔心多個tomcat端口沖突的情況。
支援異構 :linux系統可以虛拟化windows系統,友善不同場景系統的使用
支援快照功能和克隆等功能:快照功能在某個實體機不知運作什麼,是否正在運作的情況下,如果是一台虛拟機就好辦了,直接停了該虛拟機,隻不過是占了一些磁盤空間而已。
2.4 虛拟化和雲計算的簡單總結
虛拟化是一種技術,雲計算是通過虛拟化技術實作的一種通過網絡通路擷取資源,流量,傳遞的使用模式,兩者并不能互相比較,虛拟化相當于實幹家,而雲計算是思想家。
三、虛拟化的分類
3.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就是一個典型的半虛拟化的技術。
3.2伺服器虛拟化,桌面虛拟化,應用虛拟化
伺服器虛拟化
數量少的情況推薦使用ESXI,XenServer
數量大的情況推薦使用KVM,RHEV(并不開源),oVirt,Openstack,Vmvare vshpere
桌面虛拟化
桌面虛拟化依賴于伺服器虛拟化,在資料中心的伺服器上進行伺服器虛拟化,生成大量的獨立的桌面作業系統(虛拟機或者虛拟桌面),同時根據專有的虛拟桌面協定發送給終端裝置。使用者終端通過以太網登陸到虛拟主機上,隻需要記住使用者名和密碼及網關資訊,即可随時随地的通過網絡通路自己的桌面系統,進而實作單機多使用者。多用于IP外包,呼叫中心,銀行辦公、移動桌面。
應用虛拟化
技術原理是基于應用/伺服器計算A/S架構,采用類似虛拟終端的技術,把應用程式的人機互動邏輯(應用程式界面、鍵盤及滑鼠的操作、音頻輸入輸出、讀卡器、列印輸出等)與計算邏輯隔離開來。在使用者通路一個伺服器虛拟化後的應用時,使用者計算機隻需要把人機互動邏輯傳送到伺服器端,伺服器端為使用者開設獨立的會話空間,應用程式的計算邏輯在這個會話空間中運作,把變化後的人機互動邏輯傳送給用戶端,并且在用戶端相應裝置展示出來,進而使使用者獲得如同運作本地應用程式一樣的通路感受。
3)硬體虛拟化和軟體虛拟化
四、虛拟化之KVM
4.1kvm的虛拟化特性
1)嵌入到linxu正式kernel(提高了相容性)
2)代碼級資源調用(提高性能)
3)虛拟機就是一個程序(記憶體易于管理)
4)直接支援NUMA技術(提高擴充性)
5)雖然被Redhat收購了,但是依然保持着開源發展模式,社群活躍
6)更好的商業支援及服務保障
7)Centos7較Centos6預設支援cpu熱添加,記憶體的熱添加,大頁記憶體預設都是開啟的
4.2 支援虛拟化的條件
inter的cpu:vmx
AMD的cpu:svm
本文使用的是vmvare,需要開啟如下兩個條件即可,如果是實體機,需要在bios裡面設定,預設都是開啟狀态。
在cpuinfo中可以檢視具體的支援虛拟化的資訊
[root@chuck~]<code>`# grep -E "svm|vmx" /proc/cpuinfo</code>
4.3 kvm安裝實戰
安裝kvm
[root@chuck~]# yum install qemu-kvm qemu-kvm-tools virt-manager libvirt -y
kvm: linux核心的一個子產品,子產品不需要安裝,隻需要加載
qemu:虛拟化軟體,可以虛拟不同的CPU,支援異構(x86的架構可以虛拟化出不是x86架構的)
qemu-kvm:使用者态管理kvm,網卡,聲霸卡,PCI裝置等都是qemu來管理的
建立一個虛拟磁盤,-f 指定格式,路徑是/opt/CentOS-7.1-x86_64.raw,大小為10G
[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
顯示核心中kvm的狀态
[root@chuck opt]``# lsmod|grep kvm
kvm_intel 148081 0
kvm 461126 1 kvm_intel
啟動libvirt,檢視狀态,關鍵字:active
4.4 開始裝一台虛拟機
在vmvare上挂載一個鏡像
導入到主控端中,當然時間可能較長
[root@localhost opt]# dd if=/dev/cdrom of=/opt/CentOS-7.1-x86_64.iso
[root@localhost opt]``# ls /opt/
CentOS-7.1-x86_64.iso CentOS-7.1-x86_64.raw rh
使用指令建立一台虛拟機
首先學virt-install指令,在這裡使用–help檢視,并且隻學習重要的,其他的稍後會有提供
virt-install –help
-n(Name):指定虛拟機的名稱
–memory(–raw):指定記憶體大小
–cpu:指定cpu的核數(預設為1)
–cdrom:指定鏡像
–disk:指定磁盤路徑(即上文建立的虛拟磁盤)
–virt-type:指定虛拟機類型(kvm,qemu,xen)
–network:指定網絡類型
執行建立虛拟機指令
[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
4.5 虛拟機基本操作學習
生成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@chuck ~]# virsh start CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 started
4.6 編輯kvm的xml檔案,更改虛拟機CPU配置
配置虛拟機的cpu,兩種方式(啟動的時候指定核數,更改xml)
第一種方法:為了實作cpu的熱添加,就需要更改cpu的最大值,當然熱添加的個數不能超過最大值
[root@chuck ~]# virsh edit CentOS-7.1-x86_64
<vcpu placement='auto'current="1">4</vcpu> 目前為1,自動擴容,最大為4
重新開機虛拟機
[root@chuck ~]# virsh shutdown CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 is being shutdown
登入虛拟機上,檢視cpu資訊,确認cpu的個數,下面開始進行cpu熱添加
cpu的熱添加(cpu隻支援熱添加,不支援熱減少)
[root@chuck ~]# virsh setvcpus CentOS-7.1-x86_64 2 --live
再到虛拟機中檢視cpu資訊
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
4.7 編輯kvm的xml檔案,更改虛拟機記憶體配置
記憶體的設定擁有一個“氣球(balloon)機制”,可以增大減少,但是也要設定一個最大值,預設并沒有設定最大值,也可以在安裝的時候指定,這裡不再重複此方法
<memory unit='KiB'>4194304</memory>把最大記憶體改為4G
<currentMemory unit='KiB'>1048576</currentMemory>目前記憶體為1G
重新開機虛拟機并檢視目前狀态的記憶體使用情況
[root@chuck ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon
balloon: actual=1024
對記憶體進行熱添加并檢視
[root@chuck ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon
unexpected end of expression
balloon: actual=2000
更改虛拟機中存儲,硬碟設定(不建議在生産環境使用硬碟的擴大收縮模式,很容易産生故障)
[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
4.8 編輯kvm的xml檔案,更改虛拟機網橋連接配接配置
預設情況是NAT情況,但是在生産情況,使用更多的是橋接模式,更改虛拟機為網橋模式,原理圖如下,網橋的基本原理就是建立一個橋接接口br0,在實體網卡和虛拟網絡接口之間傳遞資料
修改eth0(這裡Centos7的eth0在裝機的時候就指定,不需要特意指定了)
添加一個網橋并檢視
[root@chuck ~]# brctl addbr br0
把eth0加入網橋,使用橋接模式,給br設定ip,添加路由網關,關閉防火牆
[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網橋模式
<interface type="bridge"> <!--虛拟機網絡連接配接方式-->
<source bridge="br0" /> <!-- 目前主機網橋的名稱-->
<mac address="00:16:e4:9a:b3:6a" /> <!--為虛拟機配置設定mac位址,務必唯一,如果是dhcp獲得同樣ip,引起沖突-->
</interface>
重新開機虛拟機,網橋模式生效,此時使用crt便可以連結到所建立的虛拟機了,在vmvare機器上使用ifconfig檢視詳情
[root@chuck ~]# ifconfig
五、KVM的優化
5.1 cpu的優化
inter的cpu的運作級别,按權限級别高低Ring3->Ring2->Ring1->Ring0,(Ring2和Ring1暫時沒什麼卵用)Ring3為使用者态,Ring0為核心态
Ring3的使用者态是沒有權限管理硬體的,需要切換到核心态Ring0,這樣的切換(系統調用)稱之為上下文切換,實體機到虛拟機多次的上下文切換,勢必會導緻性能出現問題。對于全虛拟化,inter實作了技術VT-x,在cpu硬體上實作了加速轉換,CentOS7預設是不需要開啟的。
cpu的緩存綁定cpu的優化
[root@chuck ~]# 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綁定的缺點:不友善遷移,靈活性差
5.2記憶體的優化
記憶體尋址:主控端虛拟記憶體 -> 主控端實體記憶體
虛拟機的虛拟記憶體 -> 虛拟機的實體記憶體
以前VMM通過采用影子清單解決記憶體轉換的問題,影子頁表是一種比較成熟的純軟體的記憶體虛拟化方式,但影子頁表固有的局限性,影響了VMM的性能,例如,客戶機中有多個CPU,多個虛拟CPU之間同步頁面資料将導緻影子頁表更新次數幅度增加,測試頁表将帶來異常嚴重的性能損失。如下圖為影子頁表的原理圖
在此之際,Inter在最新的Core I7系列處理器上內建了EPT技術(對應AMD的為RVI技術),以硬體輔助的方式完成客戶實體記憶體到機器實體記憶體的轉換,完成記憶體虛拟化,并以有效的方式彌補了影子頁表的缺陷,該技術預設是開啟的,如下圖為EPT技術的原理
KSM記憶體合并
主控端上預設會開啟ksmd程序,該程序作為核心中的守護程序存在,它定期執行頁面掃描,識别副本頁面并合并副本,釋放這些頁面以供它用,CentOS7預設是開啟的
[root@chuck ~]# ps aux|grep ksmd|grep -v grep
root 286 0.0 0.0 0 0 ? SN 12:32 0:00 [ksmd]
大頁記憶體,CentOS7預設開啟的
[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。
5.3 磁盤IO的優化
IO排程算法,也叫電梯算法
① 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@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模式
[root@chuck ~]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
[root@chuck ~]# echo cfq >/sys/block/sda/queue/scheduler
noop deadline [cfq]
使更改的IO排程算法永久生效,需要更改核心參數
[root@chuck ~]# vim /boot/grub/menu.lst
kernel /boot/vmlinuz-3.10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet
5.4 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。
Write through
隻有當資料被寫到實體磁盤中,控制器才向IO排程器傳回了寫操作完成信号; 這種政策以犧牲IO性能,來保證資料安全性,淘寶這邊的政策:因為Write-Through的io性能無法滿足業務的需求,是以我們這邊會采用另一個模式:WB when bad bbu,即不管bbu狀态是否正常,我們都會采用write-back,那資料安全怎麼辦?伺服器異常斷電的情況,在我們這邊機率極低;即便很不幸的我們IDC局部斷電了,我們也有主備模式來保證資料的相對安全;我們會監控BBU的狀态,一旦發生了BBU failed,我們會将安排停機更換
六、建立虛拟機鏡像
6.1 虛拟磁盤及鏡像
由于在一開始建立了虛拟磁盤,并命名為CentOS-7.1-x86_64.raw,這就是虛拟機的鏡像喽。
[root@chuck ~]# cd /opt/
[root@chuck opt]# ls
6.2 鏡像制作原則
分區的時候,隻分一個/根分區,并不需要swap分區,由于虛拟機的磁盤性能就不好,如果設定了swap分區,當swap工作的時候,性能會更差。例如阿裡雲主機,就沒有交換分區。
鏡像制作需要删除網卡(eth0)中的UUID,如果有udev(/etc/udev/rules.d/70-persistent-ipoib.rules)的規則也要删除
關閉selinux,關閉iptables
安裝基礎軟體的包:net-tools lrzsz screen tree vim wget