Migrate 操做的做用是將instance 從當前的計算節點遷移到其餘的計算節點上。
Migrate 不要求源節點和目標節點共享存儲,固然共享存儲也是能夠的。
Migrate 前必須知足一個條件:計算節點間須要配置 nova 用戶無密碼訪問。
Migrate 實現過程以下:
一、nova-api 發送Migrate 消息,告知有一個Migrate的請求(使用的是resize方法,詳見後面章節) n-api.log
二、nova-scheduler 執行調度,選擇最合適的計算節點。有可能會選中源計算節點,這時會拋出一個 UnableToMigrateToSelf 異常,因爲又RetryFilter,nova-scheduler 會從新調度,並且從新調度的時候會先過濾掉源計算節點,這樣就能Migrate到其餘計算節點上了。 n-sch.log
三、nova-scheduler發送消息到Messaging,告知能夠進行Migrate了
四、nova-compute 先會經過ssh 在目標節點上的instance 目錄中touch一個文件,來判斷使用的是不是共享存儲
五、若是上面是共享存儲省略磁盤文件傳輸過程,若是不是共享存儲須要在目標節點上建立instance目錄
六、關閉instance
七、將磁盤文件傳輸到目標計算節點
八、在目標節點上啓動instance,過程和 launch instance相似
九、Web UI 上會提示 Confirm Or Revert Resize / Migrate ,用戶能夠選擇確認或者回退
十、若是用戶選擇確認,會在源節點上執行刪除instance操做
十一、若是用戶選擇回退,會啓動源節點上的instance ,並刪除目標節點上的instance
注意:遷移過程當中源和目標節點以前會使用ssh和scp,爲了使操做順利進行,必需要保證nova-compute 進程的啓動用戶(一般是nova,也多是root)能都在計算節點間無密碼訪問。不然nova-compute 會等待密碼輸入,但後臺服務沒有地方輸入密碼,而後遷移操做就會卡在那裏。