Nova Suspend/Rescue 操作詳解 - 每天5分鍾玩轉 OpenStack(35)


本節我們討論 Suspend/Resume 和 Rescue/Unrescue 這兩組操作。

Suspend/Resume

有時需要長時間暫停 instance,可以通過 Suspend 操作將 instance 的狀態保存到宿主機的磁盤上。當需要恢復的時候,執行 Resume 操作,從磁盤讀回 instance 的狀態,使之繼續運行。

這里需要對 Suspend 和 Pause 操作做個比較:

相同點
兩者都是暫停 instance 的運行,並保存當前狀態,之后可以通過 Resume 操作恢復

不同點
1. Suspend 將 instance 的狀態保存在磁盤上;Pause 是保存在內存中,所以 Resume 被 Pause 的 instance 要比 Suspend 快。 2. Suspend 之后的 instance,其狀態是 Shut Down;而被 Pause 的 instance 狀態是Paused。 3. 雖然都是通過 Resume 操作恢復,Pause 對應的 Resume 在 OpenStack 內部被叫作 “Unpause”;Suspend 對應的 Resume 才是真正的 “Resume”。這個在日志中能體現出來。

Suspend/Resume 的日志分析留給大家做練習。

Rescue/Unrescue

從這節開始,我們將討論幾種 instance 故障恢復的方法,不同方法適用於不同的場景。 首先我們考慮操作系統故障。

有時候由於誤操作或者突然斷電,操作系統重啟后卻起不來了。 為了最大限度挽救數據,我們通常會使用一張系統盤將系統引導起來,然后在嘗試恢復。 問題如果不太嚴重,完全可以通過這種方式讓系統重新正常工作。 比如某個系統文件意外刪除, root 密碼遺忘等

Nova 也提供了這種故障恢復機制,叫做 Rescue。 我們來看看 rescue 的說明:

Rescue 用指定的 image 作為啟動盤引導 instance,將 instance 本身的系統盤作為第二個磁盤掛載到操作系統上。

下面是 rescue instance 的流程圖

image180.png

  1. 向 nova-api 發送請求

  2. nova-api 發送消息

  3. nova-compute 執行操作

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

向 nova-api 發送請求

目前 Rescue 操作只能通過 CLI 執行

這里我們沒有指明用哪個 image 作為引導盤,nova 將使用 instance 部署時使用的 image

查看日志 /opt/stack/logs/n-api.log

nova-api 發送消息

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

nova-compute執行操作

查看日志 /opt/stack/logs/n-cpu.log

關閉 instance

通過 image 創建新的引導盤,命名為 disk.rescue

啟動 instance

Rescue 執行成功后,可以通過 virsh edit <instance_name> 查看 instance 的 XML 定義,disk.rescue 作為啟動盤 vda,真正的啟動盤 disk 作為第二個磁盤 vdb。

登錄 instance,通過 fdisk 也可確認。

此時,instance 處於 Rescue 狀態

Rescue 操作讓我們有機會修復損壞的操作系統。 修好之后,使用 Unrescue 操作從原啟動盤重新引導 instance。

Unrescue 的日志分析留給大家練習。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM