2017年5月9日火曜日

さて、ではオンラインマイグレーションに挑戦だ

さて、前回は仮想マシンの定義情報( /etc/libvirt )と、仮想マシンの仮想ディスク領域( /var/lib/libvirt )を2つのノード(gemini / cancer)で共有している状態で、両ノードで同時に仮想マシンを起動する、ということをやった。
結果、起動はしてしまい、ファイルシステムが破損するという致命的な状態になったわけで、現実的には実施不可能という結論に達した。当たり前だが。

今回はこの環境のまま、オンラインマイグレーションに挑戦してみたいと思う。
こちら、既に一度試してみて、おかしな状態になることが分かっているため、ココで記載したバックアップが取られていることを確認しておいて欲しい。

さて、前回のままなら、仮想マシン leo は起動している状態のはずだ。もし停止してしまっていたら、起動しておいて欲しい。

gemini 上で leo が起動しているのが確認できたら、コチラの手順に従って、leo を cancer 上に移行してみて欲しい。どうなるだろうか?

マイグレーションはすんなり実施できたと思う。
が、gemini 配下に定義されていた leo が消えてしまったのではないだろうか?
gemini から leo が消えた

実際に、gemini 上の仮想マシン定義からも、ファイル( leo.xml )が消えてしまっている。
(gemini) $ ls -l /etc/libvirt/qemu
当然、同じ領域を共有している cancer からも、消えてしまっている。
(cancer) $ ls -l /etc/libvirt/qemu

現在は cancer 上で稼働しているが、これを停止させたら、仮想マシン定義が無い以上、leo そのものが消滅してしまうのではないだろうか?
実際に停止させて確認してみよう。
(leo) $ sudo systemctl poweroff
leo の存在は残っている

停止直後はまだ残っているが…。試しにこのまま、virt-manager から leo を起動させてみる。
実行は出来るようだ。
この状態で、cancer の libvirt を再読込みしても、virt-manager 上からは、定義が消えない。
(cancer) $ sudo systemctl reload libvirt-bin

virt-manager から一度、cancer への接続を disconnect してから再 connect しても消えない。
定義ファイルは消失しているのに、定義がメモリ上に残っているのだろうか?
コマンドラインから確認してみよう。
(cancer) $ virsh list --all
残っている。
ただし、恐らくこの状態で cancer をOSごと再起動すると、消えてしまうと思われる。

取り急ぎ、このまま一度、leo を起動し、gemini に戻してみる。
一応、gemini に戻すことは出来た

表示上は「一時停止中」だが、きちんと稼働はしている。
しかし、仮想マシン定義ファイルは存在しないままだ。
(gemini) $ ls -l /etc/libvirt/qemu
(cancer) $ ls -l /etc/libvirt/qemu
(virt-manager から gemini への接続を一旦 disconnect し、再 connect すれば、「実行中」ステータスに変化する。)

leo の定義ファイルが消えてしまった以上、(今 leo が稼働している) gemini を再起動したら、恐らく leo は消失するだろう。
leo を停止させ、gemini を再起動してみよう。
(leo) $ sudo systemctl poweroff
(gemini) $ sudo systemctl reboot

virt-manager から gemini への接続は切れてしまうので、gemini の再起動が完了したら、virt-manager から gemini へ再 connect してみる。
gemini の再起動で leo の存在が消失

leo が消えてしまったのが確認できる。
コマンド上(virsh上)でも、leo の存在が確認できない。
(gemini) $ virsh list --all

一応、仮想ディスクは残っている。
(gemini) $ sudo ls /var/lib/libvirt/images

このような状態では、
  1. gemini のメンテナンスのために、gemini 上の仮想マシンを cancer 上へ移行
  2. gemini をメンテナンスし、再起動
  3. cancer に移行した仮想マシンを gemini に戻す
というオペレーションが出来ないということになる。
これはあまり美味しく無い。どうしたものだろうか?

とりあえず、消失してしまった leo を復旧させることにしよう。
それには、バックアップから定義を読み込み直せばいい。
(gemini) $ sudo lvchange -a y vg-gfs2/backup
(gemini) $ sudo mount /dev/vg-gfs2/backup /mnt/backup
(gemini) $ ls /mnt/backup/leo.xml
(gemini) $ virsh define /mnt/backup/leo.xml
(gemini) $ virsh list --all
(gemini) $ ls -l /etc/libvirt/qemu
(gemini) $ sudo umount /mnt/backup
(gemini) $ sudo lvchange -a n vg-gfs2/backup

cancer 側は libvirt-bin を再読込すればいいだろう。
(cancer) $ sudo systemctl reload libvirt-bin

とりあえず元に戻すことは出来た。
必要なら、leo を起動させて簡単な動作確認をしてみればいい。

今回はここまで。
次回は、virt-manager を使用しての移行時にある、「一時的に移動」ってのを試してみたい。

0 件のコメント:

コメントを投稿