雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問,進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用程序,服務),這些資源能夠被快速提供,只需投入不多的管理工做,或與服務供應商進行不多的交互。html
q 在雲計算以前的模式和技術node
1、IDC託管linux
2、IDC租用web
3、虛擬主機(賣空間)算法
4、VPS:虛擬專用主機 openvz(經過超賣技術坑人) xen(不支持超賣)shell
q 相對雲計算,傳統數據中心面臨的問題數據庫
1、資源利用率低express
2、資源分配不合理vim
3、難以實現真正的自動化運維windows
q 雲計算特色和優點
1、雲計算是一種使用模式,不是一種技術。(經過網絡、彈性擴展、按需付費)
2、雲計算使用方法必須經過網絡來訪問。
3、雲計算的優點是彈性計算(按需付費)。
1、資源池化
2、無處不在的網絡訪問
3、隨需應變的自助服務
4、可測量的服務
5、快速的伸縮
雲計算五大特色,如圖1-1
圖1-1
雲計算服務模型如圖1-2
圖1-2
q IaaS 基礎設施即服務
消費者經過Internet 能夠從完善的計算機基礎設施得到服務。這類服務稱爲基礎設施即服務。基於 Internet 的服務(如存儲和數據庫)是 IaaS的一部分。Internet上其餘類型的服務包括平臺即服務和軟件即服務。
q PaaS 平臺即服務
把服務器平臺做爲一種服務提供的商業模式。而云計算時代相應的服務器平臺或者開發環境做爲服務進行提供就成爲了PaaS。所謂PaaS其實是指將軟件研發的平臺做爲一種服務,以SaaS的模式提交給用戶。所以,PaaS也是SaaS模式的一種應用。
q SaaS 軟件即服務
它是一種經過Internet提供軟件的模式,廠商將應用軟件統一部署在本身的服務器上,客戶能夠根據本身實際需求,經過互聯網向廠商定購所需的應用軟件服務,按定購的服務多少和時間長短向廠商支付費用,並經過互聯網得到廠商提供的服務。用戶不用再購買軟件,而改用向提供商租用基於Web的軟件,來管理企業經營活動,且無需對軟件進行維護,服務提供商會全權管理和維護軟件,軟件廠商在向客戶提供互聯網應用的同時,也提供軟件的離線操做和本地數據存儲,讓用戶隨時隨地均可以使用其定購的軟件和服務。對於許多小型企業來講,SaaS是採用先進技術的最好途徑,它消除了企業購買、構建和維護基礎設施和應用程序的須要。
q 公有云(Public Cloud)
公有云一般指第三方提供商爲用戶提供的可以使用的雲,公有云通常可經過internet使用,多是免費或成本低廉,公有云的核心屬性是共享資源服務。這種雲有許多實例,可在當今整個開放的共有網絡中提供服務。例如:阿里雲、騰訊雲、青雲、百度雲、盛大雲、迅達雲、等等。
q 私有云(Private Clouds)
私有云是爲一個客戶單獨使用而構建的,於是提供對數據、安全性和服務質量的最有效控制。該公司擁有基礎設施,並能夠控制在此基礎設施上部署應用程序的方式。私有云可部署在企業數據中心防火牆內,也能夠將它們部署在一個安全的主句託管場所,私有云的核心屬性是專有資源。
q 混合雲(Hybrid Cloud)
混合雲融合了公有云和私有云,是近年來雲計算的主要模式和發展方向。咱們已經知道私企業主要是面向企業用戶,處於安全考慮,企業更願意將數據存放在私有云中,可是同時又但願能夠得到公有云的計算資源,在這種狀況下混合雲被愈來愈多的採用,它將公有云和私有云進行混合匹配,以得到最佳的效果,這種個性的解決方案,達到二既省錢又安全的目的。
q 社區雲(Community Cloud)
社區雲是大的公有云範疇內的一個組成部分。是指在必定的地域範圍內,由雲計算服務提供商統一提供計算資源、網絡資源、軟件和服務能力所造成的雲計算形式。即基於社區的網絡互連優點和技術易於整合特色,經過區域內各類計算能力進行統一服務形式的整合,結合社區內的用戶需求共性,實現面向區域用戶需求的雲計算服務模式。例如:區域型和行業型。資源的高效共享。
虛擬化,一種具體的技術,用來將物理機虛擬成爲多個相互獨立的虛擬機。在一臺計算機上同時運行多個邏輯計算機,每一個邏輯計算機可運行不一樣的操做系統,而且應用程序均可以在相互獨立的空間內運行而互不影響,能夠實現IT資源的動態分配、靈活調度、跨域共享,提升IT資源利用率,使IT資源可以真正成爲社會基礎設施,服務於各行各業中靈活多變的應用需求。從而顯著提升計算機的工做效率。
q 全虛擬化
q 半虛擬化
q 平臺虛擬化
q 軟件虛擬化
q 硬件虛擬化(Inter vt-x/EPT) (AMD AMD-v /RVI)
q 桌面虛擬化
q 應用虛擬化
以上各類虛擬化技術,百度百科都能查閱到相關資料。
1)虛擬化能夠虛擬出來多個操做系統,它們之間是相互獨立的,因此每一個操做系統上所跑的應用程序是相互不影響的。
2)支持異構,linux系統能夠虛擬化windows系統,方便不一樣場景系統的使用。
3)支持快照、克隆、還原等功能。
企業案例一
公司虛擬機你也不知道能不能停,也不知道跑什麼了,而後問產品經理他也不知道,有可能有用你放着把。若是這是一臺物理機你看怎麼辦,真的很無奈、想改個啥你都不敢該,只能讓他跑在那裏。
企業案例二
公司這臺物理機有沒有用,全部人告訴你,沒事刪把確定沒有用,而後到店慶的時候,產品經理過來了:咱們去年店慶作了一個積分抽獎的活動,我花錢買的,個人代碼哪去了,個人服務器呢?服務器早都格式化多少遍了,產品經理說那沒辦法,那麼趕忙聯繫提供商把,提供商倒閉了。怎麼辦,從新作唄。
若是有虛擬機就好辦了,我把虛擬機關了放在那,只要不刪除,是否是永遠都在,哪天用在起來就好了。無非就佔點硬盤,分配的時候,可使用多少分配多少。
q 雲計算不等於虛擬化,二者並不能相互比較。
q 雲計算是一種資源和使用交互的方式。
q 虛擬化是一種具體的技術。
q 雲計算要依賴虛擬化技術來實現的一種經過網絡訪問獲取資源,流量,交付的使用模式。(例如:彈性計算)。
q 虛擬化至關於實幹家,而云計算是思想家。
KVM:內核級虛擬化技術(Kernel-based Virtual Machine)
結構簡單,包含兩個部分:
1)設備驅動/dev/kvm, 針對模擬PC硬件的用戶空間組件
2) KVM須要CPU中虛擬化功能的支持,只可在具備虛擬化支持的CPU上運行,即具備VT功能的interCPU和具備ADM-V功能的AMD CPU
q 嵌入到Linux正式Kernel(提升兼容性)
q 代碼級資源調用(提升性能)
q 虛擬機就是一個進程(內存易於管理)
q 直接支持NUMA技術(提升擴展性)
q ------RedHat收購KVM---------
q 保持開源發展模式
q 更好的商業支持及服務保障
實驗必備條件,必須開啓虛擬機VT-EPT技術,在vmware虛擬機選擇上便可。服務器上默認是開啓狀態。
[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 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap
[root@linux-node1 ~]# cat /etc/redhat-release #查看操做系統版本
CentOS Linux release 7.1.1503 (Core)
[root@linux-node1 ~]# yum install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install –y #安裝KVM
kvm:linux內核的一個模塊,模塊不須要安裝只須要加載,經過用戶態程序來管理便可。
qeum:虛擬化軟件,能夠虛擬不一樣的CPU,支持異構(x86的架構能夠虛擬化不是x86架構的)
qeum-kvm:用戶態管理kvm,網卡、聲卡、PCI設備等都是須要qemu來管理。
[root@linux-node1 ~]# lsmod|grep kvm #查看kvm內核是否被加載
kvm_intel 148081 0
kvm 461126 1 kvm_intel
[root@linux-node1 ~]# systemctl enable libvirtd.service #libvirtd加入開機啓動
[root@linux-node1 ~]# systemctl start libvirtd.service #啓動libvirtd
首先學習下virsh-install建立虛擬機命令
--virt-type:指定虛擬機類型(kvm、qemu、xen)
--name:指定虛擬機的名稱
--raw:指定內存大小
--cpu:指定cpu的核數(默認爲1)
--cdrom:指定鏡像
--disk:指定磁盤路徑(即上文建立的虛擬磁盤)
--network:指定網絡類
[root@linux-node1 ~]# qemu-img create -f raw /opt/CentOS-7.1-x86_64.raw 10G #建立虛擬磁盤,-f指定格式,路徑/opt/CentOS-7.1-x86_64.raw,大小10G
[root@linux-node1 ~]# dd if=/dev/cdrom of=/opt/CentOS-7.1.iso#掛在鏡像,導入至虛擬機
[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 --network network=default --graphics vnc,listen=0.0.0.0--noautoconsole #建立一臺KVM虛擬機
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客戶端,輸入192.168.56.111:5900(第一個默認5900,第二個5901,以此類推)鏈接虛擬機裏面創建的KVM虛擬機,安裝CentOS7的過程,此處不在演示如何安裝。
安裝CentOS7,在啓動前修改內核讓網卡爲eth0,如圖1-2
圖1-2
[root@linux-node1 opt]# virsh start CentOS-7-x86_64 #啓動剛纔建立的CentOS7KVM虛擬機
Domain CentOS-7-x86_64 started
[root@linux-node1 opt]# virsh list #查看KVM虛擬機是否啓動
Id Name State
----------------------------------------------------
3CentOS-7-x86_64running
[root@linux-node1 opt]# virsh edit CentOS-7-x86_64 #爲了實現CPU的熱添加,就須要更改Cpu的最大值,固然熱添加值不能超過最大值
<vcpu placement='auto' current="1">4</vcpu> #當前爲1,自動擴容最大爲4
[root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64 #關閉KVM虛擬機
Domain CentOS-7-x86_64 is being shutdown
[root@linux-node1 opt]# virsh start CentOS-7-x86_64 #啓動KVM虛擬機
Domain CentOS-7-x86_64 started
[root@linux-node1 opt]# virsh setvcpus CentOS-7-x86_64 2 --live #熱修改成2個cpu(不知減小),高版本自動激活
[root@KVM]# grep processor /proc/cpuinfo |wc -l #經過vnc登陸KVM虛擬機查看是否擴容成功
2
在建立虛擬機時指定cpu
[root@linux-node1 ~]# virt-install --help|grep vcpus
--vcpus VCPUS 爲虛擬機配置的 vcpus 數。例如:
--vcpus 5
--vcpus 5,maxcpus=10,cpuset=1-4,6,8
--vcpus sockets=2,cores=4,threads=2,
內存的設置擁有一個氣球(balloon)機制,能夠增大減小,可是也要設置一個最大值,默認並無最大值,也能夠在安裝時指定。
[root@linux-node1 opt]# virsh edit CentOS-7-x86_64 #爲了實現CPU的熱添加,就須要更改Cpu的最大值,固然熱添加值不能超過最大值
<memory unit='KiB'>4194304</memory> #修改最大支持內存擴容爲4G
<currentMemory unit='KiB'>1048576</currentMemory> #當前KVM虛擬機內存爲1G
重啓虛擬機
[root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64 #關閉KVM虛擬機
Domain CentOS-7-x86_64 is being shutdown
[root@linux-node1 opt]# virsh start CentOS-7-x86_64 #啓動KVM虛擬機
Domain CentOS-7-x86_64 started
[root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon #查看當前KVM內存大小
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
更改虛擬機中存儲,硬盤設置(不建議生產環境使用硬盤的擴大收縮模式,很容易產生故障)
[root@linux-node1 ~]# qemu-img --help |grep -i "formats:"
Supported formats: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug
硬盤格式均可以經過qeum-img管理,具體qemu-img --help
全鏡像格式(表明raw):設置多大就是多大,寫入速度快,方便的轉換爲其餘格式,性能最優,可是佔用空間大。
稀疏格式(表明qcow2):支持壓縮,快照,鏡像,更小的存儲空間(即用多少佔多少)
默認狀況KVM的網絡是NAT模式,可是在生產狀況,用的多的都是網橋模式。
修改eth0(這裏CentOS7的eth0在裝機時就指定了,那若是沒指定怎麼辦? http://www.xuliangwei.com/xubusi/102.html)
[root@linux-node1 ~]# brctl addbr br0 #添加一個網卡
[root@linux-node1 ~]# brctl show #查看網卡信息
bridge name 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 gw 192.168.56.2 && iptables -F #把eth0加入網橋,使用橋接模式,給br設置ip,添加路由網關,關閉防火牆
[root@linux-node1 ~]# ifconfig br0 #查看網橋的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 64scopeid 0x20<link>
ether 00:0c:29:5d:cc:27 txqueuelen 0(Ethernet)
RX packets 4813 bytes 472527 (461.4 KiB)
RX errors 0 dropped 0overruns 0 frame 0
TX packets 2705 bytes 510369 (498.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0collisions 0
[root@linux-node1 ~]# virsh edit CentOS-7-x86_64 #編輯虛擬機的網絡配置使用br0網橋模式
<interface type='bridge'> #虛擬機網絡鏈接方式
<mac address='52:54:00:22:04:0f'/> #爲虛擬機分配MAC地址,務必惟一,若是是dhcp得到一樣IP會引發衝突
<source bridge='br0'/> #當前主機網橋名稱
重啓虛擬機
[root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64 #關閉KVM虛擬機
Domain CentOS-7-x86_64 is being shutdown
[root@linux-node1 opt]# virsh start CentOS-7-x86_64 #啓動KVM虛擬機
Domain CentOS-7-x86_64 started
#而後配置靜態IP地址,重啓網卡,便可以經過xshell鏈接上KVM虛擬機了。
[root@linux-node1 ~]# virt-install #創建kvm虛擬機
[root@linux-node1 ~]# virsh list #查看正在運行的KVM虛擬機
[root@linux-node1 ~]# virsh list --all #查看全部KVM虛擬機
[root@linux-node1 ~]# virsh start name #啓動KVM虛擬機
[root@linux-node1 ~]# virsh shutdown name #正常關閉KVM虛擬機
[root@linux-node1 ~]# virsh destroy name #強制關閉KVM虛擬機(相似於直接斷電)
[root@linux-node1 ~]# virsh suspend name #掛起KVM虛擬機
[root@linux-node1 ~]# virsh resume name #恢復掛起的KVM虛擬機
[root@linux-node1 ~]# virsh dumpxml name #查看KVM虛擬機配置文件
[root@linux-node1 ~]# virsh edit name #編輯KVM虛擬機的xml配置文件
[root@linux-node1 ~]# virsh undefine name #完全刪除KVM虛擬機,不可逆,若是想找回來,須要備份/etc/libvirt/qemu的xml文件)
inter的cpu的運行級別,按權限級別高低Ring3->Ring1->Ring0(Ring2和Ring1暫時用不上)Ring3爲用戶態,Ring0爲內核態
Ring3的用戶態是沒有權限管理硬件的,須要切換到內核態Ring0,這樣的切換(系統調用)稱爲上下文切換,物理機到虛擬機屢次的上下文切換,勢必會致使性能出現問題。對於全虛擬化,inter實現了技術VT-x,在CPU硬件上實現了加速轉換,CentOS7默認是不須要開啓的。
q CPU緩存綁定
[root@linux-node1 ~]# lscpu|grep cache #centos7自帶查看cpu信息命令
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綁定的缺點:不方便遷移,靈活性差
宿主機虛擬內存 -> 宿主機物理內存
虛擬機的虛擬內存 -> 虛擬機的物理內存
VMM經過採用影子列表解決內存轉換的問題,影子頁表是一種比較成熟的純軟件的內存虛擬化方式,但影子頁表固有的侷限性,影響了VMM的性能,例如,客戶機中有多個CPU,多個虛擬CPU之間同步頁面數據將致使影子頁表更新次數幅度增長,測試頁表將帶來異常嚴重的性能損失。以下圖1-1爲影子頁表的原理圖
圖1-1
在此之際,Inter在最新的Core I7系列處理器上集成了EPT技術(對應AMD的爲RVI技術),以硬件輔助的方式完成客戶物理內存到機器物理內存的轉換,完成內存虛擬化,並以有效的方式彌補了影子頁表的缺陷,該技術默認是開啓的,以下圖1-2爲EPT技術的原理。
圖1-2
KSM內存合併
宿主機上默認會開啓ksmd進程,該進程做爲內核中的守護進程存在,它按期執行頁面掃描,識別副本頁面併合並副本,釋放這些頁面以供它用,CentOS7默認是開啓狀態
[root@linux-node1 ~]# ps aux|grep ksmd|grep -v grep
root 2800.0 0.0 00 ? SN 04:220:00 [ksmd]
大頁內存,CentOS7默認開啓的
[root@linux-node1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[root@linux-node1 ~]# ps aux|grep hugepage|grep -v grep
root 2810.0 0.0 00 ? SN 04:220:03 [khugepaged]
Linux默認的內存頁面大小都是4K,HugePage進程會將默認的每一個內存頁面能夠調整爲2M
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
[root@linux-node1 ~]# dmesg|grep -i "scheduler" #查看本機Centos7默認所支持的調度算法
[ 1.332147] io scheduler noop registered
[ 1.332151] io scheduler deadline registered (default)
[ 1.332190] io scheduler cfq registered
臨時更改某個磁盤的IO調度算法,將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
noop deadline [cfq]
[root@linux-node1 ~]# vim /boot/grub/menu.lst #使更改的IO調度算法永久生效,須要更改內核參數
kernel /boot/vmlinuz-3.10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet
1.在開始建立過虛擬磁盤,並命名爲CentOS-7.1-x86_64.raw,這個是虛擬機鏡像。
[root@linux-node1 ~]# ll /opt/
total 5203344
-rw-r--r-- 1 qemu qemu4310695936 12月 28 04:46 CentOS-7.1.iso
-rw-r--r--. 1 qemu qemu 10737418240 12月 28 08:55 CentOS-7.1-x86_64.raw
2. 分區的時候,只分一個/分區(不須要swap分區)。
3. 刪除網卡里面{UUID,MAC}
4. 若是有/etc/udev/rules.d/ 70-persistent-ipoib.rules 則刪除。
5. iptables關閉、selinux關閉
6.安裝基礎軟件包。(net-tools lrzsz screen tree vim wget)
關於更多雲計算知識盡情期待:http://xuliangwei.com