kvm冷熱狀態遷移

KVM遷移

靜態遷移(冷遷移)
對於靜態遷移,你可以在宿主機上保存一個完成的客戶機鏡像快照,然後在宿主機中關閉或者暫停該客戶機,然後將客戶機的鏡像文件複製到另一臺宿主機中,使用在源主機中啓動該客戶機時的命令來啓動複製過來的鏡像。

動態遷移(熱遷移)
如果宿主機和目的宿主機共享存儲系統,則只需要通過網絡發送客戶機的vCPU執行狀態,內存中的內容,虛機設備的狀態到目的主機上。共享存系統指的時源和目的虛機的鏡像文件目錄是在一個共享的存儲上的。

在基於共享存儲系統時,KVM動態遷移的具體過程爲:

  • 1、遷移開始時,客戶機依然在宿主機上運行,與此同時,客戶機的內存頁被傳輸到目的主機上。
  • 2、QEMU/KVM 會監控並記錄下遷移過程中所有已被傳輸的內存頁的任何修改,並在所有內存頁都傳輸完成後即開始傳輸在前面過程中內存頁的更改內容。
  • 3、QEMU/KVM 會估計遷移過程中的傳輸速度,當剩餘的內存數據量能夠在一個可以設定的時間週期(默認 30 毫秒)內傳輸完成時,QEMU/KVM 會關閉源宿主機上的客戶機,再將剩餘的數據量傳輸到目的主機上,最後傳輸過來的內存內容在目的宿主機上恢復客戶機的運行狀態。
  • 4、至此,KVM 的動態遷移操作就完成了。遷移後的客戶機儘可能與遷移前一致,除非目的主機上缺少一些配置,比如網橋等。

    注意,當客戶機中內存使用率非常大而且修改頻繁時,內存中數據不斷被修改的速度大於KVM能夠傳輸的內存速度時,動態遷移的過程是完成不了的,這時候只能靜態遷移。

遷移注意事項:
1、最好遷移的服務器cpu品牌一樣
2、64位只能在64位宿主機間遷移,32位可以遷移32位和64位宿主機
3、宿主機中的虛擬機名字不能衝突
4、目的宿主機和源宿主機軟件配置儘可能的相同,如 有相同的橋接網卡,資源池等。
5、兩臺遷移的主機 cat /proc/cpuinfo |grep nx 的設置是相同的.

一,靜態遷移

環境描述:

主機名 IP地址 操作系統
kvm01 172.16.1.30 centos7
kvm02 172.16.1.40 centos7

1,準備工作
1)在kvm01和kvm02主機上安裝kvm

環境要求:
1、如果是物理服務器,需要在BIOS中打開虛擬化功能(Virtualization Technology),一般的服務器默認是打開這個功能的。
2、如果是用VMware Workstation做實驗,建立的虛擬機的CPU要勾選虛擬化功能,這樣虛擬機纔會支持KVM虛擬化

#驗證cpu是否支持虛擬化:
kvm冷熱狀態遷移

#安裝虛擬化軟件:
[root@kvm01 ~]# yum -y install qemu-kvm qemu-kvm-tools qemu-img libvirt virt-install virt-manager  bridge-utils

各工具包的作用:

qemu-kvm  //KVM核心模塊
qemu-kvm-tools //KVM調試工具,可選擇性安裝
qemu-img  //創建,轉換和修改鏡像,能處理被qemu支持的所有鏡像格式
libvirt //管理虛擬機的工具包
virt-install  //libvirt庫構建新虛擬機的命令行工具
virt-manager //圖形化界面管理虛擬機
 bridge-utils //配置linux以太網橋

#如果是最小化安裝,則還需要安裝GNOME桌面環境 yum -y groupinstall "GNOME 桌面" .

 #啓動libvirtd工具:
 [root@kvm01 ~]# systemctl start libvirtd
[root@kvm01 ~]# systemctl status libvirtd

kvm冷熱狀態遷移
kvm02主機操作與上邊相同。

2)創建一個虛擬機(那就創建kvm01主機上)

#創建存放磁盤文件和centos鏡像的目錄:
[root@kvm01 ~]# mkdir /kvm-vm
[root@kvm01 ~]# mkdir /iso
[root@kvm01 ~]# ls /iso/
CentOS-7-x86_64-DVD-1708.iso    #上傳centos鏡像

#kvm命令行安裝:

[root@kvm01 ~]# virt-install --os-type=linux --os-variant centos7.0 --name web01 --ram 1024 --vcpus 1 --disk /kvm-vm/web01.qcow2,format=qcow2,size=10 --location /iso/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

Starting install...
Retrieving file .treeinfo...                                                       |  354 B  00:00:00     
Retrieving file vmlinuz...                                                         | 5.6 MB  00:00:00     
Retrieving file initrd.img...                                                      |  46 MB  00:00:00     
Allocating 'web01.qcow2'                                                           |  10 GB  00:00:00     
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.

參數解釋:

通過virt-install命令創建新虛擬機並進行安裝
 --os-type= linux  #系統類型爲linux
 --os-variant=  #指定操作系統版本   
 --name  #指定虛擬機名稱
 --ram   #以MB爲單位爲客戶端事件分配的內存
 --vcpus  #配置虛擬機的虛擬CPU(vcpu)數量
 --disk   #指定虛擬機的存儲位置,磁盤文件的格式及大小(單位GB)
 --location  #選擇安裝源
 --network   #配置客戶網絡接口
 --graphics #配置虛擬機顯示設置(vnc)
 listen=0.0.0.0  #表示所有網段都可以連接該虛擬機
 --noautoconsole #不管是否部署成功,執行完都會退出,如果不加的話,將會一直卡在終端

安裝成功後,在命令行輸入virt-manager打開kvm圖形化管理界面,如下所示:
kvm冷熱狀態遷移
點擊進入安裝centos系統。安裝完成後,查看虛擬機的一個狀態:

[root@kvm01 ~]# virsh list --all
 Id    Name                           State
---------------------------------------------------- 
 -     web01                          shut off     #安裝完成後,默認保持關閉狀態

配置kvm虛擬機爲橋接網絡(使其能夠訪問外網):

#關閉宿主機的網絡控制檯:
[root@kvm01 ~]# systemctl stop NetworkManager
#在宿主機上創建br0(橋接網卡):
[root@kvm01 ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
Bridge interface br0 started
#修改實例的配置文件:
[root@kvm01 ~]# virsh edit web01 
     69     <interface type='bridge'>    #修改網卡類型爲橋接
     70       <mac address='52:54:00:dc:0f:d0'/>
     71       <source bridge='br0'/>   #指定橋接網卡

#啓動實例:
[root@kvm01 ~]# virsh start web01 
Domain web01 started

[root@kvm01 ~]# virsh list 
 Id    Name                           State
----------------------------------------------------
 2     web01                          running

配置web01主機的網絡配置信息,並測試ping通外網:
kvm冷熱狀態遷移

2,靜態遷移
靜態遷移主要分爲兩個步驟:
1)拷貝鏡像文件和虛擬機配置文件
2)重新定義此虛擬機

1)關閉或掛起虛擬機:
[root@kvm01 ~]# virsh shutdown web01 
Domain web01 is being shutdown
[root@kvm01 ~]# virsh list 
 Id    Name                           State
----------------------------------------------------

2)拷貝鏡像文件和配置文件至kvm02主機:
#在拷貝之前先準備好kvm02主機上的環境,省得待會再去修改配置文件對應的參數(麻煩)。

[root@kvm02 ~]# mkdir /kvm-vm   //創建對應的鏡像文件目錄
[root@kvm02 ~]# systemctl stop NetworkManager  
[root@kvm02 ~]# virsh iface-bridge ens33 br0   //創建橋接網卡
Created bridge br0 with attached device ens33
Bridge interface br0 started
#拷貝:
[root@kvm01 ~]# scp /kvm-vm/web01.qcow2 172.16.1.40:/kvm-vm/
[root@kvm01 ~]# scp /etc/libvirt/qemu/web01.xml  172.16.1.40:/etc/libvirt/qemu/

3)在kvm02主機上定義該虛擬機:

[root@kvm02 ~]# virsh define /etc/libvirt/qemu/web01.xml 
Domain web01 defined from /etc/libvirt/qemu/web01.xml

#啓動虛擬機:
[root@kvm02 ~]# virsh start web01 
Domain web01 started

[root@kvm02 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     web01                          running

[root@kvm02 ~]# 

成功完成靜遷移。。。

二,動態遷移(熱遷移)

動態遷移主要分爲5個步驟:
1,創建共享存儲
2,兩臺機器掛載共享存儲(手動掛載;使用資源池)
3,啓動動態遷移
4,創建遷移後的虛擬機配置文件
5,重新定義虛擬機

環境描述:

主機名 IP地址 操作系統
nfs 172.16.1. 10 centos7
kvm01 172.16.1.30 centos7
kvm02 172.16.1.40 centos7
1)第一步,關閉所有主機的selinux(一定要關)及防火牆;
[root@kvm01 ~]# vim /etc/selinux/config
SELINUX=disabled
[root@kvm01 ~]# reboot  #重啓生效

[root@kvm01 ~]# systemctl stop firewalld     

注意:不要使用setenforce 0(臨時關閉),否則遷移時還會報錯。

2)部署nfs(在nfs服務器上)

[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# vim /etc/exports
/nfs-share 172.16.1.0/24(rw,sync,no_root_squash)
[root@nfs ~]# mkdir /nfs-share
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server

#kvm01和kvm02測試是否能夠進行遠程掛載

[root@kvm01 ~]# showmount -e 172.16.1.10
Export list for 172.16.1.10:
/nfs-share 172.16.1.0/24
[root@kvm02 ~]# showmount -e 172.16.1.10
Export list for 172.16.1.10:
/nfs-share 172.16.1.0/24

3)設置主機名,/etc/hosts 互相解析,以及兩臺kvm主機配置免密登錄

[root@kvm01 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.10 nfs
172.16.1.30 kvm01
172.16.1.40 kvm02
#拷貝給其他主機:
[root@kvm01 ~]# for i in 10 40; do scp /etc/hosts 172.16.1.$i:/etc/; done
#配置免密登錄:
[root@kvm01 ~]# ssh-keygen -t rsa
[root@kvm01 ~]# ssh-copy-id kvm02
[root@kvm01 ~]# ssh kvm02 hostname
kvm02

4)兩個kvm主機進行掛載共享存儲:

#需要將kvm01上的鏡像文件,拷貝至nfs的共享目錄中:
[root@kvm01 ~]# scp /kvm-vm/web01.qcow2  nfs:/nfs-share
[root@nfs ~]# ls /nfs-share/
web01.qcow2
kvm01:  
[root@kvm01 ~]# vim /etc/fstab    
//添加以下內容:
172.16.1.10:/nfs-share          /kvm-vm                 nfs     defaults        0 0
[root@kvm01 ~]# mount -a     //重新加載
[root@kvm01 ~]# ls /kvm-vm/
web01.qcow2

kvm02:
[root@kvm02 ~]# mkdir /kvm-vm
[root@kvm02 ~]# vim /etc/fstab
172.16.1.10:/nfs-share          /kvm-vm                 nfs     defaults        0 0
[root@kvm02 ~]# mount -a
[root@kvm02 ~]# ls /kvm-vm/
web01.qcow2
#創建橋接網絡:
[root@kvm02 ~]# systemctl stop NetworkManager
[root@kvm02 ~]# virsh iface-bridge ens33 br0 
Created bridge br0 with attached device ens33
Bridge interface br0 started

4)進行動態遷移:
#在動態遷移之前,模擬web01虛擬機正常工作中:
kvm冷熱狀態遷移

kvm提供了遷移工具migrate:
[root@kvm01 ~]# virsh migrate --live --unsafe --verbose web01 qemu+ssh://172.16.1.40/system
Migration: [100 %]     #遷移成功

參數解釋:

--live #熱遷移
--unsafe #即使不安全也要強制遷移
--verbose #顯示遷移過程
web01則表示當前的域名(虛擬機),後邊則指向目標主機的地址。

#遷移成功後,在kvm02主機上查看虛擬機狀態:

[root@kvm02 ~]# virsh list 
 Id    Name                           State
----------------------------------------------------
 2     web01                          running

可以看到虛擬機的狀態爲運行狀態。

#登錄虛擬機,查看工作狀態是否不間斷:
kvm冷熱狀態遷移

可以看到通過熱遷移,虛擬機會一直保持工作,並不會丟失數據,並且QEMU/KVM 會關閉源宿主機上的客戶機,再將剩餘的數據量傳輸到目的主機上。至此,遷移目標已經實現了。

在生產環境中,接下來我們可以選擇一個合適的時間來重新定義虛擬機:

#將虛擬機的配置文件拷貝至新機上(或自己創建配置文件):
[root@kvm01 ~]# scp /etc/libvirt/qemu/web01.xml kvm02:/etc/libvirt/qemu/
web01.xml                                                               100% 4047     4.0KB/s   00:00   
[root@kvm02 ~]# ls /etc/libvirt/qemu  #在web02上查看
networks  web01.xml
#重新定義虛擬機:
[root@kvm02 ~]# virsh shutdown web01 
Domain web01 is being shutdown

[root@kvm02 ~]# virsh define /etc/libvirt/qemu/web01.xml 
Domain web01 defined from /etc/libvirt/qemu/web01.xml

[root@kvm02 ~]# virsh start web01   #啓動虛擬機
Domain web01 started

[root@kvm02 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     web01                          running    

[root@kvm02 ~]# 

至此,熱遷移工作結束。。

常見錯誤:

1、遷移時遇到的錯誤描述:
# virsh migrate centos --live qemu+ssh://192.168.30.132/system
error: unable to connect to server at 'KVM-2:49152': No route to host    
原因:你的免密登錄沒有成功
解決方法:重新做免密登錄即可
2、遷移時的存儲錯誤:
# virsh migrate centos --live qemu+ssh://192.168.30.132/system
 error: Failed to open file '/mnt/CentOS6.8.qcow2': Input/output error
  原因:存儲沒有掛載成功
  解決方法:mount -o remount /dev/sdb /mnt
3、遷移時FQDN錯誤:
# virsh migrate centos --live qemu+ssh://192.168.30.132/system
 error: internal error hostname on destination resolved to localhost, but migration requires an FQDN
  原因:兩臺宿主機無法解析主機名
  解決方法:重新配置主機名和ip的解析
4、遷移時語法錯誤:
# virsh migrate centos --live qemu+ssh://192.168.30.132:/system
error: internal error Unable to parse URI qemu+ssh://192.168.30.132:/system
  原因:qemu+ssh語法寫錯了
  解決方法:正確的應該是:virsh migrate centos --live qemu+ssh://192.168.30.132/system
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章