2017年5月9日火曜日

オンラインマイグレーションの「一時的に移動」

仮想マシンの定義情報( /etc/libvirt )まで共有した状態だと、ライブマイグレーションがちょっと想定外の挙動を示すことが前回分かった。

これは内部的に、以下のような流れのためだろう。
  1. gemini 上の leo を一時停止
  2. leo のメモリ空間に内容を cancer 上にコピー
  3. gemini 上の leo の定義を、cancer 上にコピー
  4. cancer 上で、leo の一時停止を解除(再開)
  5. gemini 上の leo の定義を削除。(共有しているため、cancer 上も削除される。ただし、cancer の libvirt の内部情報としては持っている状態)
この、最後のステップで削除されてしまっていると考えられる。

他に方法は無いか?ということで、virt-manager を使用した移行処理の時、「一時的に移動」というオプションがあることに気付いた。
もしかしてコレじゃないか?ということで、今回試してみようと思う。

leo が停止していたら、起動しておこう。( gemini 上で起動しておく。)

leo の起動が確認できたら、前回までと同様、cancer へ移行を行う。
但し、以下の画面で「一時的に移動」をチェックしておく。
「一時的に移動」にチェックを入れる

結果、どうなっただろうか?
どうやら、見た目上はすんなり移動したようだ。gemini / cancer 両方とも、定義が消えたような感じには見えない。
すんなり移動した。定義も消えてないように見える。

じゃぁ、マシン上の定義はどうなっているかな?
(gemini) $ ls -l /etc/libvirt/qemu
(cancer) $ ls -l /etc/libvirt/qemu
残っている。

仮想マシンの稼働状況は…
(gemini) $ virsh list --all
(cancer) $ virsh list --all
gemini 上は「シャットオフ」、cancer 上は「実行中」だ。
期待した通りの動きをしてくれた!

leo の再起動して何か変化があるか?(あるはず無いのだが…)
(leo) $ sudo systemctl reboot
(gemini) $ virsh list --all
(cancer) $ virsh list --all
変化なし。

じゃぁこの状態で gemini を再起動すると?
(gemini) $ sudo systemctl reboot
(gemini) $ virsh list --all
(cancer) $ virsh list --all
変化なし。

virt-manager を使って、leo を gemini に戻して(「一時的に移動」して)みても…。
問題なしだ。

「一時的に移動」というオプションフラグは、仮想マシン定義ファイルの移動処理は行わず、libvirt が内部で抱えている仮想マシン情報のみを移動させる、ということか。

これは使えるな。というか、狙っていた挙動そのものだ。
今後、こちら(「一時的に移動」オプションをOn」を使うようにしよう。

0 件のコメント:

コメントを投稿