日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > centos >内容正文

centos

2018年第13周-虚拟化技术理解(内含Centos7上安装KVM)

發布時間:2024/3/24 centos 101 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018年第13周-虚拟化技术理解(内含Centos7上安装KVM) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

虛擬化技術簡介

說道KVM,那必須先提虛擬化技術,我網上查的資料,貌似大家對虛擬化的一些術語沒有達成統一的標準,如:仿真、完全虛擬化、超虛擬化、操作系統級虛擬化。
其實我覺得這些術語沒有統一,也僅僅是因為角度的問題。也或許是理解不深,所以我這說的也僅僅是個人理解,可能也是理解不夠深,僅供參考。
而單單連虛擬化這詞,在不同人,不同層面上理解,都不一樣。

神級別的虛擬化(虛擬化的起源)

先站住計算機科學的層面來看,也就是站在神級別的角度去看(僅僅為了說得生動而已,并非神化科學),站在神級別的角度來看什么是虛擬化,準確來說是虛擬化的起源:

它的存在已經超過 50多年了。虛擬化技術最早用在包括 IBM的7044、麻省理工學院(MIT)的 CTSS(Compatible Time Sharing System)以及曼徹斯特大學的 Atlas 項目(世界上最早的超級計算機之一),這些都是請求頁面調度和監管進程調用的先驅。

硬件虛擬化

IBM 早在 20 世紀 60 年代開發 System/360? Model 67 大型機時就認識到了虛擬化的重要性。Model 67 通過 VMM(Virtual Machine Monitor)對所有的硬件接口都進行了虛擬化。在早期計算中,操作系統被稱為supervisor。能夠在運行其他操作系統的操作系統被稱為 hypervisor(這個術語是在 20 世紀 70 年代出現的)。
VMM 可以直接在底層硬件上運行,允許運行多個虛擬機(VM)。每個 VM 都可以運行一個自己私有操作系統的實例 —— 在早些時候,這稱為 CMS(或 Conversational Monitor System)。之后 VM 繼續發展,現在您可以在 System z9? 大型機上發現 VM。這提供了很好的向后兼容性,甚至是對 System/360 產品線的兼容性。

這里,這個hypervisor術語有點重要,要考的。在早期計算中,操作系統被稱為supervisor。能夠在運行其他操作系統的操作系統被稱為 hypervisor。

處理器虛擬化

虛擬化早期的另外一種用法(在本例中是對處理器的仿真)是 P-code(或偽碼)機。P-code 是一種機器語言,運行于虛擬機而不是實際硬件。P-code 早在 20 世紀 70 年代就已在加州大學圣地亞哥分校(UCSD)Pascal 系統上頗有名氣了,它將 Pascal 程序編譯成 P-code,然后在一個 P-code 虛擬機上運行。這就使 P-code 程序具有了高度的可移植性,而且,只要有可用的 P-code 虛擬機,P-code 程序就可以運行。
20 世紀 60 年代對 BCPL(Basic Combined Programming Language)的設計中也采用了相同的概念,C 語言即由 BCPL 發展而來。在這種用法中,編譯器會將 BCPL 代碼編譯成稱為 O-code 的中間機器代碼。接下來的第二個步驟是將 O-code 編譯成目標機器的原始語言?,F代編譯器所使用的這種模型為將編譯器移植到新目標體系結構上提供了很大的靈活性(通過一種中間語言將前端和后端分隔開來)。

soga,原來C的設計也是有這么一方面的考慮。-0-這虛擬化概念牽涉真深。

指令集虛擬化

虛擬化最新的發展稱為指令集虛擬化,或者二進制轉換。在這種模型中,虛擬指令集被轉換成底層硬件的物理指令集,這個過程通常都是動態的。當代碼執行時,就會對代碼的某個段進行轉換。如果出現分支情況,就會導入新代碼集并進行轉換。這使它與緩存操作非常類似,后者是將指令塊從內存移動到本地快速緩存中執行。
這種模型最近在 Transmeta 設計的 Crusoe 中央處理單元(CPU)中得到了使用。二進制轉換由 Code Morphing 的專利技術實現。類似的一個例子是完全虛擬化解決方案通過運行時代碼掃描來查找和重定向特權指令(用來解決特定處理器指令集的一些問題)。

這么一說,好像是Java的JIT(just-in-time) 即時編譯

當虛擬機發現某個方法或代碼塊運行特別頻繁時,就會把這些代碼認定為“Hot Spot Code”(熱點代碼),為了提高熱點代碼的執行效率,在運行時,虛擬機將會把這些代碼編譯成與本地平臺相關的機器碼,并進行各層次的優化,完成這項任務的正是 JIT 編譯器。

人級別的虛擬化(大家常說的虛擬化)

而這個層面,虛擬化是:

虛擬化是指在同一臺物理服務器上模擬多臺虛擬機的能力,且每臺虛擬機在邏輯上擁有獨立的CPU、內存、硬盤和網絡接口等。虛擬化可以提高硬件資源的利用率,使多個應用能隔離的運行在同一臺物理機上。

站在廣義的虛擬化來看(知道我為什么上面用神級別虛擬化來代替吧,我真不知道比廣義還廣的應該叫啥,知道的同學可以幫忙科普下):
虛擬化分為硬件層面的虛擬化軟件層面的虛擬化。

硬件層面的虛擬化

硬件層面的虛擬化,我發現好像很多人是站在這個角度去看的,所以才把這里面的虛擬化技術分為:仿真、完全虛擬化、超虛擬化、超虛擬化、操作系統級虛擬化(這個應該屬于軟件層面的虛擬化,放在這里方便統一記憶)。

在硬件虛擬化的層面,現代虛擬化技術通常是全虛擬和半虛擬的混合體。常見的硬件虛擬化技術例如VMWare、Xen和KVM都同時支持全虛擬化和半虛擬化。硬件虛擬化方式提供的虛擬機,都獨立的運行著一個完整的操作系統,這樣在同一臺物理宿主機上存在大量相同或者相似的進程和內存頁,從而導致較大的性能損耗(比如:宿主機操作系統是Centos,使用KVM生成的多個虛擬機,且在每個虛擬機中都運行Windows操作系統和相同的QQ程序,這樣宿主機的性能必然產生較大損耗)。因此,硬件虛擬化也被稱為重量級虛擬化,在同一宿主機上能夠同時運行的虛擬機數量相當有限。

這層面虛擬化項目有:

項目類型許可證
Bochs仿真LGPL
QEMU仿真LGPL/GPL
VMware完全虛擬化私有
z/VM完全虛擬化私有
Xen超虛擬化GPL
UML超虛擬化GPL
Linux-VServer操作系統級虛擬化GPL
OpenVZ操作系統級虛擬化GPL

一句話:硬件層面的虛擬化,就是在硬件上面模擬出N套硬件出來,N套硬件上可以裝不同的系統,然后不同的虛擬化技術就是層次不一樣,從而造成性能、便利等有所區別。

軟件層面的虛擬化

而站在這個角度里看,有些人都把上述的硬件層面的虛擬機化統稱為完全虛擬化(這個概念跟上面的硬件層面的虛擬化中的“完全虛擬化”沖突了,可能會有困惑,理解角度不一樣看到就不一樣,這或許就沒那么困惑)。

指在同物理服務器上提供多個隔離的虛擬運行環境,也被稱為容器技術。在軟件虛擬化的層面,同一宿主機上的所有虛擬機(又稱Container)共享宿主機的操作系統實例,不存在由于運行多個操作系統實例所造成的性能損耗(比如:宿主機的操作系統為Centos,通過軟件虛擬化技術生成多個Container,且每個Container都運行著QQ程序,由于它們共享同一個宿主機Centos操作系統,所有Container中QQ程序的進程在Centos中只有一個)。因此,軟件虛擬化也被稱為輕量級虛擬化,在同一宿主機上能夠同時運行的虛擬運行環境數量比較寬松。以Solaris操作系統上的Container為例,一個Solaris操作系統的實例理論上可以支持多達8000個Container(實際能夠運行的Container數量取決于系統資源和負載)。與此類似,Linux操作系統上的LXC也可以輕松地在同一宿主機上同時支持數量可觀的虛擬運行環境。

LXC技術就是屬于這層次上面,對應的項目有:Linux-VServer、OpenVZ和另外一個鼎鼎大名的Docker

虛擬化性能分析(XEN/KVM/LXC)

參考 http://blog.chinaunix.net/uid...
三種虛擬化性能比較 LXC>>KVM>>XEN

由于LXC使用cgroup機制,其性能損壞基本為0。

三種虛擬化隔離比較 XEN>>KVM>>LXC

LXC只能虛擬化linux。

三種虛擬化內存利用率 LXC>>KVM>>XEN

由于LXC共用內核,內存利用率最高;其他兩種方案每個虛機都需要單獨的操作系統占用一部分內存空間。

虛擬化的演變和發展

到了這個層次,虛擬化應該誕生出行業的區別。誕生出的行業有:云計算、大數據

云計算

比較有代表性就是亞馬遜AWS和開源項目Openstack

大數據

比較有代表性的是Hadoop

這里就不展開的說,再展開或許就有點跑偏題。
另外,虛擬化也可以將多臺計算機組合成一臺計算機的形式呈現出來。這通常稱為服務器聚合網格計算

安裝步驟

準備工作

1.裝centos7時,SOFTWARE SELECTION這選項選擇Virtualization Host
2.進入系統后,修改host

hostnamectl --static set-hostname cdh-host.c7.jevoncode.com

3.關閉SELinux

vim /etc/selinux/config 將第一個enable改為disable

4.關閉防火墻

systemctl stop firewalld.service systemctl mask firewalld.service

5.新建橋接的網卡,假設現有以太網的網卡是eth0,則改為以下

進入目錄: cd /etc/sysconfig/network-scripts/ TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="eth0" UUID="0cd981cd-8d6c-4802-a185-c64770110711" DEVICE="eth0" ONBOOT="yes" BRIDGE="br0"

其中BOOTPROTO、BRIDGE、ONBOOT是需要改之外,其他都是系統安裝時的樣子即可
6.在當前目錄新建配置ifcfg-br0(復制ifcfg-eth0改名為ifcfg-br0),內容如下:

TYPE="Bridge" BOOTPROTO="static" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="br0" UUID="0cd981cd-8d6c-4802-a185-c64770110711" DEVICE="br0" ONBOOT="yes" IPADDR=192.168.1.108 PREFIX=16 GATEWAY=192.16.1.1 DNS1=192.168.1.1

其中TYPE、BOOTPROTO、BRIDGE、ONBOOT、NAME、DEVICE、IPADDR、PREFIX、GATEWAY、DNS1是需要改之外,其他都是復制ifcfg-eth0的即可

  • 上述兩個網卡我需說一下,此時只能啟動br0,如果ifup eth0,它會提示
  • device p4p1 is already a member of a bridge; can't enslave it to bridge br0

    也就只能ifup br0,所以br0的IPADDR最好就是設置之前eth0獲取的ip,另外gateway的查詢是: netstat -rn 或 route -n

    netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 br0 192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

    (以0.0.0.0開始的行的Gateway是默認網關)
    DNS的查詢則是

    cat /etc/resolv.conf

    注,需查看自己CPU支不支持虛擬化:

    egrep '(vmx|svm)' /proc/cpuinfo

    有vmx(Intel)或svm(AMD)字樣,就說明CPU的支持的。

    安裝kvm

    當上面準備工作都做好,就可以安裝kvm了
    1.安裝KVM程序包及其依賴

    yum install qemu-kvm libvirt virt-install bridge-utils -y

    kvm相關程序包及其作用:

    安裝包作用
    qumu-kvmKVM核心模塊
    libvirt虛擬機管理工具,對虛擬機進行操作的集成各種接口庫函數的中間件
    python-virtinst記錄創建VM的xml文件
    bridge-utils網橋支持工具
    virt-viewer圖形查看功能
    virt-manager安裝圖形界面管理虛擬機,virt-manager通過libvirt實現對虛擬機的操作
  • 驗證安裝結果,此命令有輸出說明KVM模塊被正確加載
  • lsmod | grep kvm

    3.開啟kvm服務,并且設置其開機自動啟動

    systemctl start libvirtd systemctl enable libvirtd

    4.兩個方式查看kvm服務運行狀況

    systemctl status libvirtd systemctl is-enabled libvirtd

    新建虛擬機

    1.新建虛擬機命令:

    virt-install \ --virt-type=kvm \ --name=centos7A \ --vcpus=2 \ --memory=4096 \ --location=/root/CentOS-7-x86_64-DVD-1708.iso \ --disk path=/home/vms/centos7A.qcow2,size=40,format=qcow2 \ --network bridge=br0 \ --graphics none \ --extra-args='console=ttyS0' \ --force

    2.安裝可過程是命令式安裝centos的,此過程跟圖像界面很類似,這就略過了

    虛擬機常用命令

    1.退出鏈接虛擬機:ctrl+]
    2.查看虛擬機列表

    virsh list --all

    3.鏈接虛擬機

    virsh console centos7A

    4.啟動虛擬機

    virsh start centos7C

    5.刪除虛擬機

    virsh undefine centos7A rm -rf /home/vms/centos7A.qcow2

    虛擬機復制

    KVM的虛擬機復制分兩種情況:

    本機復制

    1.關閉虛擬機

    virsh shutdown centos7A

    2.查看虛擬機鏡像文件在哪

    virsh edit centos7A

    以下標簽就是文件的路徑

    <source file='/home/vms/centos7A.qcow2'/>

    ``
    3.將centos7A復制為centos7B

    virt-clone -o centos7A -n centos7B -f /home/vms/centos7B.qcow2

    4.即可鏈接虛擬機centos7B了

    非本機復制

    這目的就是完成類似用VirtualBox的導出功能,導出來給其他機子上使用
    1.創建新虛擬機centos7B的配置文件

    virsh dumpxml centos7A > /etc/libvirt/qemu/centos7B.xml

    2.進入centos7A鏡像的目錄/home/vms/,復制鏡像

    cp centos7A.qcow2 centos7B.qcow2

    3.用vim修改配置文件centos7B.xml,修改name,uuid,disk文件位置,mac地址
    4.通過新虛擬機的配置文件,定義一個虛擬機:

    virsh define /etc/libvirt/qemu/centos7B.xml

    注:uuid可以網上找個工具生成,但mac地址一定是新物理機有的mac地址,如果是本機復制,那就不用改mac地址

    TroubleShoot

    1.非本機復制時,define一個虛擬機時報:

    錯誤:從 /etc/libvirt/qemu/centos7C.xml 定義域失敗 錯誤:XML error: expected unicast mac address, found multicast '23:F6:7F:2B:67:5D'

    那是因為所造的mac地址是組播地址,要非組播的mac地址才行,開頭大于24即可

    2.

    錯誤:開始域 centos7C 失敗 錯誤:unsupported configuration: guest and host CPU are not compatible: Host CPU does not provide required features: x2apic, hypervisor, rdseed, adx, smap, 3dnowprefetch; try using 'Broadwell-noTSX' CPU model

    總結

    以上是生活随笔為你收集整理的2018年第13周-虚拟化技术理解(内含Centos7上安装KVM)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。