1. 程式人生 > >記一次 openstack 雲主機熱遷移失敗與恢復過程

記一次 openstack 雲主機熱遷移失敗與恢復過程

openstack 遷移失敗

背景:最近把openstack上的所有機器的磁盤逐一重新分區,之前是兩塊磁盤用RAID1,但是ceph已經配置了3份副本,這樣相當於存6份副本了,目前磁盤資源不太夠。機器用的是HP P440ar的陣列卡,支持建立不同模式的邏輯卷,所以把磁盤分區修改為RAID1系統盤+RAID0數據盤,磁盤容量和數據盤讀寫速度擴大一倍,而且即使其中一塊磁盤故障了也不影響物理機的運行,而其上的虛擬機是基於ceph網絡存儲的,壞了一個osd也不會影響運行。
故障概括:有一個計算節點的neutron-linuxbridge-agent忘記配置,直接把虛擬機熱遷移到此機器了,結果在最後一步創建網絡接口的時候報錯,虛擬機已經運行了起來,但是網絡不通,把網絡組建配置好之後重啟虛擬機實例也沒有自動創建接口,不知道在哪步出差錯了,也沒去深究具體原因了,這方法也適合其他情況出現遷移(冷或熱)失敗的恢復。
環境:Openstack Mitaka,Ceph Hammer,rbd存儲池名稱 images_rbd_pool = vms
原理:復制原實例系統盤到新的實例中,直接操作ceph底層rbd鏡像
操作過程:
1、新建一個配置與原實例一致的雲主機,把兩個實例關機後,本文是把實例SA的系統盤替換到新建實例SA2上,把實例SA刪除
技術分享圖片
2、查看系統盤狀態,確認已斷開連接
系統盤的名稱默認是實例的"<id>_disk"
rbd ls vms
技術分享圖片

rbd status vms/26bb3815-3cb1-425a-aa96-2dc6fc9fcefe_disk
rbd status vms/278eeaf1-bcdd-42f5-b4d9-bd04f0b2bc6c_disk

技術分享圖片
註:若磁盤處於被掛載狀態是這樣顯示
技術分享圖片
3、把新建實例的系統盤鏡像改名,再把原實例系統盤鏡像名稱改為新實例

rbd mv vms/26bb3815-3cb1-425a-aa96-2dc6fc9fcefe_disk vms/26bb3815-3cb1-425a-aa96-2dc6fc9fcefe_disk_bak
rbd mv vms/278eeaf1-bcdd-42f5-b4d9-bd04f0b2bc6c_disk vms/26bb3815-3cb1-425a-aa96-2dc6fc9fcefe_disk
rbd ls vms

技術分享圖片
4、新建一個空的rbd鏡像作為原實例的系統盤鏡像,防止刪除原雲主機實例時候報錯
技術分享圖片
理論上隨便建一個就可以,刪除的時候應該不會校驗其他信息,為了盡量保持一致就新建一個大小和版本格式一致的:

rbd create --size 40960 --image-format 2 vms/278eeaf1-bcdd-42f5-b4d9-bd04f0b2bc6c_disk
5、在openstack刪除原來的雲主機,啟動新的實例即可,網絡接口方面的配置省略。
總結:以後在做危險操作之前最好先做個快照,有備無患:

rbd snap create vms/278eeaf1-bcdd-42f5-b4d9-bd04f0b2bc6c_disk@snap_20180511
rbd snap protect vms/278eeaf1-bcdd-42f5-b4d9-bd04f0b2bc6c_disk@snap_20180511

即使操作過程中出現不可預計錯誤導致程序執行了刪除操作也可以恢復回去(做快照後不可直接刪除)

記一次 openstack 雲主機熱遷移失敗與恢復過程