Login  |  繁體中文
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 本網站預計持續維運至 2021年底,網站內容基本上不會再更動。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
Tech Column 使用 Debian 與 KVM+libvirt 架設虛擬化叢集-線上移轉與其他工具

使用 Debian 與 KVM+libvirt 架設虛擬化叢集-線上移轉與其他工具

線上移轉 (Live Migration)

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

在前幾篇文章中:

  1. 基於 KVM 與 libvirt 的虛擬化叢集系統-Debian 篇
  2. 基於 KVM 與 libvirt 的虛擬化叢集系統-儲存空間的配置

我們曾經介紹過如何架設虛擬機器的儲存池,這樣就會建立起共同的儲存空間,如此一來,當有一台實體主機需要停機維護時,就可以利用線上移轉的功能將虛擬機器移至另一台實體主機中繼續執行,而且中間切換只需極短的停機時間(service down time)。

要使用線上移轉功能有兩個必要前提:

  1. 兩台虛擬主機必須要有共同的儲存池;
  2. 兩台虛擬主機必須要在相同的網段。

在先前的文章中所架設的網路拓樸環境,即符合上述兩個條件。符合這些前提後,我們就可以使用 virt-manager (Virtual Machine Manager) 來進行以下操作:

請在您需要轉移的虛擬機器上點右鍵,並點選「Migrate」。

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

接著,再選取您要移轉虛擬機器的目標主機,最後再按下「Migrate」確認即可。

▲ 圖2:確認「Migrate」

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

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


命令列工具 virsh

相對於 virt-manager 這個圖形化前端介面,virsh 是一個透過命令列來控制虛擬機器的文字模式客戶端程式,也是 libvirt 工具組內建提供的管理工具。

當我們要透過 virsh 進行操作時,請先打開終端機並輸入 virsh 以進入互動模式。接下來,為了連接伺服器上面的虛擬機器,請輸入以下指令:

    connect qemu+ssh://[位置]/system

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

    connect qemu:///system

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

  • 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 的記憶體,可以使用以下指令:

    virt-install --connect=qemu:///system -n ubuntu-11.10 -r 512 --os-type='linux' \
    --os-variant='ubuntuoneric' -c ubuntu-11.10-alternate-amd64.iso \
    --disk path=ubuntu-11.10.img,size=5

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

    virt-install --connect=qemu:///system -n ubuntu-11.10 -r 512 \
    -l https://ftp.tw.debian.org/debian/dists/squeeze/main/installer-amd64/ \
    --disk pool=default,size=5

以上僅介紹常用的操作方式及其參數,詳情則請參考 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-img create -f qcow2 ubuntu-11.10.img 10G
    kvm -m 512 -smp 2 -cdrom ubuntu-11.10-alternative.iso -boot order=d ubuntu-11.10.img

QEMU 使用網路

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

    kvm -net nic,vlan=0 -net user,vlan=0(後略)

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

此外,QEMU 也可以將封包倒 (dump) 出來,格式與 tcpdump 和 Wireshark 的 libpcap 格式共通:

kvm -net nic,vlan=0 -net user,vlan=0 -net dump,vlan=0(後略)

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

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




OSSF Newsletter : 第 193 期 使用 Debian 與 KVM+libvirt 架設虛擬化叢集-線上移轉與其他工具
Tags: KVM,   Debian,   libvert,  
Category: Tech Column