上一節我們 shelve instance 到 Glance,本節讨論如何通過 unshelve 操作恢複該 instance。
因為 Glance 中儲存了 instance 的 image,unshelve 的過程其實就是通過該 image launch 一個新的 instance,nova-scheduler 也會排程合适的計算節點來建立該 instance。
instance unshelve 後可能運作在與 shelve 之前不同的計算節點上,但 instance 的其他屬性(比如 flavor,IP 等)不會改變。
下面是 Unshelve instance 的流程圖
向 nova-api 發送請求
nova-api 發送消息
nova-scheduler 執行排程
nova-scheduler 發送消息
nova-compute 執行操作
下面我們詳細讨論每一個步驟。
客戶(可以是 OpenStack 最終使用者,也可以是其他程式)向 API(nova-api)發送請求:“幫我 Unshelve 這個 Instance”
檢視日志 /opt/stack/logs/n-api.log
nova-api 向 Messaging(RabbitMQ)發送了一條消息:“unshelve 這個 Instance”
檢視源代碼 /opt/stack/nova/nova/compute/api.py,方法是 unshelve。
nova-scheduler 收到消息後,會為 instance 選擇合适的計算節點。
檢視日志 /opt/stack/logs/n-sch.log
經過篩選,最終 devstack-controller 被選中 launch instance。
nova-scheduler 發送消息,告訴被選中的計算節點可以 launch instance 了
源代碼在 /opt/stack/nova/nova/scheduler/filter_scheduler.py 第 95 行,方法為 select_destinations
nova-compute 執行 unshelve 的過程與 launch instance 非常類似。
一樣會經過如下幾個步驟:
1. 為 instance 準備 CPU、記憶體和磁盤資源
2. 建立 instance 鏡像檔案
3. 建立 instance 的 XML 定義檔案
4. 建立虛拟網絡并啟動 instance
日志記錄在 /opt/stack/logs/n-cpu.log,分析留給大家練習。
以上就是 Unshelve 操作的分析,下一節我們讨論 Migrate 操作。
本文轉自CloudMan6 51CTO部落格,原文連結:http://blog.51cto.com/cloudman/1783688