OpenStack手動從數據庫中刪除實例

由於某種原因我將OpenStack的一個計算節點移除了,但移除前並沒有刪除在其上運行的實例,後來想通過dash刪除這些實例,於是N天過去了,我的dash還顯示如下內容:

很礙眼是不是?於是我打算手動從數據庫中刪除它們!

1.數據庫中與刪除實例相關的表

數據庫中與刪除實例相關的表如下:

fixed_ips記錄給實例分配的fixed ip,floating_ips顯然與實例分配的floating ip有關,但我在實驗中一直沒有使用過floating故不作評斷,instance_actions我這裏是空的不管,instance_faults記錄與實例有關的錯誤不管,instance_info_caches與實例的網絡設置緩存有關,instance_metadata實例的元數據有關不管,instance_type_extra_specs與instance_types與flavor設置有關不管,instances顯然是實例的主表,volumes與實例的volumes有關。我的實驗中沒有floating ip也沒有volumes故我只關注fixed_ips,instance_info_caches,instances三個表。

2.OpenStack的刪除策略

通過觀察發現Nova中的表中基本都有如下字段:

OpenStack在刪除對象時並不刪除數據庫中的記錄,只是修改deleted_at和deleted字段。

3.操作數據庫

刪除實例的操作主要集中在instances,instance_info_caches,fixed_ips三個表。

3.1操作instances表
下圖是我的數據庫中曾經刪除了的test3(右邊)與現在無法刪除的test3(左邊)的對比:

因此我的操作如下:

update instances set 
deleted_at = updated_at, 
deleted = 1, 
power_state = 0, 
vm_state = "deleted", 
terminated_at = updated_at, 
root_device_name = NULL, 
task_state = NULL 
where id = 9;

3.2操作instance_info_caches和fixed_ips

這兩個操作簡單,在前一步操作後已經在dash中看不到被刪除的實例了,這兩步操作主要是釋放被刪除實例所佔用的網絡資源,直接上代碼:

update instance_info_caches set 
deleted_at = updated_at, 
deleted = 1 
where id = 9;

update fixed_ips set 
instance_id = NULL, 
allocated = 0, 
virtual_interface_id = NULL 
where id = 7;

OK,如法炮製又刪除了另一個實例,總算在dash中不用看那兩個討厭的實例了。


北方工業大學 | 雲計算研究中心 | 姜永

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章