2013年5月16日 星期四

架設KVM/libvirt虛擬化叢集(線上移轉與其他工具)


架設KVM/libvirt虛擬化叢集(線上移轉與其他工具)

在系統管理的工作中,若發生可預知的硬體問題時,往往需要停機方可進行修復,相對地服務也必須停止運作。如果是透過虛擬技術來建置服務環境時,即可以減少因硬體維修所造成的停機時間。

在前幾篇文章中,如網管人84期「架設KVM/libvirt虛擬化叢集-Debian平台建置」、86期「架設KVM/libvirt虛擬化叢集—配置儲存空間」,曾經介紹過如何架設虛擬機器的儲存池,這樣就會建立起共同的儲存空間。如此一來,當某一台實體主機需要停機維護時,就可以利用線上移轉的功能將虛擬機器移至另一台實體主機中繼續執行,而且中間切換只需極短的停機時間(Service Down Time)。

線上移轉(Live Migration)

要使用線上移轉功能有兩個必要前提:
1. 兩台虛擬主機必須要有共同的儲存池
2. 兩台虛擬主機必須要在相同的網段
在先前的文章中所架設的網路拓樸環境,即符合上述兩個條件。符合這些前提後,就可以使用virt-manager(Virtual Machine Manager)進行以下操作。

首先在需要轉移的虛擬機器上按下滑鼠右鍵,然後點選【Migrate】,如圖1所示。


▲圖1 於虛擬機器管理員中選擇「Migrate」。

接著,如圖2所示再選取所要移轉虛擬機器的目標主機,最後再按下〔Migrate〕確認即可。


▲圖2 確認「Migrate」。

如圖3所示,當移轉工作完成之後,就可以看到剛才被移轉的虛擬機器已經被轉到另一台實體主機上繼續運作了。


▲圖3 於虛擬機器管理員中移轉完成。

命令列工具 — virsh 

相對於virt-manager這個圖形化前端介面,virsh是一個透過命令列來控制虛擬機器的文字模式客戶端程式,也是libvirt工具組內建提供的管理工具。當我們要透過virsh進行操作時,請先打開終端機並輸入virsh以進入互動模式。接下來,為了連接伺服器上面的虛擬機器,則輸入以下指令:



如果使用virsh的位置與連接的虛擬機器伺服器同一台,也可以使用以下指令來連到本機操作。



這樣就能連上伺服器,並可透過其內建提供的各種指令來進行管理及操作。以下是常見的指令與說明:

● start [虛擬機器名稱]:啟動指定名稱的虛擬機器
● shutdown [虛擬機器名稱]:對指定的虛擬機器進行ACPI關機
● reboot [虛擬機器名稱]:對指定的虛擬機器進行ACPI關機後重新開機
● destroy [虛擬機器名稱]:對指定的虛擬機器進行強制關機
● reset [虛擬機器名稱]:對指定的虛擬機器進行強制重新啟動
● list:列出已經開機的虛擬機器
● list --all:列出所有虛擬機器
● edit:使用XML編輯虛擬機器配置,可以手動配置網路設定、儲存裝置設定等。
值得一提的是,這套工具可以透過XML檔案建立虛擬機器,能夠進行儲存空間管理、網路管理。它也能透過「qcow」格式建立快照(snapshot)。但限於篇幅關係,本篇將不詳述。

命令列的虛擬機器安裝工具 — virt-install 

virt-install是「libvirt」工具組所提供的另一個文字模式工具,讓使用者可以在命令列裡面新增一個虛擬機器並進行安裝動作。舉例來說,如果需要透過virt-manager在目前的目錄裡面建立一個映像檔,並使用放在同一個目錄底下的「ubuntu-11.10-alternate-amd64.iso」進行安裝,虛擬機器規格為512 MiB的記憶體,可以使用以下指令:




其實,如果只需要網路安裝,也可以直接指定安裝時使用的URL,不但不需要下載ISO來安裝(也要看頻寬是否適合網路安裝),而且不用指定安裝的作業系統類型,virt-install會自動幫忙偵測。例如:



以上僅介紹常用的操作方式及其參數,詳情則請參考man virt-install。

直接使用QEMU/KVM

如果在不需要「libvirt」工具組的情況下(例如只需要一個環境來執行Live CD映像檔),或者是在沒有「libvirt」工具組的環境下,可以直接使用kvm或qemu指令來執行、操作虛擬機器。透過這樣的使用方式,磁碟映像檔可以利用前一篇講過的qemu-img來建立,也可以使用來自VMware和VirtualBox的映像檔,或是實體裝置(「/dev/sdb」之類,但請在沒在使用的狀況下啟動,以免硬碟內容出現問題)。

QEMU的基本選項羅列如下:
  ● -m:記憶體大小(MiB)
  ● -smp:核心數
  ● -hda, -hdb, -hdc, -hdd:指定硬碟
  ● -cdrom:指定光碟(無法與-hdc同時使用)
  ● -boot menu=on:開機時顯示開機選單(預設是硬碟開機,詳細開機方式請參考「man qemu」)

舉例來說,如果今天要建立一個「qcow2」映像檔,並準備要安裝Ubuntu 11.10,機器的參數設成雙核心、512 MiB記憶體,可以使用以下指令:



QEMU使用網路

QEMU使用網路,除了需要建立虛擬網路卡外,還需要建立網路的連結方式,例如:



這樣的操作是,建立一張網路卡及一個User mode的網路(QEMU會自動分配DHCP給虛擬機器,並與外部的網路連接。它相當於virt-manager預設的NAT模式),並將網路卡接在那個網路上(同一個vlan的意思)。

其實若不指定網路型態,預設也會是自動分配的形式。此外,QEMU也可以將封包倒(dump)出來,格式與tcpdump和Wireshark的libpcap格式共通:



在不指定檔名的情況下,預設會倒在工作目錄的「qemu-vlan0.pcap」這個檔案底下。

若要與主機的網路裝置橋接在一起的話,設定上會比較繁雜,在此就不詳述了。所以,如果要架設對外提供服務的伺服器,筆者會強烈建議使用「libvirt」工具組來解決這個問題,同時也可以簡化管理的工作。

<本文依創用CC BY-ND-NC授權刊登,原文請見:http://www.openfoundry.org/tw/tech-column/8667>
轉載自《網管人》