1. 程式人生 > >KVM克隆及在不同物理機下的移植

KVM克隆及在不同物理機下的移植

KVM 虛擬機器的管理工具

  準確來說,KVM 僅僅是 Linux 核心的一個模組。管理和建立完整的 KVM 虛擬機器,需要更多的輔助工具

  • QEMU-KVM

    • 在 Linux 系統中,首先我們可以用 modprobe 系統工具去載入 KVM 模組,如果用 RPM 安裝 KVM 軟體包,系統會在啟動時自動載入模組。
    • 載入了模組後,才能進一步通過其他工具建立虛擬機器。但僅有 KVM 模組是遠遠不夠的,因為使用者無法直接控制核心模組去做事情,還必須有一個使用者空間的工具。
    • 關於使用者空間的工具,KVM 的開發者選擇了已經成型的開源虛擬化軟體 QEMU。QEMU 是一個強大的虛擬化軟體,它可以虛擬不同的 CPU 構架。比如說在 x86 的 CPU 上虛擬一個 Power 的 CPU,並利用它編譯出可執行在 Power 上的程式。
    • KVM 使用了 QEMU 的基於 x86 的部分,並稍加改造,形成可控制 KVM 核心模組的使用者空間工具 QEMU-KVM。所以 Linux 發行版中分為 kernel 部分的 KVM 核心模組和 QEMU-KVM 工具。這就是 KVM 和 QEMU 的關係
  • Libvirt、virsh、virt-manager

    • 儘管 QEMU-KVM 工具可以建立和管理 KVM 虛擬機器,RedHat 為 KVM 開發了更多的輔助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易於使用
    • Libvirt 是一套提供了多種語言介面的 API,為各種虛擬化工具提供一套方便、可靠的程式設計介面,不僅支援 KVM,而且支援 Xen 等其他虛擬機器。
    • 使用 libvirt,你只需要通過 libvirt 提供的函式連線到 KVM 或 Xen 宿主機,便可以用同樣的命令控制不同的虛擬機器了。Libvirt 不僅提供了 API,還自帶一套基於文字的管理虛擬機器的命令—— virsh,可以通過使用 virsh 命令來使用 libvirt 的全部功能。但終端使用者更渴望的是圖形使用者介面,這就是 virt-manager,它是一套用 python 編寫的虛擬機器管理圖形介面,使用者可以通過它直觀地操作不同的虛擬機器。Virt-manager 就是利用 libvirt 的 API 實現的

KVM 虛擬機器遷移方式

2. KVM 虛擬機器靜態遷移

,靜態遷移由於允許中斷虛擬機器的執行,所以相對簡單。首先在源主機上關閉虛擬機器,然後移動虛擬機器的儲存映象和配置檔案到目的主機,最後在目的主機上啟動虛擬機器,恢復服務。根據虛擬機器映象儲存方式的不同,靜態遷移的實現方法稍有不同

  • 虛擬機器之間使用共享儲存:如果源主機和目的主機都能夠訪問虛擬機器的映象,則只需要遷移虛擬機器配置檔案。virt-manager 管理的虛擬機器配置檔案在 /etc/libvirt/qemu/”your vm name.xml”。拷貝 XML 配置檔案到目的主機的相同目錄後,進行適當的修改,比如:與源主機相關的檔案或路徑等。無論你何時在 /etc/libvirt/qemu/ 中修改了虛擬機器的 XML 檔案,必須重新執行 define 命令,以啟用新的虛擬機器配置檔案

    virsh define /etc/libvirt/qemu/"your vm name.xml"
  • 虛擬機器映象使用本地儲存:本地儲存是指虛擬機器的檔案系統建立在本地硬碟上,可以是檔案或者磁碟分割槽

    • 本地檔案儲存:如果虛擬機器是基於映象檔案,直接從源主機拷貝映象檔案和 XML 配置檔案到目的主機中,然後對 XML 進行適當的修改並激活。

    • 本地磁碟分割槽:如果虛擬機器使用了磁碟分割槽(物理分割槽或者邏輯分割槽)為儲存裝置,首先用 dump 工具把磁碟分割槽轉換成映象檔案再拷貝到目的主機。在目的主機恢復虛擬機器時,把映象檔案恢復到目的主機的磁碟分割槽中去。對於虛擬機器系統使用了多個磁碟分割槽的,需要每個分割槽單獨 dump 成映象檔案。例如使用“/dev/VolGroup00/lv001” LVM 邏輯卷作為儲存裝置,可以使用下面的命令轉換邏輯卷為映象檔案,輸出成映象檔案:

       dd if=/dev/VolGroup00/lv001 of=lv001.img bs=1M

KVM具體遷移步驟

  筆者在實際開發中採用的 KVM 靜態遷移,且使用虛擬機器映象本地儲存。因為操作簡單方便。操作中,虛擬機器的執行狀態的變化情況?靜態遷移虛擬的過程中,虛擬機器系統處於關機狀態,這樣虛擬機器關機前的執行狀態不會保留。如果希望保留遷移前的系統狀態,並且在遷移後能夠恢復,需要對虛擬機器做快照備份或者以休眠的方式關閉系統
  我們知道,vmware可以直接啟動虛擬機器檔案,因此,拷貝虛擬機器檔案並用vmware開啟即可實現新虛擬機器的使用。然後,KVM中的情況不同,主要源於KVM不止需要虛擬機器檔案還需要關聯的XML檔案

方案一 (筆者未採用,從網上借鑑的)

  假設通過KVM已經安裝虛擬機器vHost_1,此機的虛擬機器檔案存放在/disk4/VM/ 而關關聯的xml檔案在/etc/libvirt/qemu/vHost_2.xml。建立虛擬機器vHost_2,需要如下簡單操作:

  1. 拷貝vHost_1
    cp vHost_1 /disk4/VM/vHost_3

  2. 拷貝vHost_1的關聯檔案
    virsh dumpxml vHost_1 >/etc/libvirt/qemu/vHost_3.xml

  3. 修改vHost_3.xml檔案,主要修改UUID和source;

  4. 啟用新的虛擬機器配置檔案

    virsh define /etc/libvirt/qemu/vHost_3.xml
    virsh start vHost_3

    至此,虛擬機器vHost_3啟動!

方案二(主要利用 virt-manager 圖形介面移植)

  • 配置需求分析
主機 IP 映象配置檔案位置 映象位置 映象名稱
源主機 10.6.2.163 /etc/libvirt/qemu /var/lib/libvirt/images/ qoe_179
目的主機 10.6.2.167 /etc/libvirt/qemu /var/lib/libvirt/images/ qoe_192
  • 先檢視當前已安裝的虛擬機器
virsh list --all

這裡寫圖片描述
說明當前沒有安裝任何虛擬機器

  • 將遠端的的虛擬機器的xml以及img檔案通過scp拷貝到本機下

scp root@10.6.2.163:/opt/qoe_wzf.xml /etc/libvirt/qemu
scp root@10.6.2.163:/opt/qoe_wzf.img /var/lib/libvirt/images/
  • 然後開啟 virt-manager
virt-manager
  • 在出現的畫面中點選 New VM按鈕

這裡寫圖片描述

  • 填寫虛擬機器名稱,然後選擇匯入已經存在的映象檔案

這裡寫圖片描述

  • 選擇複製的映象img檔案,kvm預設顯示的是在 /var/lib/libvirt/images/ 下已有的img檔案

這裡寫圖片描述

  • 選擇好虛擬記憶體和虛擬CPU核數

這裡寫圖片描述

  • 這裡的步驟2是保證新建虛擬機器依舊是處在網橋br0中

這裡寫圖片描述

  • 當遇到下列情況時: 新的虛擬機器名為 qoe_192。且它的配置檔案就是以虛擬機器名為命名的xml檔案,即
    qoe_192.xml。但是它的映象檔案卻是其他

這裡寫圖片描述
接下來就是慢慢地等待了….

這裡寫圖片描述

然後就出現如上了,就是這麼簡單… ^_^

  • 因為虛擬機器在不同物理機上的移植,所以其 MAC地址一定會自動改變,這點無需我們操心,但是原有以 MAC
    為基礎的網路配置卻失效了,故需要重新配置下網路

這裡寫圖片描述

  • 先進入超級使用者模式下,然後檢視本機的 MAC 地址
ifconfig eth0
  • eth0 是虛擬機器的預設乙太網卡,實際中當然是虛擬的,並不是都取名為 eth0,根據實際情況而定。這裡務必記住新的 MAC 地址,即圖中的 52:54:00:f6:bf:e7。補充一句,如果找不到eth0網絡卡,請參考這篇博文《KVM虛擬機器克隆Linux系統後找不到eth0網絡卡》
  • 然後編輯網絡卡配置檔案
vim /etc/sysconfig/network-scripts/ifcfg-eth0
  • 將HWADDR後面的地址改為實際的地址(52:54:00:f6:bf:e7),舊的已經被筆者我註釋了,然後其餘步驟就是配置IP,這裡就不多解釋了,因為筆者的虛擬機器是 Centos7 並非 Centos6.5,所以具體的語句有一點點不同,僅此而已!

這裡寫圖片描述

  • 接著就是重啟虛擬裡的網路
service network restart

OK,大功告成了,配置完畢!

克隆虛擬機器

需求分析:克隆qoe_192虛擬機器為新的虛擬機器 qoe_193

  • 克隆已有的虛擬機器,首先需要將被複制的虛擬機器 power off,然後再右擊,選擇 clone, 在彈出的介面中

  • 首先在 Name一欄中,填入所需的新虛擬機器名稱,預設就是 xx-clone(暫不改,等等教後續如何修改,當然改了是最直接方便的)。

    這裡寫圖片描述

  • 其次在 Storage一欄中選擇 Details一項,在彈出的下面介面中,可以看到克隆的磁碟位置在 /var/lib/libvirt/images/qoe_192.img

  • 而新的虛擬機器的磁碟位置為該目錄下的 qoe_192-clone,這裡建議直接改為需求的qoe_193.img。然而為了說明當忘記修改後續如何調整,現暫不動
  • 選擇的過程也可以點選 Browse一欄(圖中4),然後選擇 Browse Local(圖中5),最終在 (圖中6)處選擇你要的磁碟檔案,然後點選 Choose Volume

這裡寫圖片描述
可以看到已經克隆出了新的虛擬機器了,現在返回修改虛擬機器的名稱以及映象檔案的名稱。

  • 首先進入 /var/lib/libvirt/images 中,修改 映象檔案的名稱

    cd /var/lib/libvirt/images
    mv qoe_192-clone.img qoe_193.img
  • 然後右擊關閉著的 qoe_192-clone,選擇 open,然後點選位置1 的修改虛擬機器硬體位置的地方

這裡寫圖片描述

  • 點選位置2 “Overview”, 在右欄中位置3 “Name” 中編輯你想修改的新名稱即可
  • 點選位置4 “VirlO Disk”,就突然彈出 5的報錯資訊,因為先前已經將qoe_192-clone.img 重新命名為 qoe_193.img了,不報錯才怪~,這時將右擊位置4 ,選擇 “Remove Hardware”,刪除它!
  • 點選位置6 “Add Hardware”
    -這裡寫圖片描述

    • 點選位置 1 “Storage”,選擇 “Select managed or other existing storage”,點選 “Browse”
    • 選擇之前更名後的 qoe_193.img,選擇 Choose Volume
    • 將 “Device type” 更改為 “Virtio Disk” 型別
  • 接著就是將修改後的 qoe_193 啟動 “Run” 就OK了,完畢!但別忘了網路配置還是要改的… -_-!

這裡寫圖片描述