OpenStack中實例的在線遷移

參考文檔:
http://www.sebastien-han.fr/blog/2012/07/12/openstack-block-migration/
http://docs.openstack.org/trunk/openstack-compute/admin/content/configuring-live-migrations.html

OpenStack在線遷移的類型

OpenStack有兩種在線遷移類型:live migration和block migration。Live migration需要實例保存在共享存儲中,否則會報錯,這種遷移主要是實例的內存狀態的遷移,速度應該會很快。Block migration除了實例內存狀態要遷移外,還得遷移磁盤文件,速度會慢些,但是它不要求實例存儲在共享文件系統中。這裏我所進行的是block migration。這兩種遷移方式在nova client都通過命令nova live-migration實現。帶參數--block_migrate表示後一種,不帶表示前一種。要進行該操作需要用戶在實例所在的tenant有admin角色。

修復BUG

要實現block migration首先得修復這個bug,方法在這裏,或者實例採用沒有設置Root Disk和Ephemeral Disk大小的flavor。我查看了源文件在nova-2012.1.2中這個bug已經修復,但是我我進行的仍然是後一種。

修改配置

主要是修改nova和libvirt的配置,讓nova的vncserver監聽0.0.0.0而不是計算節點的內部ip,讓libvirt監聽tcp,注意這裏的關於修改libvirt配置的命令是針對CentOS的,Ubuntu等的修改請參照參考文檔。命令如下:


sed -i 's/vncserver_listen.*/vncserver_listen=0.0.0.0/' /etc/nova/nova.conf
sed -i -e 's/#listen_tls/listen_tls/' -e 's/#listen_tcp = 1/listen_tcp = 1\nauth_tcp = "none"/' /etc/libvirt/libvirtd.conf
sed -i 's/#LIBVIRTD_ARGS/LIBVIRTD_ARGS/' /etc/sysconfig/libvirtd
service libvirtd restart

注意事項

修改vncserver_listen後創建的實例才能遷移
在我的實驗中,哪怕我手動修改實例的libvirt.xml文件,將vnc的監聽ip改爲0.0.0.0並重啓nova-compute且讓實例也重啓仍然失敗了。遷移過程中我看到在目的計算節點上已經創建了實例的相關文件,但是很快又被刪除了,沒有任何報錯,實例仍然在源計算節點運行,狀態從migrating恢復爲active。
如果實例有掛載volume一定要先卸載再遷移
這點更重要,我對掛載有volume的實例進行遷移,結果一直處於mirating狀態,所掛載的卷也處於migrating狀態,通過Virual Machine Manager觀察實例在源計算節點和目的計算節點的狀態都爲paused。我嘗試重啓兩個節點的nova-compute服務,並配置讓實例跟隨重啓。結果源節點報Domain not found錯,且在Virual Machine Manager觀察到實例被刪除,但實例文件還在,服務也因報錯啓動失敗。目的節點實例啓動成功,且能識別掛載的卷,但是文件中缺少libvirt.xml文件,且不受OpenStack管理了,通過客戶端查詢實例信息,顯示的信息爲實例仍在源節點上,狀態爲正在遷移。嘗試手動修改數據庫使狀態一致沒有成功。
實例遷移過程會有短暫的無法聯通情況
遷移過程我用ping命令測試,在遷移快完成的時候丟失了5個包,多次測試一樣。
會在目的節點_base文件夾下創建額外的鏡像文件
儘管我的目的節點_base下已經有了創建該實例所需要的鏡像文件,但仍然會創建新的鏡像文件,新文件文件名只是多加了個"_11",大小一樣,如果直接使用已有的鏡像不創建新就好了,當然如果已經有這個帶後綴"_11"的文件存在就不會再創建了。

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

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