KVM 實現虛擬機在線熱遷移

1、KVM 虛擬機的遷移方式vim

KVM虛擬機的遷移有兩種方法:
一、靜態遷移(冷遷移):對於冷遷移,就是在虛擬機關閉狀態下,將虛擬機的磁盤文件及.xml配置文件(這兩個文件組成了一個虛擬機)複製到要遷移到的目標主機上,而後在目標主機上使用「virsh define *.xml」命令從新定義虛擬機便可。centos

二、動態遷移(熱遷移):對於熱遷移,比較經常使用,一般是這臺服務器上正在跑着一些業務,而這些業務又不容許中斷,那麼就須要使用熱遷移了,這篇博文將詳細寫出熱遷移的步驟。服務器

一、冷遷移
一般咱們存放虛擬機磁盤的目錄都是掛在的一個nfs文件系統的磁盤,而這個磁盤一般是LVM文件系統。因此須要進行冷遷移時,只要在目標主機上掛載這個nfs文件系統,就能夠看到要遷移的那個虛擬機的磁盤文件,一般以.qcow2或.raw結尾的,而後,只需將虛擬機的.xml配置文件發送到目標服務器上,而後從新定義一下便可經過「virsh list --all」命令查看到遷移過來的虛擬機。
二、熱遷移
若是源宿主機和目的宿主機共享存儲系統,則只須要經過網絡發送客戶機的 vCPU 執行狀
態、內存中的內容、虛機設備的狀態到目的主機上。不然,還須要將客戶機的磁盤存儲發到目的主
機上。共享存儲系統指的是源和目的虛機的鏡像文件目錄是在一個共享的存儲上的。
在基於 共享存儲系統 時,KVM 動態遷移的具體過程爲:
一、遷移開始時,客戶機依然在宿主機上運行,與此同時,客戶機的內存頁被傳輸到目的主機上。
二、QEMU/KVM 會監控並記錄下遷移過程當中全部已被傳輸的內頁的任何修改,並在全部內存頁都傳輸完成後即開始傳輸在前面過程當中內存頁的更改內容。
三、QEMU/KVM 會估計遷移過程當中的傳輸速度,當剩餘的內存數據量可以在一個能夠設定的時間週期(默認 30 毫秒)內傳輸完成時,QEMU/KVM 會關閉源宿主機上的客戶機,再將剩餘的數據量傳輸到目的主機上,最後傳輸過來的內存內容在目的宿主機上恢復客戶機的運行狀態。
四、至此,KVM 的動態遷移操做就完成了。遷移後的客戶機儘量與遷移前一致,除非目的主機上缺乏一些配置,好比網橋等。注意,當客戶機中內存使用率很是大並且修改頻繁時,內存中數據不斷被修改的速度大於KVM可以傳輸的內存速度時,動態遷移的過程是完成不了的,這時候只能靜態遷移。
三、遷移的注意事項
不管是冷遷移仍是熱遷移,注意事項大都差很少網絡

遷移前目標服務器的要求以下:ssh

  • 最好遷移的服務器cpu品牌同樣;
  • 64位只能在64位宿主機間遷移,32位能夠遷移32位和64位宿主機;
  • 宿主機中的虛擬機名字不能衝突;
  • 目的宿主機和源宿主機軟件配置儘量的相同,如 有相同的橋接網卡,資源池等;
  • 兩臺遷移的主機 cat /proc/cpuinfo |grep nx 的設置是相同的NX,全名爲「No eXecute」,即「禁止運行」,是應用在CPU的一種技術,用做把存儲器區域分隔爲只供存儲處理器指令集,或只供數據使用。任何使用NX技術的存儲器,表明僅供數據使用,所以處理器的指令集並不能在這些區域存儲。這種技術可防止大多數的緩衝溢出,即一些惡意程序,把自身的惡意指令集放在其餘程序的數據存儲區並運行,從而把整臺計算機控制。

.ide

一、靜態遷移測試

拷貝鏡像文件和虛擬機配置文件;
從新定義此虛擬機。
二、動態遷移ui

建立共享存儲;
兩臺機器掛載共享存儲(手工掛載;使用資源池);
啓動動態遷移;
建立遷移後的虛擬機配置文件;
從新定義虛擬機。centos7

冷遷移呢,比較簡單,能夠理解爲就是在一臺電腦上將虛擬機的配置文件複製到另外一臺電腦上3d

#將虛擬機磁盤文件和配置文件都複製到一臺新設備上
[root@kvm-test ~]# scp /kvm/disk/test1.raw root@192.168.171.10:/kvm/disk/              
[root@kvm-test ~]# scp /etc/libvirt/qemu/test1.xml root@192.168.171.10:/etc/libvirt/qemu/
#在新設備上能夠將配置文件中的UUID上刪除掉
#而後直接在新設備上定義配置文件
[root@kvm2 ~]# virsh define test1.xml
#以後就能夠啓動了

2、kvm虛擬機熱遷移配置實例

環境以下:

hostname IP service
kvm1 192.168.171.151 kvm
kvm2 192.168.171.10 kvm
nfs 192.168.171.152 nfs

若是沒有kvm環境可參考:KVM虛擬化 進行搭建

一、配置NFS共享存儲

[root@nfs ~]# yum -y install nfs-utils rpcbind          # 安裝nfs
[root@nfs ~]# systemctl enable nfs             # 設置爲開機自啓
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# mkdir -p /nfs-share           # 建立須要共享的目錄
[root@nfs ~]# vim /etc/exports
/nfs-share       *(rw,sync,no_root_squash)
#第一列表明共享的目錄
#第二列的星號表明容許全部網絡訪問;
#rw表明讀寫權限;sync表明同步寫入磁盤;
#no_root_squash表示當前客戶機以root身份訪問時賦予本地root權限
#(默認是root_squash,將做爲nfsnobody用戶對待),若不加no_root_squash,
#可能會致使被降權,而沒法進行讀寫(wr)
[root@nfs ~]# systemctl restart rpcbind          # 重啓服務
[root@nfs ~]# systemctl restart nfs       # 重啓服務
[root@nfs ~]# netstat -anput | grep rpc      # 肯定已經啓動
[root@nfs ~]# showmount -e           # 查看本機共享的目錄
Export list for nfs:
/nfs-share *
#設置防火牆規則,測試環境也能夠直接關閉防火牆
[root@nfs ~]# firewall-cmd --add-service=rpc-bind --permanent 
[root@nfs ~]# firewall-cmd --add-service=nfs --permanent 
[root@nfs ~]# firewall-cmd --add-service=mountd --permanent 
[root@nfs ~]# systemctl restart firewalld     #重啓防火牆,使配置生效

我這裏的遷移操做依賴於桌面圖形化環境,命令熱遷移暫時沒研究過。
二、兩臺KVM服務器配置以下(兩臺kvm主機都須要進行下面的配置):
安裝rpcbind軟件包,並啓動rpcbind服務

[root@kvm1 ~]# yum -y install nfs-utils rpcbind
[root@kvm1 ~]# systemctl enable rpcbind
[root@kvm1 ~]# systemctl start rpcbind
[root@kvm1 ~]# showmount -e 192.168.171.152            # 查詢nfs服務器共享的目錄
Export list for 192.168.171.152: 
/nfs-share *
[root@kvm1 ~]# mount -t nfs 192.168.171.152:/nfs-share  /kvm/disk/              # 掛載
[root@kvm1 ~]# df -hT /kvm/disk/
Filesystem                 Type  Size  Used Avail Use% Mounted on
192.168.171.152:/nfs-share nfs4   50G  5.2G   45G  11% /kvm/disk
#在其中一臺服務器上寫入一個測試文件,看看在其餘服務器上是否能夠看到
[root@kvm1 ~]# touch /kvm/disk/test1
[root@kvm2 ~]# ls /kvm/disk/
test1

至此,就保證了兩臺kvm服務器使用的目錄都是同一塊磁盤存儲的(注意:兩臺kvm虛擬機的掛載nfs文件系統的目錄路徑必須一致,我這裏兩臺kvm虛擬機都是掛載到了/kvm/disk/目錄下,不然會在後面的操做中發生錯誤)。
三、在兩個kvm服務器上分別建立存儲卷:

[root@kvm1 ~]# virt-manager              # 打開虛擬機控制檯

KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
下面對話框中,目標路徑是KVM本機的「/kvm/disk」,主機名寫的是nfs服務器的IP地址,源路徑是nfs服務器共享的目錄。
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
以上操做一樣須要在第二臺KVM上進行操做,最好定義的存儲池名字等都一致。以避免發生沒必要要的麻煩。
四、在kvm1上新建一個虛擬機以便進行遷移測試
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
自行上傳一個centos的iso系統文件,這裏須要指定要安裝的iso文件:
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
下來正常安裝便可
KVM 實現虛擬機在線熱遷移
五、將新建的虛擬機網絡配置爲Bridge模式,能夠ping通外網
如下操做主要是爲了模擬虛擬機爲公網用戶提供服務中進行熱遷移。
1)kvm1操做以下:

[root@kvm1 ~]# systemctl stop NetworkManager        # 關閉此服務
[root@kvm1 ~]# virsh iface-bridge ens33 br0         # 執行此命令時,若提示如下信息,不用在乎,由於其已經存在了
Created bridge br0 with attached device ens33
Bridge interface br0 started
[root@kvm1 ~]# ls /etc/sysconfig/network-scripts/ | grep br0      #肯定有此文件
ifcfg-br0
[root@kvm1 ~]# virsh destroy centos7.0 
Domain centos7.0 destroyed
[root@kvm1 ~]# virsh edit centos7.0           # 編輯虛擬機的配置文件,定位到interface
    <interface type='bridge'>          # 定位到interface
      <mac address='52:54:00:3c:45:fb'/>        # 刪除mac 
      <source bridge='br0'/>
      <model type='virtio'/>
[root@kvm1 ~]# virsh start centos7.0         # 啓動

開啓虛擬機後,配置虛擬機的網卡配置文件,默認網卡文件爲ifcfg-eth0:
KVM 實現虛擬機在線熱遷移
重啓網絡服務,而且確認IP地址:
KVM 實現虛擬機在線熱遷移
如今能夠在虛擬機上執行「ping www.baidu.com」 命令,使其持續ping公網。
KVM 實現虛擬機在線熱遷移
2)kvm2操做以下:

[root@kvm2 ~]# systemctl stop NetworkManager
[root@kvm2 ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
Bridge interface br0 started

[root@kvm2 ~]# ls /etc/sysconfig/network-scripts/ | grep br0
ifcfg-br0
#因爲kvm2沒有虛擬機,因此只需將網絡更改成橋接模式便可,。
#以上配置是爲了防止虛擬機遷移到這臺服務器後,沒法和公網進行聯繫。

六、開始準備對新建的centos 7進行熱遷移

[root@kvm1 ~]# virt-manager

KVM 實現虛擬機在線熱遷移
填寫以下,填寫完成後,單擊「鏈接」:
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移

[root@kvm1 ~]# yum -y install openssh-askpass           # 安裝

KVM 實現虛擬機在線熱遷移
根據彈出的對話框提示,輸入「yes」:
KVM 實現虛擬機在線熱遷移
輸入目標主機的密碼
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
七、開始進行熱遷移
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
KVM 實現虛擬機在線熱遷移
遷移完成:
KVM 實現虛擬機在線熱遷移
如今去目標kvm服務器上,打開新遷移過去的虛擬機(會發現ping命令還在繼續,壓根就沒有中斷過):
KVM 實現虛擬機在線熱遷移

相關文章
相關標籤/搜索