openstack 热迁移(Live Migration)和冷迁移(Cold Migration)
一.遷移分類
1.冷遷移(cold migration),也叫靜態(tài)遷移。
? ? ?在遷移到另外的計算節(jié)點時,這段時間虛擬機實例是處于宕機狀態(tài)的,即關閉電源的虛擬機進行遷移。
? ? ?通過冷遷移,可以選擇將關聯(lián)的磁盤從一個數(shù)據(jù)存儲移動到另一個數(shù)據(jù)存儲,實例需要重啟才能工作。
? ? ?適用于對象系統(tǒng)可用性要求不是很高的時候,遷移過程中會關機, 拷貝 instance 的鏡像文件和重建 libvirt.xml (這個配置文件中會涉及網(wǎng)絡環(huán)境, 存儲設備等配置), 并重新在目標主機上啟動。
優(yōu)點:虛擬機不需要位于共享存儲器上,數(shù)據(jù)丟失率小。
缺點:需要關閉電源,業(yè)務中斷。
2.熱遷移(Live Migration),又叫動態(tài)遷移、實時遷移。
? ? 即虛擬機保存/恢復(Save/Restore):將整個虛擬機的運行狀態(tài)完整保存下來,同時可以快速的恢復到原有硬件平臺甚至是不同硬件平臺上。
恢復以后,虛擬機仍舊平滑運行,用戶不會察覺到任何差異。
? ? 在線遷移 (或 '真正的在線遷移')。實例幾乎沒有宕機時間。用于當實例需要在遷移時保持運行。在線遷移有下面幾種類型:
優(yōu)點:軟件和硬件系統(tǒng)的維護升級,不會影響用戶的關鍵服務,提高了服務的高可用性和?用戶的滿意度。
缺點:過程不可中斷,操作復雜。
二. 虛機遷移場景
場景?1:
物理機器硬件系統(tǒng)的維護,故障修復和升級(upgrade),但運行在這臺物理機器上的虛擬機不能關機,因為用戶重要的服務跑在上面。
場景?2:
物理機器軟件系統(tǒng)升級,打補丁(patch),為了不影響上面跑的虛擬機,在升級和打補丁之前,需要把虛擬機遷移到別的物理機器上。
場景?3:
一個物理機器上的負載太重,需要減少一些虛擬機來釋放資源。
場景?4:
跨域環(huán)境下,有的域里有的物理機上的虛擬機太多,有的域里物理機上虛擬機太少,做一下資源平衡。
三.虛擬機遷移中數(shù)據(jù)處理
虛擬機的遷移,就是數(shù)據(jù)的轉移,如果計算節(jié)點之間沒有共享存儲,所以要轉移的數(shù)據(jù)包括兩部分:
存儲在本地的虛擬機的鏡像文件,包括后端鏡像(libvirt Base)和虛擬機單獨的增量鏡像文件(libvirt instance disks)。
內(nèi)存里虛擬機的運行時數(shù)據(jù),內(nèi)存里的數(shù)據(jù)是動態(tài)變化的數(shù)據(jù),虛擬機里運行的負載的大小直接影響遷移的時間長短。
Qemu一般通過數(shù)據(jù)遷移準備、數(shù)據(jù)遷移、數(shù)據(jù)遷移收尾三個步驟來完成
循環(huán)調(diào)用磁盤和內(nèi)存遷移函數(shù)也是按階段來分別調(diào)用的。
1.數(shù)據(jù)遷移準備:
循環(huán)調(diào)用磁盤和內(nèi)存遷移函數(shù)的遷移數(shù)據(jù)準備功能,即前期準備工作,
2.數(shù)據(jù)遷移:
Qemu在這個階段調(diào)用磁盤和內(nèi)存遷移函數(shù)的第二步驟功能,并且要求必須等磁盤數(shù)據(jù)遷移完成后才會執(zhí)行內(nèi)存數(shù)據(jù)遷移。
如圖所示,Qemu首先會進行磁盤(內(nèi)存)的全量數(shù)據(jù)遷移,依次將每個block(頁)遷移到目標端DestHost。
然后再通過多次迭代,將遷移過程中虛擬機產(chǎn)生的新數(shù)據(jù)遷移到目標端DestHost(如圖所示)。
這一迭代過程是收斂的,收斂依據(jù)與之前設置的帶寬、最大停機時間有關。
同時,在迭代過程中,Qemu將邊遷移邊記錄剩下的臟數(shù)據(jù)大小,并與停機時間進行比較。
如果這個值比停機時間大,那么繼續(xù)遷移,如果比停機時間小,那么源端Qemu進程就會暫停,從而避免產(chǎn)生新的臟數(shù)據(jù),以便進行遷移收尾工作。
3.數(shù)據(jù)遷移收尾:
在虛擬機暫停之后,進入第三步遷移收尾工作,源端Qemu進程會把磁盤、內(nèi)存臟數(shù)據(jù)和設備狀態(tài)一次性同步到目標端,完成時VM和VM’的數(shù)據(jù)將會一致。
這時,上層管理軟件會把VM關閉,并把VM’的vcpu恢復運行狀態(tài),整個虛擬機的數(shù)據(jù)遷移就完成了。
四.虛擬機遷移中存儲
虛擬機的數(shù)據(jù)存在共享磁盤上(Shared storage-based live migration),遷移只需要完成內(nèi)存數(shù)據(jù)的遷移。
虛擬機的數(shù)據(jù)存在本地磁盤(block migration),需要對鏡像文件和內(nèi)存數(shù)據(jù)同時遷移。
五.遷移步驟
5.1 冷遷移步驟
操作記錄
1. 顯示運行的虛機
2.關閉虛機
3.將文件copy到目標主機的對應位置下
4.修改權限
?5.修改數(shù)據(jù)庫中的字段
update instances set host='compute15', node='compute15' where uuid='3483d9f1-4015-48d9-9837-b67ca82dd54d';6.查詢虛機所在的主機
7.啟動虛機
5.1 熱遷移步驟:
1. 遷移前的條件檢查
動態(tài)遷移要成功執(zhí)行,一些條件必須滿足,所以在執(zhí)行遷移前必須做一些條件檢查。
1、權限檢查,執(zhí)行遷移的用戶是否有足夠的權限執(zhí)行動態(tài)遷移。
2、參數(shù)檢查,傳遞給?API?的參數(shù)是否足夠和正確,如是否指定了?block-migrate?參數(shù)。
3、檢查目標物理主機是否存在。
4、檢查被遷移的虛擬機是否是?running?狀態(tài)。
5、檢查源和目的物理主機上的?nova-compute service?是否正常運行。
6、檢查目的物理主機和源物理主機是否是同一臺機器。
7、檢查目的物理主機是否有足夠的內(nèi)存(memory)。
8、檢查目的和源物理主機器?hypervisor?和?hypervisor?的版本是否相同。
2.遷移前的預處理
在真正執(zhí)行遷移前,做一些準備工作
1、在目的物理主機上獲得和準備虛擬機掛載的塊設備(volume)。
2、在目的物理主機上設置虛擬機的網(wǎng)絡(networks)。
3、目的物理主機上設置虛擬機的防火墻(fireware)。
3.遷移過程
條件滿足并且做完了預處理工作后,就可以執(zhí)行動態(tài)遷移了。主要步驟如下:
1、調(diào)用?libvirt python?接口?migrateToURI,來把源主機遷移到目的主機。
2、以一定的時間間隔(0.5)循環(huán)調(diào)用?wait_for_live_migration?方法,來檢測虛擬機遷移 的狀態(tài),一直到虛擬機成功遷移為止。
4.遷移后的處理
當虛擬機遷移完成后,要做一些善后工作。
1、在源物理主機上?detach volume。
2、在源物理主機上釋放?security group ingress rule。
3、在目的物理主機上更新數(shù)據(jù)庫里虛擬機的狀態(tài)。
4、在源物理主機上刪除虛擬機。
上面四步正常完成后,虛擬機就成功的從源物理主機成功地遷移到了目的物理主機了。
操作記錄
1.熱遷移需要libvirt遠程登錄和傳輸,所以開啟libvirt的TCP連接方式
virsh -c qemu+tcp://172.171.8.14/system例如:qemu+tcp://172.16.0.15/system,服務端只需要配置。
修改/etc/libvirt/libvirtd.conf:listen_tls = 0 listen_tcp = 1 tcp_port = "16509" listen_addr = "0.0.0.0"auth_tcp = "none"?2.修改libvirtd的配置文件/etc/default/libvirtd:
# Start libvirtd to handle qemu/kvm:start_libvirtd="yes"# options passed to libvirtd, add "-l" to listen on tcplibvirtd_opts="-d -l --config /etc/libvirt/libvirtd.conf"3.以上修改后,執(zhí)行
service libvirt-bin restartnetstat -anpt | grep libvirt可以看到libvirtd監(jiān)聽在TCP 16509端口。
4.配置nova.conf
計算節(jié)點的/etc/nova/nova.conf文件中添加如下的內(nèi)容,使得compute服務支持熱遷移。
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE5.重啟nova-compute
service nova-compute restart6.修改用戶組
查看目標主機的用戶組信息
id nova7.?修改所有計算節(jié)點為相同的用戶組id。
usermod -u *** novausermod -u *** libvirt-qemugroupmod -g *** novagroupmod -g *** kvm? 8.openstack遷移命令
查看所有實例
nova list9.查看需要遷移虛擬機實例
nova show [實例id]10.查看可用的計算節(jié)點
nova-manage service list?11.查看目標節(jié)點資源
nova-manage service describe_resource computer112.開始遷移,正常無任何回顯
nova live-migration [實例id] [計算節(jié)點]?操作記錄
1.查看虛擬機
2.查看虛擬機所在計算節(jié)點
3.遷移
4.查看遷移后的虛擬機所在節(jié)點
5.在遷移過程中,dashboard中會出現(xiàn)正在遷移的任務
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的openstack 热迁移(Live Migration)和冷迁移(Cold Migration)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一篇文章让你了解灾备指标:RPO与RTO
- 下一篇: centos7安装minikube