雲計算與虛擬化

(一)雲計算概述php

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

1:雲計算以前的使用模式linux

  • IDC 託管
  • IDC 租用
  • 虛擬主機(買空間)
  • VPS:虛擬專用主機

2:傳統數據中心面臨的問題ios

  • 資源使用率低
  • 資源分配不均
  • 自動化能力差

3:雲計算的優點web

  1. 雲計算是一種使用模式,不是一種技術
  2. 雲計算的使用方式:經過網絡訪問
  3. 雲計算的優點:彈性計算、按需計費

4:雲計算的特色算法

  1. 資源池化
  2. 無處不在的網絡訪問
  3. 可隨時調節的自助服務
  4. 可測量的服務量
  5. 快速的變化伸縮

5:雲計算的服務模式shell

827552-20151228163141292-333601830

A:支撐服務數據庫

    由支撐網絡來提供,雲計算模式實現的使用的方式。編程

B:IaaS基礎設施即服務vim

    消費者經過支撐網絡能夠從完善的計算機基礎設施得到服務。這類服務稱爲基礎設施即服務,基於 Internet 的服務(如存儲和數據庫)是 IaaS的一部分。

C:PaaS平臺即服務

    PaaS(Platform-as-a-Service:平臺即服務)是指將軟件研發的平臺做爲一種服務,以SaaS的模式提交給用戶。所以,PaaS也是SaaS模式的一種應用。

D:SaaS

     它是一種經過Internet提供軟件的模式,廠商將應用軟件統一部署在本身的服務器上,客戶能夠根據本身實際需求,經過互聯網向廠商定購所需的應用軟件服務,按定購的服務多少和時間長短向廠商支付費用,並經過互聯網得到廠商提供的服務。用戶不用再購買軟件,而改用向提供商租用基於Web的軟件,來管理企業經營活動,且無需對軟件進行維護,服務提供商會全權管理和維護軟件,軟件廠商在向客戶提供互聯網應用的同時,也提供軟件的離線操做和本地數據存儲,讓用戶隨時隨地均可以使用其定購的軟件和服務。對於許多小型企業來講,SaaS是採用先進技術的最好途徑,它消除了企業購買、構建和維護基礎設施和應用程序的須要。

6:雲計算的類型

A:公有云

    公有云一般指第三方提供商爲用戶提供的可以使用的雲,公有云通常可經過 Internet 使用,多是免費或成本低廉的,公有云的核心屬性是共享資源服務。這種雲有許多實例,可在當今整個開放的公有網絡中提供服務。例如:阿里雲、騰訊雲、青雲、百度雲、盛大雲、迅達雲、等等。

B:私有云

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

C:混合雲

     混合雲融合了公有云和私有云,是近年來雲計算的主要模式和發展方向。咱們已經知道私企業主要是面向企業用戶,出於安全考慮,企業更願意將數據存放在私有云中,可是同時又但願能夠得到公有云的計算資源,在這種狀況下混合雲被愈來愈多的採用,它將公有云和私有云進行混合和匹配,以得到最佳的效果,這種個性化的解決方案,達到了既省錢又安全的目的

(二)虛擬化概述

      虛擬化,是指經過虛擬化技術將一臺計算機虛擬爲多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每一個邏輯計算機可運行不一樣的操做系統,而且應用程序均可以在相互獨立的空間內運行而互不影響,從而顯著提升計算機的工做效率。

      虛擬化使用軟件的方法從新定義劃分IT資源,能夠實現IT資源的動態分配、靈活調度、跨域共享,提升IT資源利用率,使IT資源可以真正成爲社會基礎設施,服務於各行各業中靈活多變的應用需求。

1:虛擬化的分類

  • 全虛擬化
  • 半虛擬化
  • 平臺虛擬化
  • 硬件虛擬化(Inter vt-x/EPT) (AMD AMD-v /RVI)
  • 軟件虛擬化
  • 桌面虛擬化
  • 應用虛擬化
  • 存儲虛擬化
  • 網絡虛擬化

2:虛擬化的優點

  1. 虛擬化能夠虛擬出不一樣的虛擬操做系統。
  2. 虛擬機之間是相互獨立互不影響的。
  3. 支持異構。
  4. 支持快照、克隆、還原等操做

(三)雲計算與虛擬化的區別與聯繫

1:虛擬化是一種技術,雲計算是一種使用模式。

2:虛擬化是指將物理的實體,經過軟件模式,造成若干虛擬存在的系統,其實真是運做仍是在實體上,只是劃分了若干區域或者時域劃分

3:雲計算的基礎是虛擬化,但虛擬化只是雲計算的一部分,雲計算其實就是在虛擬化出若干資源池之後的應用,但虛擬化並非只對應雲計算的

(四)KVM虛擬化

  • KVM是開源軟件,全稱是kernel-based virtual machine(基於內核的虛擬機)。
  • 是x86架構且硬件支持虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。
  • 它包含一個爲處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
  • KVM還須要一個通過修改的QEMU軟件(qemu-kvm),做爲虛擬機上層控制和界面。
  • KVM能在不改變linux或windows鏡像的狀況下同時運行多個虛擬機,(它的意思是多個虛擬機使用同一鏡像)併爲每個虛擬機配置個性化硬件環境(網卡、磁盤、圖形適配器……)。

1:KVM的優點

  1. 嵌入到Linux的Kernel中 (提升兼容性)
  2. 代碼級資源調用(提升性能)
  3. 虛擬機就是一個進程
  4. 直接支持MUMA技術(NUMA(Non Uniform Memory Access Architecture)技術可使衆多服務器像單一系統那樣運轉,同時保留小系統便於編程和管理的優勢。)

2:KVM安裝前提

     CPU要支持虛擬化,服務器上默認通常是開啓的,虛擬機要本身啓動VT-EPT技術

[root@oldboy-node1 ~]# grep -E "(vmx|svm)" /proc/cpuinfo

     Inter處理器對應:VMX

     AMD處理器對應:SVM

3:KVM虛擬機安裝

(1):查看系統版本

[root@linux-node1~]# cat /etc/redhat-release 
CentOSLinux release 7.1.1503 (Core)

(2):安裝KVM相關的組件

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

      kvm:linux內核中的一個模塊,不須要安裝只要加載就行,經過用戶態進程來管理。

      qemu:虛擬化軟件,支持多種架構,可擴展,可移植

      qemu-kvm:用戶態管理KVM,網卡、聲卡、PCI設備等的管理

      libvirt:是一個虛擬化 API 和虛擬機(VMs)管理後臺,支持遠程或本地訪問,支持多種虛擬化後端 (QEMU/KVMVirtualBoxXen,等等) 。

(3)檢查KVM是否加載

[root@oldboy-node1 ~]# lsmod  | grep kvm
kvm_intel             148081  0
kvm                   461126  1 kvm_intel

(4)啓動並設置開機啓動libvirt

[root@linux-node1~]# systemctl enable libvirtd.service  
[root@linux-node1~]# systemctl start libvirtd.service
[root@oldboy-node1 ~]# systemctl status libvirtd.service

(5)  建立虛擬機

    1:虛擬機的建立命令

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

        –name:指定虛擬機的名稱

        –raw:指定內存大小

        –cpu:指定cpu的核數(默認爲1)

        –cdrom:指定鏡像

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

        –network:指定網絡類

   2:建立硬盤(建立虛擬磁盤,-f指定格式,路徑/opt/CentOS-7.1-x86_64.raw,大小10G)

[root@oldboy-node1 ~]# 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:鏡像的拷貝

[root@oldboy-node1 ~]# dd if=/dev/cdrom of=/opt/CentOS-7.1.iso

   4:虛擬機的建立

[root@oldboy-node1 ~]# virt-install --name CentOS-7.1-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

   5:使用VNC鏈接虛擬機

       使用VNC客戶端鏈接虛擬機  物理機的地址:5900 默認是從5900開始,以此類推。也能夠經過端口grep vnc查看。

   6:修改網卡的名稱

       由於CentOS7之後,網卡的命名發生改變。能夠在安裝的時候就作出修改

image

       按下Tab鍵,而後在quiet後面添加  net.ifnames=0 biosdevname=0

至此,一臺KVM虛擬機安裝成功。

(6)KVM的平常應用管理

     1:虛擬機的查看

# 當前正在運行中的虛擬機
[root@linux-node1 opt]# virsh list 
Id    Name                           State
—————————————————-
 1   CentOS-7-x86_64running
# 當前物理機中的全部的虛擬機
[root@linux-node1 opt]# virsh list --all

     也能夠在物理機進程中查看,KVM虛擬機就是一個KVM進程在運行

     2:虛擬機的開關

關閉虛擬機
[root@oldboy-node1 ~]# virsh shudown CentOS-7.1-x86_64(主機名)
[root@oldboy-node1 ~]# virsh destroy CentOS-7.1-x86_64(主機名)
打開虛擬機
[root@oldboy-node1 ~]# virsh start CentOS-7.1-x86_64
刪除虛擬機
[root@oldboy-node1 ~]# virsh undefine CentOS-7.1-x86_64
掛起
[root@oldboy-node1 ~]# virsh suspended CentOS-7.1-x86_64
恢復
[root@oldboy-node1 ~]# virsh resume CentOS-7.1-x86_64

     3:虛擬機CPU的擴容

編輯虛擬機
virsh edit CentOS-7.1-x86_64
# 爲了實現CPU的熱添加,就須要更改Cpu的最大值,固然熱添加值不能超過最大值
# 當前爲1,自動擴容最大爲4
[root@linux-node1 opt]# virsh edit CentOS-7-x86_64 
<vcpu placement=’auto’ current=」1″>4</vcpu>  
# 熱修改成2個cpu(不知減小),高版本自動激活
[root@linux-node1 opt]# virsh setvcpus CentOS-7-x86_64 2 –live  
# 經過vnc登陸KVM虛擬機查看是否擴容成功
[root@KVM]# grep processor /proc/cpuinfo |wc -l  
# 在建立虛擬機時指定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,
"""

     4:內存熱膨脹和壓縮

# 查看當前KVM內存大小
[root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7-x86_64 –hmp –cmd info balloon  
balloon: actual=1024
# 熱添加600M
[root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 –hmp –cmd balloon 600
# 在配置文件中修改
[root@linux-node1 network-scripts]# virsh  edit CentOS-7.1-1-x86_64
最大內存<memory unit='KiB'>4048576</memory>
當前內存<currentMemory unit='KiB'>1048576</currentMemory>

     5:硬盤的模式

        生產中不建議對線上的服務器的硬盤進行更改,所以直接不對此贅述。

        硬盤格式:

           RAW:全鏡像格式:設置多大就是多大,寫入速度快,能夠隨便轉換成其餘的格式。性能最優。可是佔用空間大。

           QCOW2:稀疏格式:支持寫時拷貝(Cow,copy-on-write)壓縮,快照,鏡像,更小的存儲空間。(用多少給多少)可選擇基於Zlib的壓縮方式,能夠選擇AES加密

        建立qcow2和raw文件

[root@linux-node1 ~]#  qemu-img create -f qcow2 test.qcow2 10G
Formatting 'test.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off

[root@linux-node1 ~]#  qemu-img create -f raw test.raw 10G
Formatting 'test.raw', fmt=raw size=10737418240

        空間使用狀況對比

[root@linux-node1 ~]#   ll -sh test.*
200K -rw-r--r-- 1 qiaoliyong qiaoliyong 193K 5 月   6 10:29 test.qcow2
   0 -rw-r--r-- 1 qiaoliyong qiaoliyong  10G 5 月   6 10:28 test.raw

[root@linux-node1 ~]#  stat test.raw
  文件:"test.raw"
  大小:10737418240    塊:0          IO 塊:4096   普通文件

[root@linux-node1 ~]#  stat test.qcow2
  文件:"test.qcow2"
  大小:197120        塊:400        IO 塊:4096   普通文件

注:

     參考:http://www.ibm.com/developerworks/cn/linux/1409_qiaoly_qemuimgages/

    6:網卡的配置

# 添加一個網卡
[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
# 把eth0加入網橋,使用橋接模式,給br設置ip,添加路由網關,關閉防火牆
[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  
# 查看網橋的IP
[root@linux-node1~]# ifconfig br0  
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
# 編輯虛擬機的網絡配置使用br0網橋模式
[root@linux-node1 ~]# virsh edit CentOS-7-x86_64  
 <interface type=’bridge’>                                          # 虛擬機網絡鏈接方式
  <mac address=’52:54:00:22:04:0f’/>                               #爲虛擬機分配MAC地址,務必惟一,若是是dhcp得到一樣IP會引發衝突
  <source bridge=’br0’/>                                           #當前主機網橋名稱
# 重啓虛擬機
# 關閉KVM虛擬機
[root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64  
Domain CentOS-7-x86_64 is being shutdown
# 啓動KVM虛擬機
[root@linux-node1 opt]# virsh start CentOS-7-x86_64  
Domain CentOS-7-x86_64 started
# 而後配置靜態IP地址,重啓網卡,便可以經過xshell鏈接上KVM虛擬機了。

(7)KVM性能優化

  1:CPU的優化

     Inter的cpu運行級別,按權限級別高低Ring3->Ring1->Ring0(Ring2和Ring1暫時不使用)Ring3爲用戶態;Ring0爲內核態

Image

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

  2:CPU緩存綁定

[root@linux-node1 ~]# 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 125718(1指的是cpu1,也能夠綁定到多個cpu上,25718是指的pid).

cpu綁定的優勢:提升性能,20%以上

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

3:內存優化

本來實現方式:

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

    宿主機的虛擬內存===>宿主機的物理內存

如今實現方式:EPT(inter)

     虛擬機的虛擬內存=====EPT=====宿主機的物理內存

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

Image

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

KSM內存合併

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

[root@linux-node1 ~]# ps aux |grep ksmd
root        280  0.0  0.0      0     0 ?        SN   20:37   0:00 [ksmd]

大頁內存

    Linux默認的內存頁面大小都是4K,HugePage進程會將默認的每一個內存頁面能夠調整爲2M,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]

4:磁盤IO優化

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@linux-node1 ~]# dmesg|grep -i 「scheduler」   
[    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]
# 使更改的IO調度算法永久生效,須要更改內核參數
[root@linux-node1 ~]# vim /boot/grub/menu.lst  
kernel /boot/vmlinuz-3.10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet
相關文章
相關標籤/搜索