天天看點

計算節點當機了怎麼辦?- 每天5分鐘玩轉 OpenStack(43)向 nova-api 發送請求nova-api 發送消息nova-scheduler 執行排程nova-scheduler 發送消息nova-compute 執行操作

Rebuild 可以恢複損壞的 instance。

那如果是主控端壞了怎麼辦呢? 比如硬體故障或者斷電造成整台計算節點無法工作,該節點上運作的 instance 如何恢複呢?

用 Shelve 或者 Migrate 可不可以? 很不幸,這兩個操作都要求 instance 所在計算節點的 nova-compute 服務正常運作。 幸運的是,還有 Evacuate 操作。

Evacuate 可在 nova-compute 無法工作的情況下将節點上的 instance 遷移到其他計算節點上。但有個前提: Instance 的鏡像檔案必須放在共享存儲上。

下面是 Evacuate instance 的流程圖

向 nova-api 發送請求

nova-api 發送消息

nova-scheduler 執行排程

nova-scheduler 發送消息

nova-compute 執行操作

下面我們詳細讨論每一個步驟。

我們的實驗場景如下: Instance c2 運作在 devstack-compute1 上。

通過斷電模拟計算節點故障,然後執行 Evacuate 操作恢複 instance c2。 目前 Evacuate 隻能通過 CLI 執行。

這裡需要指定 --on-shared-storage 這個參數

檢視日志 /opt/stack/logs/n-api.log

nova-api 向 Messaging(RabbitMQ)發送了一條消息:“Evacuate 這個 Instance” 檢視源代碼 /opt/stack/nova/nova/compute/api.py,方法是 evacuate。

大家注意到沒有,evacuate 實際上是通過 rebuild 操作實作的。 這是可以了解的,因為 evacuate 是用共享存儲上 instance 的鏡像檔案重新建立虛機

nova-scheduler 收到消息後,會為 instance 選擇合适的計算節點。 檢視日志 /opt/stack/logs/n-sch.log。

nova-scheduler 最後選擇在 devstack-controller 計算節點上重建 instance。

nova-scheduler 發送消息,通知計算節點可以建立 instance 了。 源代碼在 /opt/stack/nova/nova/scheduler/filter_scheduler.py 第 95 行,方法為 select_destinations。

計算節點上的工作是用共享存儲上的鏡像檔案重建 instance。 日志在 devstack-controller:/opt/stack/logs/n-cpu.log。

為instance配置設定資源

使用共享存儲上的鏡像檔案

啟動 instance

Evacuate 操作完成後,instance 在 devstack-controller 上運作。

以上是 Evacuate 操作的詳細分析。

至此,我們已經學習完 Nova 所有的操作,下一節将用一張圖總結這些操作的用途和使用場景。

本文轉自CloudMan6 51CTO部落格,原文連結:http://blog.51cto.com/cloudman/1786423

繼續閱讀