博文大綱:linux
1、KVM虛擬機遷移的方式 2、實現KVM虛擬機靜態遷移 3、實現KVM虛擬機動態遷移
1、KVM虛擬機遷移的方式
KVM平臺中的KVM虛擬機遷移分爲如下兩種:centos
(1)冷遷移(靜態遷移)
咱們存放虛擬機磁盤的目錄都是掛在的一個nfs文件系統的磁盤,進行冷遷移時,只要在目標主機上掛載這個nfs文件系統,就能夠看到要遷移的那個虛擬機的磁盤文件,一般以.qcow2或.raw結尾的,而後,只需將虛擬機的.xml配置文件發送到目標服務器上,而後從新定義一下遷移過來的虛擬機便可!
服務器
(2)熱遷移(動態遷移)
若是源宿主機和目的宿主機共享存儲系統,則只須要經過網絡發送客戶機的 vCPU 執行狀態、內存中的內容、虛機設備的狀態到目的主機上。不然,還須要將客戶機的磁盤存儲發到目的主機上。共享存儲系統指的是源和目的虛機的鏡像文件目錄是在一個共享的存儲上的。
網絡
基於共享存儲系統,動態遷移的具體過程:
(1)遷移開始時,客戶端依然在宿主機上運行,與此同時,客戶機的內存頁被傳輸到目的主機上;
(2)QEMU/KVM 會監控並記錄下遷移過程當中全部已被傳輸的內存頁的任何修改,並在全部內存頁都傳輸完成後即開始傳輸在前面過程當中內存頁的更改內容;
(3)QEMU/KVM 會估計遷移過程當中的傳輸速度,當剩餘的內存數據量可以在一個能夠設定的時間週期(默認 30 毫秒)內傳輸完成時,QEMU/KVM 會關閉源宿主機上的客戶機,再將剩餘的數據量傳輸到目的主機上,最後傳輸過來的內存內容在目的宿主機上恢復客戶機的運行狀態;
(4)至此,KVM的動態遷移操做完成!遷移後的客戶機儘量與遷移前一致,除非目的主機上缺乏一些配置,好比網橋等。注意,當客戶機中內存使用率很是大並且修改頻繁時,內存中數據不斷被修改的速度大於KVM可以傳輸的內存速度時,動態遷移的過程是完成不了的,這時候只能靜態遷移。
ssh
(3)注意事項ide
(1)遷移的服務器CPU品牌最好一致; (2)64位只能在64位宿主機間遷移,32位能夠遷移32位和64位宿主機; (3)宿主機中的虛擬機名字不能衝突; (4)目的宿主機和源宿主機軟件配置儘量相同;
(4)總結工具
**靜態遷移:** (1)複製鏡像文件和虛擬機配置文件; (2)從新定義虛擬機便可! **動態遷移:** (1)建立共享存儲; (2)兩臺KVM宿主機掛載共享存儲; (3)啓動動態遷移; (4)建立遷移後的虛擬配置文件; (5)從新定義虛擬機;
2、實現KVM虛擬機靜態遷移
(1)環境要求centos7
* 一臺KVM服務求A:IP地址:192.168.45.134 * 一臺KVM服務器B:IP地址:192.168.35.137
(2)實現步驟spa
KVM服務器A的操做:3d
[root@KVM1 ~]# systemctl stop firewalld.service [root@KVM1 ~]# setenforce 0 [root@KVM1 ~]# lsmod | grep kvm //確認虛擬機支持kvm環境 kvm_intel 170181 3 kvm 554609 1 kvm_intel irqbypass 13503 3 kvm [root@KVM1 ~]# virsh list --all Id Name State ---------------------------------------------------- - test01 shut off
KVM服務器B的操做:
[root@KVM2 ~]# systemctl stop firewalld.service [root@KVM2 ~]# setenforce 0 [root@KVM2 ~]# lsmod | grep kvm //確認虛擬機支持kvm環境 kvm_intel 170181 0 kvm 554609 1 kvm_intel irqbypass 13503 1 kvm [root@KVM2 ~]# virsh list --all //肯定當前沒有KVM虛擬機 Id Name State ---------------------------------------------------- [root@KVM2 ~]# scp 192.168.45.134:/etc/libvirt/qemu/test01.xml /etc/libvirt/qemu //複製KVMA的配置文件 The authenticity of host '192.168.45.134 (192.168.45.134)' can't be established. ECDSA key fingerprint is d7:77:71:90:34:25:c0:ec:e0:b6:5c:cc:6b:44:93:7b. Are you sure you want to continue connecting (yes/no)? yes //肯定 Warning: Permanently added '192.168.45.134' (ECDSA) to the list of known hosts. root@192.168.45.134's password: //密碼爲KVMA主機的密碼 test01.xml 100% 3822 3.7KB/s 00:00 [root@KVM2 ~]# scp 192.168.45.134:/kvm-vm/test01.raw /kvm-vm/ root@192.168.45.134's password: //密碼爲KVMA主機的密碼 test01.raw 100% 10GB 83.3MB/s 02:03
[root@KVM2 ~]# ls /kvm-vm/ test01.raw virtual-kvm.qcow2 [root@KVM2 ~]# ls /etc/libvirt/qemu networks test01.xmltest [root@KVM2 ~]# cd /etc/libvirt/qemu/ [root@KVM2 qemu]# virsh define test01.xml 定義域 test01(從 test01.xml) //根據配置文件生成虛擬機 Domain test01 defined from test01.xml [root@KVM2 qemu]# virsh list --all Id Name State ---------------------------------------------------- - test01 shut off [root@KVM2 qemu]# virsh start test01 //開啓虛擬機 Domain test01 started [root@KVM2 qemu]# virsh list --all Id Name State ---------------------------------------------------- 1 test01 running 注:正常啓動表示正常,請自行配置
靜態遷移遷移完成!
靜態遷移其實沒什麼好說的,說白了,跟克隆其實差很少!
也就是說把配置文件和磁盤文件複製到KVMB上應用啓動一下就完事了!
3、實現KVM虛擬機動態遷移
(1)環境要求
一臺NFS服務器:IP地址:192.168.45.130.; 一臺KVM服務器A:IP地址:192.168.45.134; 一臺KVM服務器B:IP地址:192.168.45.137;
(2)實現步驟
NFS服務器的操做:
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 //實驗環境,簡單起見關閉防火牆與SElinux [root@localhost ~]# yum -y install nfs-utils rpcbind 注意:兩臺KVM都須要安裝NFS //安裝NFS所需軟件 [root@localhost ~]# mkdir /kvmshare //建立共享目錄 [root@localhost ~]# echo "/kvmshare (rw,sync,norootsquash)" >> /etc/exports //配置共享目錄的權限,共享的用戶 //norootsquash:使其獲取NFS服務器的root權限 [root@localhost ~]# systemctl start rpcbind //啓動遠程傳輸控制服務 [root@localhost ~]# systemctl start nfs //啓動NFS共享服務 [root@KVM1 ~]# showmount -e 192.168.45.130 Export list for 192.168.45.130: /kvmshare *
兩臺KVM進行驗證:
[root@KVM1 ~]# showmount -e 192.168.45.130 Export list for 192.168.45.130: /kvmshare * [root@KVM2 ~]# showmount -e 192.168.45.130 Export list for 192.168.45.130: /kvmshare *
KVM服務器A的操做:
[root@KVM1 ~]# virt-manager //打開圖形化界面管理KVM
接下來建立虛擬機,如圖:
虛擬機重啓完成以後,將其關機,配置其爲橋接網絡,方法以下:
[root@KVM1 ~]# virsh destroy centos7.0 //強制關機這樣比較快 Domain centos7.0 destroyed [root@KVM1 ~]# virsh list --all Id Name State ---------------------------------------------------- - centos7.0 shut off - test01 shut off [root@KVM1 ~]# systemctl stop NetworkManager //關閉網絡管理工具 [root@KVM1 ~]# virsh iface-bridge ens33 br0 //經過ens33生成br0 [root@KVM1 ~]# virsh edit centos7.0 //使用「edit」命令編輯虛擬機的配置文件 定位到interface,修改一下內容: <interface type='bridge'> 修改成bridge <mac address='52:54:00:ef:a3:93'/> <source bridge='br0'/> 修改成 bridge='br0' [root@KVM1 ~]# virsh start centos7.0 //啓動centos7虛擬機 [root@KVM1 ~]# virsh list --all Id Name State ---------------------------------------------------- 5 centos7.0 running
KVM服務器B的操做:
[root@KVM2 ~]# virt-manager
建立存儲池,跟KVM服務器A的操做如出一轍,如圖:
生成橋接網卡br0,便於一會進行熱遷移操做,操做以下:
[root@KVM2 ~]# systemctl stop NetworkManager [root@KVM2 ~]# virsh iface-bridge ens33 br0 注:記得更改兩臺KVM主機名,避免兩臺主機名相同容易起衝突
KVM服務器A進行如下操做:
若是出現如下錯誤,如圖:
那是由於沒有安裝使用SSH協議鏈接所需的詢問密碼的軟件包!
接下來的操做須要在兩臺KVM都進行操做:
[root@KVM1 ~]# yum -y install openssh-askpass [root@KVM2 ~]# yum -y install openssh-askpass //安裝詢問密碼的依賴包,注意兩臺KVM服務器都需安裝
接下來進行熱遷移操做,如圖:
注:兩邊KVM服務器能夠互相遷移本身的虛擬機:
遷移完成後,就會發現centos7虛擬機移到了KVM服務器B上了
查看KVM虛擬機的訪問是否存在終端現象,如圖: