這篇文章將為大家詳細(xì)講解有關(guān)如何進(jìn)行Live Migrate 操作,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
創(chuàng)新互聯(lián)是專業(yè)的吉陽網(wǎng)站建設(shè)公司,吉陽接單;提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行吉陽網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
Migrate 操作會先將 instance 停掉,也就是所謂的“冷遷移”。而 Live Migrate 是“熱遷移”,也叫“在線遷移”,instance不會停機(jī)。
Live Migrate 分兩種:
源和目標(biāo)節(jié)點沒有共享存儲,instance 在遷移的時候需要將其鏡像文件從源節(jié)點傳到目標(biāo)節(jié)點,這叫做 Block Migration(塊遷移)
源和目標(biāo)節(jié)點共享存儲,instance 的鏡像文件不需要遷移,只需要將 instance 的狀態(tài)遷移到目標(biāo)節(jié)點。
源和目標(biāo)節(jié)點需要滿足一些條件才能支持 Live Migration:
源和目標(biāo)節(jié)點的 CPU 類型要一致。
源和目標(biāo)節(jié)點的 Libvirt 版本要一致。
源和目標(biāo)節(jié)點能相互識別對方的主機(jī)名稱,比如可以在 /etc/hosts 中加入對方的條目。
在源和目標(biāo)節(jié)點的 /etc/nova/nova.conf 中指明在線遷移時使用 TCP 協(xié)議。
Instance 使用 config driver 保存其 metadata。在 Block Migration 過程中,該 config driver 也需要遷移到目標(biāo)節(jié)點。由于目前 libvirt 只支持遷移 vfat 類型的 config driver,所以必須在 /etc/nova/nova.conf 中明確指明 launch instance 時創(chuàng)建 vfat 類型的 config driver。
源和目標(biāo)節(jié)點的 Libvirt TCP 遠(yuǎn)程監(jiān)聽服務(wù)得打開,需要在下面兩個配置文件中做一點配置。
/etc/default/libvirt-bin
start_libvirtd="yes" libvirtd_opts="-d -l"
/etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
unix_sock_group = "libvirtd"
unix_sock_ro_perms = "0777"
unix_sock_rw_perms = "0770"
auth_unix_ro = "none"
auth_unix_rw = "none"
auth_tcp = "none"
然后重啟 Libvirtd 服務(wù)
service libvirt-bin restart
我們先討論非共享存儲的 Block Migration。流程如下:
客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向API(nova-api)發(fā)送請求:“幫我將這個 Instance 從節(jié)點 A Live Migrate 到節(jié)點 B”
這里源節(jié)點是 devstack-compute1,目標(biāo)節(jié)點是 devstack-controller,因為是非共享存儲,記得將“Block Migration”勾選上。
這里還有一個“Disk Over Commit”選項,如果勾選了此選項,nova 在檢查目標(biāo)節(jié)點的磁盤空間是否足夠時,是以 instance 磁盤鏡像文件定義的最大容量為準(zhǔn);否則,以磁盤鏡像文件當(dāng)前的實際大小為準(zhǔn)。
查看日志 /opt/stack/logs/n-api.log
nova-api 發(fā)送消息
nova-api 向 Messaging(RabbitMQ)發(fā)送了一條消息:“Live Migrate 這個 Instance” 源代碼在 /opt/stack/nova/nova/compute/api.py,方法是 live_migrate。
源和目標(biāo)節(jié)點執(zhí)行 Live Migrate 的操作過程如下:
目標(biāo)節(jié)點執(zhí)行遷移前的準(zhǔn)備工作,首先將 instance 的數(shù)據(jù)遷移過來,主要包括鏡像文件、虛擬網(wǎng)絡(luò)等資源,日志在 devstack-controller:/opt/stack/logs/n-cpu.log
源節(jié)點啟動遷移操作,暫停 instance
在目標(biāo)節(jié)點上 Resume instance
在源節(jié)點上執(zhí)行遷移的后處理工作,刪除 instance
在目標(biāo)節(jié)點上執(zhí)行遷移的后處理工作,創(chuàng)建 XML,在 Hypervisor 中定義 instance,使之下次能夠正常啟動。
Instance 在 Live Migrate 的整個過程中不會停機(jī),我們通過 Ping 操作來觀察
可見在遷移過程中,Ping 進(jìn)程沒有中斷,只是有一個 ping 包的延遲增加了。
下面我們再來看源和目標(biāo)節(jié)點共享存儲下的 Live Migrate。
有多種方式可以實現(xiàn)共享存儲,比如可以將 instance 的鏡像文件放在 NFS 服務(wù)器上,或者使用 NAS 服務(wù)器,或者分布式文件系統(tǒng)。
作為學(xué)習(xí)和實驗,這里我們采用 NFS 方案。其他共享存儲方案對于 Live Migration 本質(zhì)上是一樣的,只是在性能和高可用性上更好。
將 devstack-controller 作為 NFS 服務(wù)器,共享其目錄 /opt/stack/data/nova/instances。 devstack-compute1 作為 NFS 客戶端將此目錄 mount 到本機(jī),如下所示:
這樣,OpenStack 的 instance 在 devstack-controller 和 devstack-compute1 上就實現(xiàn)共享存儲了。
共享存儲的遷移過程與 Block Migrate 基本上一樣,只是幾個環(huán)節(jié)有點區(qū)別:
向 nova-api 提交請求的時候,不能勾選“Block Migrate”
因為源和目標(biāo)節(jié)點都能直接訪問 instance 的鏡像,所以目標(biāo)節(jié)點在準(zhǔn)備階段不需要傳輸鏡像文件,源節(jié)點在遷移后處理階段也無需刪除 instance 的目錄。
只有 instance 的狀態(tài)需要從源節(jié)點傳輸?shù)降哪繕?biāo)節(jié)點,整個遷移速遞比 Block Migration 快很多。
關(guān)于如何進(jìn)行Live Migrate 操作就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。