1. 程式人生 > >Linux雲端計算——KVM虛擬化、後端複用、virsh命令

Linux雲端計算——KVM虛擬化、後端複用、virsh命令

顯示英文版本幫助

LANG=en_US.UTF-8 命令 --help

顯示中文版本幫助

LANG=zh_CN.UTF-8 命令 --help

虛擬化     定義: 把一個或者多個物理資源轉換成一個或者多個邏輯資源,這些邏輯資源就可以用來建立虛擬機器     詳細解釋: 可以一個物理機中建立多個虛擬機器,也可以多個物理機轉換成一個虛擬機器,但是因為網路速度遠遠打不到CPU的執行速度,所以一般不把多個真機制作為一個虛擬機器     一般 Linux 使用 KVM虛擬化

各個公司的虛擬化軟體
VMware VMware Workstation、vSphere
Microsoft VirtualPC、Hyper-V
RedHat KVM、RHEV
Citrix Xen
Oracle Oracle VM VirtualBox

KVM虛擬化     簡介:KVM只是一個linux的核心模組,是核心用來實現虛擬化的一個技術模組,具體操作需要其他軟體輔助完成,它的使用需要 CPU 的支援,通過一些硬體相關技術打成虛擬化,包括CPU方面的Intel-VT,AMD-V、以及記憶體相關的Intel的 EPT 和 AMD 的 RVI

    Qemu,用於操作核心執行的模擬工具,連線作業系統和KVM核心的命令     Libvirt,是一個對虛擬化管理的介面和工具,提供使用者端程式,讓使用者可以輕鬆控制KVM

    三者的關係: KVM是底層技術也是實現虛擬化的核心模組,Qemu是讓KVM可以被通過系統命令控制,不過很繁瑣並且複雜,Libvirt是讓控制介面更加友好,使用者可以更方便的進行控制虛擬化

必安裝軟體:yum install -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-diver-qemu
qemu-kvm 為 kvm 提供底層模擬支援,也就是qemu的核心軟體
libvirt-daemon libvirtd 守護程序,可以理解為一個控制服務,管理虛擬機器
libvirt-client 使用者端軟體,提供客戶端管理命令
libvirt-daemon-driver-qemu libvirtd 連線 qemu 的驅動
選擇安裝: virt-install virt-manager virt-v2v virt-p2v
virt-install 系統安裝工具
virt-manager 圖形管理工具
virt-v2v 虛擬機器遷移工具
virt-p2v 物理機遷移工具

virsh命令     命令格式: virsh  控制命令  虛擬機器  引數

virsh nodeinfo 檢視KVM節點資訊
virsh console 虛擬機器名 通過圖形介面,進行控制虛擬機器,不過需要虛擬機器支援console(修改配置檔案/etc/default/grub,再用命令grub2-mkconfig -o /boot/grub2/grub.cfg啟動)
virsh list 列出開啟的虛擬機器
virsh list --all 列出所有虛擬機器(包括沒有開啟的)
virsh net-list 列出啟用的虛擬網路(虛擬交換機)
一個虛擬網路可以理解為一個交換機,網路互動和物理機器一樣的原理,連一個虛擬交換機就是連在一個交換機上,從而可以通訊
virsh net-list --all 列出所有虛擬網路(包括沒有開啟的)
virsh dominfo 虛擬機器 檢視某個虛擬機器的資訊(包括沒有開啟的)
virsh start 虛擬機器 使虛擬機器開機
virsh reboot 虛擬機器 使虛擬機器關閉
virsh shutdown 虛擬機器 使虛擬機器關機(自動關閉服務並關機)
virsh destroy 虛擬機器 使虛擬機器強制關機(直接切斷電源)
virsh autostart 虛擬機器 設定虛擬機器為真機開機(通電)自啟動
virsh auotstart --disable 虛擬機器 設定為開機不自啟動
virsh net-list  檢視虛擬網路
virsh net-define 網路配置檔案的地址  建立虛擬網路
virsh net-undefine 網路名 初除虛擬網路
virsh net-start 網路名 啟動虛擬網路
virsh net-destroy 網路名 停止虛擬網路
virsh net-edit 網路名 修改vbr網路的配置
virsh net-autostart 網路名 設定vbr虛擬網路開機自啟動
virsh dumpxml 虛擬機器名 檢視虛擬機器的xml配置檔案
virsh dumpxml 虛擬機器名 > 虛擬機器名.xml 備份虛擬機器的xml配置檔案

映象盤       一般儲存映象盤的位置是/var/lib/libvirt/images/       可以理解為把真機的一部分儲存空間劃分出來作為虛擬機器的儲存空間,不過映象盤檔案格式有兩個:RAW和QCOW2

      這兩個格式,用的比較多的是QCOW2,RAW除了IO吞吐效率高之外沒有優勢,而QCOW2是佔用空間的使用率遠遠高於RAW,支援壓縮、後端盤複用、快照,

      QCOW2之所以節約空間,原因有兩點,其一是他不會按照最大儲存空間佔用系統儲存,而是按照磁碟真實儲存的空間大小,什麼意思呢,舉個例子,加入磁碟a系統分配10個G的儲存空間,實際使用者使用了1個G而已,如果是RAW格式,他會從真機儲存空間中取出10G作為其儲存空間,而QCOW2不是,他只會佔用真機1G的儲存空間,所以,空間利用率就很高;其二就是,後端複用技術,他讓一些公有資料存在一個地方,然後所有盤都可以讀這個盤的內容,這樣原來每個盤都要存一遍的資料最後一共只存了一遍,這樣大大節約了空間,尤其是作業系統,多個虛擬機器作業系統相同,那麼作業系統就可以放在一個盤裡面。

      什麼是後端複用,其作用就是讓一些公有資料存在一個盤內,其他盤以這個盤為模板,這樣資料只存了一份,卻有很多盤可以讀,裡面有些兩個專有名詞,前端盤和後端盤,後端盤就是作為模板的那個盤,前端盤就是以後端盤為模板建立的眾多盤中的一個,使用者可以通過這個盤訪問前端盤。

      對於QCOW2用的後端盤複用的核心技術就是 COW (Copy On Write) 寫時複製功能,什麼是寫時複製,分兩個情況進行資料傳遞分析,一個是當客戶讀資料的時候,系統會先到前端盤找資料,如果前端盤有就會把資料返回個客戶,如果沒有就會到後端去調出來給客戶;當客戶要修改某個檔案前端盤的資料的時候,比較麻煩,如果前端盤有這個資料,那好辦直接修改,如果前端盤沒有這個資料,COW技術會吧後端盤的相應檔案拷貝到前端盤,並且存在前端盤,然後使用者修改這個前端盤的資料。也就是說只有當用戶修改一個前端盤不存在的檔案而後端盤有的時候才會把後端檔案拷貝儲存到前端盤,而因為讀的時候先讀前端盤,所以實際上通過這個前端盤訪問就是覆蓋了後端盤的相應檔案,但是其他前端盤訪問的時候,資料不變,因為後端盤的資料沒變

qemu-img命令
qemu-img create -f 格式 磁碟路徑 最大空間大小 建立一個映象儲存盤
qemu-img info 磁碟路徑 檢視映象盤資訊
qemu-img create -b 作後端盤的磁碟路徑 -f 格式 磁碟路徑 最大空間大小 以一個後端盤為模板檔案新建一個磁碟

建立虛擬網路(交換機) 修改配置檔案/etc/libvirt/qemu/networks/交換機名.xml (建議下面的名字全部寫成一樣的)

<network>
  <name>名字(net-list檢視的)</name>
  <bridge name='名字(ifconfig檢視的)' stp='on' delay='0'/>
  <domain name='名字'/>
  <forward mode="nat"/>
  <ip address='設定真機IP地址' netmask='255.255.255.0(網段)'>
    <dhcp>
      <range start="設定虛擬機器自動獲取IP的範圍起始值" end="設定虛擬機器自動獲取IP的範圍終止值"/>
    </dhcp>
  </ip>
</network>

建立一個虛擬機器的xml配置檔案

<domain type='kvm'>
  <name>名字</name>
  <memory unit='KB(後面記憶體的單位)'>最大記憶體使用量</memory>
  <currentMemory unit='KB(後面記憶體的單位)'>當前記憶體使用量(一般等於最大記憶體)</currentMemory>
  <vcpu placement='static'>具體cpu個數</vcpu>
  <os>
    <type arch='x86_64(作業系統格式)' machine='pc'>hvm</type>
    <boot dev='hd(從硬碟引導、cd-rom是從光碟機引導)'/>
    <bootmenu enable='yes'/>
    <bios useserial='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough(使用真機cpu,也可以用虛擬cpu用於配置指令級)'>
  </cpu>
  <clock offset='localtime(使用系統事件)'/>
  <on_poweroff>destroy(強制關機命令)</on_poweroff>
  <on_reboot>restart(重啟命令)</on_reboot>
  <on_crash>derestart(強制重啟命令)</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm(用什麼程式來模擬虛擬機器)</emulator>

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/node.img'/>
      <target dev='vda' bus='virtio'/>
    </disk>

    <interface type='bridge'>
      <source bridge='vbr(虛擬交換機名)'/>
      <model type='virtio'/>
    </interface>

    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
    <serial type='pty'></serial>
    <console type='pty'>
      <target type='serial'/>
    </console>
    <memballoon model='virtio'></memballoon>
  </devices>
</domain>

搭建一個虛擬機器模板:    1. 建立一個映象盤、一個虛擬網路,然後以這個虛擬網路為網路、以映象盤為儲存空間新建虛擬機器

   2. 用正規的虛擬機器安裝過程安裝這個虛擬機器,再進行下面的配置

   3. 禁用selinux、解除安裝防火牆與NetworkManager、配置yum源

   4. 配置網絡卡(修改配置檔案/etc/sysconfig/network-scripts/ifcfs-eth0)

# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="IP地址"
NETMASK="255.255.255.0"
GATEWAY="閘道器地址"

   5. 禁用空路由,注意:一個機器只能有一個閘道器,而不是一個網絡卡介面一個閘道器,所以寫網路配置檔案的時候只能有一個配置中有閘道器

echo 'NOZEROCONF="yes"' > /etc/sysconfig/network

   6. 新增console配置,修改配置檔案/etc/default/grub

vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --unit=1 --speed=115200"
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"

# 然後讓配置檔案生效
grub2-mkconfig -o /boot/grub2/grub.cfg

   7. 根據需要安裝一些需要的軟體包

bash-completion 支援tab鍵,需要重新登入才生效
net-tools 支援ifconfig命令
vim 支援vim命令