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