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 的設定是相同的
NX,全名為“No eXecute”,即“禁止執行”,是應用在CPU的一種技術,用作把儲存器 區域分隔為只供儲存處理器指令集,或只供資料使用。
任何使用NX技術的儲存器,代表僅供資料使 用,因此處理器的指令集並不能在這些區域儲存。這種技術可防止大多數的緩衝溢位攻擊,即一些 惡意程式,把自身的惡意指令集放在其他程式的資料儲存區並執行,從而把整臺計算機控制。
五、靜態遷移
1.安裝虛擬化所需要的環境
1 2 3 4 5 6 7 8 |
yum install qemu qemu-img qemu-kvm libvirt libvirt-python libguestfs-tools virt- install 安裝虛擬化程式(如果伺服器存在虛擬化環境則不要安裝)
grep -e vmx /proc/cpuinfo 檢查是否能支援虛擬化
mkdir /kvm-vm/ 建立虛擬機器磁碟檔案目錄
mkdir /kvm-vm/nspool
pool-define-as nfspool netfs -- source -host 192.174.1.11 -- source -path /mnt/nfs --target /kvm-vm/nspool/ 設定儲存池
pool-build nfspool
pool-start nfspool
pool-autostart nfspool
|
2.拷貝映象檔案和虛擬機器配置檔案 (我是基於nfs做的所以只需要拷貝虛擬機器配置檔案即可)
1 |
scp /etc/libvirt/qemu/test1 .xml 192.174.1.5: /etc/libvirt/qemu/
|
3.重新定義此虛擬機器
1 |
define /etc/libvirt/qemu/test1 .xml
|
4.啟動虛擬驗證
六、動態遷移:
1.建立共享儲存
2.兩臺機器掛載共享儲存(手工掛載;使用資源池)
3.啟動動態遷移
4.建立遷移後的虛擬機器配置檔案
5.重新定義虛擬機器
案例實施步驟如下:‘
1、設定主機名、/etc/hosts 互相解析,保證網路連線
1 2 |
vim /etc/hosts
scp /etc/hosts 192.174.1.5: /etc/
|
2、兩臺主機的KVM連線NFS共享儲存 (如果不會可以檢視上篇文章kvm儲存池或者檢視靜態遷移中有步驟)
3、在源主機的KVM中新建虛擬機器並安裝作業系統
4、連線KVM,並進行遷移。’
1 |
migrate test3 qemu+ ssh : //192 .174.1.5 /system --live --unsafe --verbose
|
5.檢視驗證
源主機 (遷移主機test關閉)
遷移主機
七、virsh migrate命令幫助
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# virsh migrate --help
[--domain] <string> 域名, id 或 uuid
[--desturi] <string> 客戶端(常規遷移)或者源(p2p 遷移)中看到到目的地主機連線 URI
--live 熱遷移
--offline 離線遷移
--p2p 點對點遷移
--direct 直接遷移
--tunnelled 管道遷移
--persistent 目的地中的持久 VM
--undefinesource 在源中取消定義 VM
--suspend 部啟用目的地主機中的域
--copy-storage-all 使用全磁碟複製的非共享儲存進行遷移
--copy-storage-inc 使用增值複製(源和目的地共享同一基礎映像)的非共享儲存進行遷移
--change-protection 遷移結束前不得對域進行任何配置更改
--unsafe 即使不安全也要強制遷移
--verbose 顯示遷移程序
--compressed 實時遷移過程中壓縮重複的頁
--auto-converge force convergence during live migration
--rdma-pin-all support memory pinning during RDMA live migration
--abort-on-error 在遷移過程中忽略軟錯誤
--migrateuri <string> 遷移 URI, 通常可省略
--graphicsuri <string> 無空隙圖形遷移中使用的圖形 URI
--listen-address <string> listen address that destination should bind to for incoming migration
--dname <string> 在遷移過長中重新命名為一個新名稱(如果支援)
--timeout <number> 如果 live 遷移超時(以秒計)則強制虛擬機器掛起
--xml <string> 包含為目標更新的 XML 的檔名
--migrate-disks <string> comma separated list of disks to be migrated
|
八、 常見錯誤:
1、遷移時遇到的錯誤描述:
1 2 |
# virsh migrate centos live qemu+ssh://192.168.30.132/system
error: unable to connect to server at 'KVM2:49152' : No route to host
|
原因:你的免密登入沒有成功
解決方法:重新做免密登入即可
2、遷移時的儲存錯誤:
1 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錯誤:
1 2 |
# 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.遷移時語法錯誤:
1 2 |
# 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