Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)
Migrate 操作的作用是將 instance 從當(dāng)前的計(jì)算節(jié)點(diǎn)遷移到其他節(jié)點(diǎn)上。
Migrate 不要求源和目標(biāo)節(jié)點(diǎn)必須共享存儲(chǔ),當(dāng)然共享存儲(chǔ)也是可以的。 Migrate 前必須滿足一個(gè)條件:計(jì)算節(jié)點(diǎn)間需要配置 nova 用戶無密碼訪問。
下面是 Migrate instance 的流程圖
向 nova-api 發(fā)送請(qǐng)求
nova-api 發(fā)送消息
nova-scheduler 執(zhí)行調(diào)度
nova-scheduler 發(fā)送消息
nova-compute 執(zhí)行操作
下面我們?cè)敿?xì)討論每一個(gè)步驟。
向 nova-api 發(fā)送請(qǐng)求
客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 API(nova-api)發(fā)送請(qǐng)求:“幫我遷移這個(gè) Instance” Migrate 操作是特權(quán)操作,只能在 Admin 的 instance 菜單中執(zhí)行
查看日志 /opt/stack/logs/n-api.log
nova-api 發(fā)送消息
nova-api 向 Messaging(RabbitMQ)發(fā)送了一條消息:“遷移這個(gè) Instance” 查看源代碼 /opt/stack/nova/nova/compute/api.py,方法是 resize。 沒錯(cuò),是 resize 而非 migrate。
這是由于 migrate 實(shí)際上是通過 resize 操作實(shí)現(xiàn)的,至于為什么要這樣設(shè)計(jì),我們會(huì)在下一節(jié) resize 中詳細(xì)分析。
nova-scheduler 執(zhí)行調(diào)度
nova-scheduler 收到消息后,會(huì)為 instance 選擇合適的目標(biāo)計(jì)算節(jié)點(diǎn)。 查看日志 /opt/stack/logs/n-sch.log
可以看到,因?yàn)?devstack-compute1 的權(quán)值比 devstack-controller 大,最終選擇 devstack-compute1 作為目標(biāo)節(jié)點(diǎn)。
看到上面的日志,大家發(fā)現(xiàn)什么問題沒有?
在分析這段日志的時(shí)候,我發(fā)現(xiàn) scheduler 選出來的計(jì)算節(jié)點(diǎn)有可能是當(dāng)前節(jié)點(diǎn)源節(jié)點(diǎn)! 因?yàn)?scheduler 并沒在初始的時(shí)候?qū)⒃垂?jié)點(diǎn)剔除掉,而是與其他節(jié)點(diǎn)放在一起做 filter,按照這個(gè)邏輯,只要源節(jié)點(diǎn)的權(quán)值足夠大,是有可能成為目標(biāo)節(jié)點(diǎn)的。
那緊接著的問題是:如果源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)是同一個(gè),migrate 操作會(huì)怎樣進(jìn)行呢?
實(shí)驗(yàn)得知,nova-compute 在做 migrate 的時(shí)候會(huì)檢查目標(biāo)節(jié)點(diǎn),如果發(fā)現(xiàn)目標(biāo)節(jié)點(diǎn)與源節(jié)點(diǎn)相同,會(huì)拋出 UnableToMigrateToSelf 異常。Nova-compute 失敗之后,scheduler 會(huì)重新調(diào)度,由于有 RetryFilter,會(huì)將之前選擇的源節(jié)點(diǎn)過濾掉,這樣就能選到不同的計(jì)算節(jié)點(diǎn)了。 關(guān)于 RetryFilter,大家還有印象嗎?如果生疏了可以看前面章節(jié)。
好,言歸正傳。在上面的操作中 sheduler 選擇的目標(biāo)節(jié)點(diǎn)是 devstack-compute1,意味著 instance 將從 devstack-controller 遷移到 devstack-compute1。
nova-scheduler 發(fā)送消息
nova-scheduler 發(fā)送消息,通知計(jì)算節(jié)點(diǎn)可以遷移 instance 了。 源代碼在 /opt/stack/nova/nova/scheduler/filter_scheduler.py 第 95 行,方法為 select_destinations
nova-compute 執(zhí)行操作
nova-compute 會(huì)在源計(jì)算節(jié)點(diǎn)和目標(biāo)計(jì)算節(jié)點(diǎn)上分別執(zhí)行操作。
源計(jì)算節(jié)點(diǎn) devstack-controller
遷移操作在源節(jié)點(diǎn)上首先會(huì)關(guān)閉 instance,然后將 instance 的鏡像文件傳到目標(biāo)節(jié)點(diǎn)上。 日志在 /opt/stack/logs/n-cpu.log,具體步驟如下:
開始 migrate
在目標(biāo)節(jié)點(diǎn)上創(chuàng)建 instance 的目錄
nova-compute 首先會(huì)嘗試通過 ssh 在目標(biāo)節(jié)點(diǎn)上的 instance 目錄里 touch 一個(gè)臨時(shí)文件,日志如下
如果 touch 失敗,說明目標(biāo)節(jié)點(diǎn)上還沒有該 instance 的目錄,也就是說,源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)沒有共享存儲(chǔ)。那么接下來就要在目標(biāo)節(jié)點(diǎn)上創(chuàng)建 instance 的目錄,日志如下
關(guān)閉 instance
將 instance 的鏡像文件通過 scp 傳到目標(biāo)節(jié)點(diǎn)上
目標(biāo)計(jì)算節(jié)點(diǎn) devstack-compute1
在目標(biāo)節(jié)點(diǎn)上啟動(dòng) instance,過程與 launch instance 非常類似。 會(huì)經(jīng)過如下幾個(gè)步驟: 1. 為 instance 準(zhǔn)備 CPU、內(nèi)存和磁盤資源 2. 創(chuàng)建 instance 鏡像文件 3. 創(chuàng)建 instance 的 XML 定義文件 4. 創(chuàng)建虛擬網(wǎng)絡(luò)并啟動(dòng) instance
日志記錄在 /opt/stack/logs/n-cpu.log,分析留給大家練習(xí)。
Confirm
這時(shí),instance 會(huì)處于 “Confirm or Revert Resize/Migrate”狀態(tài),需要用戶確認(rèn)或者回退當(dāng)前的遷移操作,實(shí)際上給了用戶一個(gè)反悔的機(jī)會(huì)。
當(dāng)我們按下 Confirm 按鈕后,會(huì)發(fā)生如下事情:
nova-api 接收到 confirm 的消息
源計(jì)算節(jié)點(diǎn)刪除 instance 的目錄,并在 Hypervisor 上刪除 instance。
目標(biāo)計(jì)算節(jié)點(diǎn)不需要做任何事情
Revert
如果執(zhí)行的是 Revert 操作會(huì)發(fā)生什么事情呢?
nova-api 接收到 revert 的消息
在目標(biāo)計(jì)算節(jié)點(diǎn)上關(guān)閉 instance,刪除 instance 的目錄,并在 Hypervisor 上刪除 instance。
源計(jì)算節(jié)點(diǎn)上啟動(dòng) instance 因?yàn)橹斑w移的時(shí)候只是在源節(jié)點(diǎn)上關(guān)閉了該 instance,revert 操作只需重新啟動(dòng) instance。
以上是 Migrate 操作的完整流程,這里有一點(diǎn)需要特別注意: 遷移過程中源和目標(biāo)節(jié)點(diǎn)之前需要使用 ssh 和 scp,為了使操作順利進(jìn)行,必須要保證 nova-compute 進(jìn)程的啟動(dòng)用戶(通常是 nova,也可能是 root,可以通過 ps 命令確認(rèn))能夠在計(jì)算節(jié)點(diǎn)之間無密碼訪問。否則 nova-compute 會(huì)等待密碼輸入,但后臺(tái)服務(wù)是無法輸入密碼的,遷移操作會(huì)一直卡在那里。
以上是 Migrate 操作的詳細(xì)分析,下一節(jié)我們討論 Resize。
轉(zhuǎn)載于:https://www.cnblogs.com/CloudMan6/p/5538599.html
總結(jié)
以上是生活随笔為你收集整理的Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非定常三维NS方程有限元的matlab实
- 下一篇: 柱坐标系下的流体力学控制方程组的微分形式