OpenStack恢復(fù)“消失”的虛擬機(jī)

今天需要對(duì)實(shí)驗(yàn)室 OpenStack 環(huán)境中一臺(tái)虛擬機(jī)做實(shí)例快照,但是從 horizon 界面和 novaclient 都無法操作,錯(cuò)誤提示:無法獲取該實(shí)例的詳情。參考上一篇博客,因?yàn)檫@臺(tái)虛擬機(jī)在數(shù)據(jù)庫(kù)中的記錄被刪除了,我稱之為“消失”的虛擬機(jī)。最后我通過向數(shù)據(jù)庫(kù)中插入該虛擬機(jī)的信息,“找回”了這臺(tái)虛擬機(jī),使得此虛擬機(jī)可以重新正常使用。特此記錄。

前情回顧

之前誤刪了很多 nova_api 數(shù)據(jù)庫(kù)里 instance_mappings 里的 instance,導(dǎo)致很多虛擬機(jī)在 horizon 界面上無法操作。提示如下:

recovery0.png

究其原因,說來話長(zhǎng)。

簡(jiǎn)單來說,OpenStack 目前采用了 cell_v2 架構(gòu)來管理不同集群的虛擬機(jī)。

(關(guān)于 cell 的知識(shí)參考http://www.itdecent.cn/p/653e43a02ddc

cell 的相關(guān)數(shù)據(jù)表在 nova_api 數(shù)據(jù)庫(kù)中,三個(gè)數(shù)據(jù)表的關(guān)系如下圖:

recovery1.png

當(dāng)想要獲取一個(gè)機(jī)器的詳細(xì)信息時(shí) :

1.nova-api 先從 instance_mappings 表拿到 instance 的 cell_id

2.再?gòu)?cell_mappings 表拿到所在 cell 的 DB connection

3.直接連接 cell 的 DB 拿到機(jī)器的詳細(xì)信息

之前說虛擬機(jī)“消失”了,是因?yàn)樵?nova_apiinstance_mappings 表中刪除了該虛擬機(jī)的記錄,導(dǎo)致 nova-api 在響應(yīng)對(duì)虛擬機(jī)的操作請(qǐng)求時(shí),在上述第一步就出現(xiàn)了問題。雖然這臺(tái)虛擬機(jī)的記錄依然存在于nova數(shù)據(jù)庫(kù)的相關(guān)表中,但目前已是不可用狀態(tài)。

要讓這臺(tái)虛擬機(jī)恢復(fù)正常,變得“可操作”,必須從源頭解決問題,即恢復(fù)該虛擬機(jī)在 instance_mappings 表中的記錄。

操作過程

要在 instance_mappings 表中插入虛擬機(jī)記錄,先看一下 instance_mappings 表:

recovery2.png

需要插入三個(gè)數(shù)據(jù),instance_uuidcell_id、project_id。

我們已經(jīng)知道了虛擬機(jī)的 instance_uuid ,從錯(cuò)誤提示里復(fù)制過來就行 359c8002-301c-4306-8d6b-d0a743cdcf38 ,從 nova 數(shù)據(jù)庫(kù)的 instances 表里獲得 project_id

recovery3.png

nova_api 數(shù)據(jù)庫(kù)的 cell_mappings 表中查看 cell_id

recovery4.png

id為7。

最后,在 nova_api 數(shù)據(jù)庫(kù)的 instance_mappings 表中插入記錄:

recovery5.png

好了,懷著忐忑的心情,去 horizon 上操作一下,可以操作了。不出所料,恢復(fù)“消失”的虛擬機(jī)成功了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容