2022/04/20追記
このページに記載しているのはOpenStack Pike(16番目のリリース)ぐらいまでの話です。
それ以降のOpenStackについては関わっていないので不明です。
OpenStackで仮想インスタンスを動かしている場合に、物理サーバ間を移動させる手法について、いまいちまとまっているものがなかったので、メモ。
・物理サーバを指定して仮想インスタンスを起動
→ 不可能
アベイラビリティーゾーン(availability-zone)というサーバをまとめたグループ(雑な表現)を指定して起動することまでしかできない
・仮想インスタンスを稼働中に物理サーバを移動させる
→ 可能
例えば起動ディスクを含めcinderボリュームを使っている場合、下記コマンドで実施できる
# openstack server migrate --live 移動先ComputeNode --block-migration 仮想インスタンスUUID --wait
なぜか「migrate」と「migration」の2つの単語が混じっている、という不親切なつくりなので、惑わされないこと。
上記だと、移動が終わるまでコマンドが終了しない。「–wait」を抜いた場合、下記の様な形でマイグレーションの進捗状況を確認することが出来る
# openstack server migrate --live 移動先ComputeNode --block-migration 仮想インスタンスUUID
# nova server-migration-list
# nova server-mgirationshow 仮想インスタンスUUID マイグレーション番号
「openstack sevrer show 仮想インスタンスUUID」では進捗のパーセンテージのみ確認可能。
それに対して、「nova server-mgirationshow 仮想インスタンスUUID マイグレーション番号」では、全体で何バイト転送する必要があり、現在何バイト転送が終了しているか、といった詳細を確認することができる。
参考資料
nova Migrate instances
nova Live-migrate instances
・止まってる物理サーバ上にあった仮想インスタンスを他の物理サーバで起動させる
→ nova evacuateコマンドで可能
# nova evacuate 仮想インスタンスUUID 移動先ComputeNode
nova evacuateは、元々起動していた物理サーバ上の「nova-compute」と通信が取れない場合に実行できる。
nova-computeと通信が取れる状態だとエラーになる・・・無理矢理実行したいのであれば、該当サーバ上のnova-computeを落とせばできなくもない。
参考資料
nova Evacuate instances
nova Recover from a failed compute node
・ERRORステータスになっててmigrateが出来ない
「nova reset-state 仮想インスタンスUUID」を実行することで、ステータスがリセットできる。