Linuxカーネルに組み込まれている仮想マシン環境として注目されている「Linux KVM」ですが、動作中の仮想マシンを別のホストに無停止で移動させる「ライブマイグレーション」もサポートされています。本稿では、2台のLinux KVMホストを使ったライブマイグレーション環境の構築方法について解説します。Linux KVM環境の基本的な構築方法は『実践!仮想化ソフトウェア 2009』の第5回『Linux KVMを使ってみよう』を参照してください。
構築する環境について
仮想マシンホスト
ライブマイグレーションは2台の仮想マシンホストの間を仮想マシンが行ったり来たりするので、最低2台の仮想マシンホストが必要になります。Linux KVMはCPUの仮想化支援機能が必要となるので、サポートされている物理マシンを2台用意する必要があります。
ストレージ
ライブマイグレーションは仮想マシンホスト間を行き来するため、仮想マシンのシステムやデータを保存している仮想ディスクの置き場所として、ローカルストレージは基本的に使用できません。できれば、仮想マシンホストとは別のストレージに格納されているのが望ましいでしょう。その場合、ホスト2台とストレージ1台の3台構成が基本構成となります。
ただし今回は、3台も用意するのが大変という方のために、2台構成でのライブマイグレーション環境を構築します。1台をNFSサーバとして稼働させ、ファイルをもう一方にNFS共有させることで、擬似的にストレージ共有を行っているように見せかける方法を行います。
使用するOS
今回は仮想マシンマネージャー(virt-manager)の機能を使用して環境を構築するため、Linux KVMがサポートされたCentOS 5.4を使用しています。
Linux KVM環境の構築
用意した2台のマシンにLinux KVM環境を構築します。基本的な構築方法は別記事の通りですが、以下のような設定を行っています。
- ①IPアドレスは固定で設定
- ②お互いに名前解決が行えるように/etc/hostsにIPアドレスとホスト名を記述
仮想マシンの作成
仮想マシンの作成は、片方のマシン上で行います。今回の環境では、ホストkvm1上に仮想マシンを作成しました。
デフォルト状態では、仮想マシンからのネットワークは外部に対してNAT接続になっています。ライブマイグレーションを行いたいような仮想マシンは、ほとんどがサーバ的に活用することを想定しているでしょうから、あらかじめブリッジ接続へと変更しておくとよいでしょう。
仮想ディスクをNFS共有可能にする
ホストkvm1で仮想マシンを作成すると、仮想マシンの使用している仮想ディスクは/var/lib/libvirt/imagesディレクトリに作成されます。このディレクトリを、もう一方の仮想マシンホストからNFS共有で共有可能にします。
①/etc/exportsを記述
/etc/exportsに共有の設定を記述します。
この設定は検証用のため、セキュリティの面ではかなり甘い設定になっています。実際には、もう少し厳しい設定の適用が必要です。
仮想ディスクファイルへのアクセスにはroot権限が必要となるため、ユーザrootでのアクセスを置き換えないno_root_squashオプションの設定が必要となります。
②NFSサーバを起動
NFSサーバを起動します。また、システムの起動時にNFSサーバが自動的に起動するように設定しておきます。
仮想マシンマネージャーで別ホストに接続
ライブマイグレーション先となるもう一方の仮想マシンホストに、仮想マシンマネージャーで接続します。
- ①「ファイル」メニュー→「接続を追加」を選択
- ②ハイパーバイザーは「QEMU」を選択
- ③接続は「SSHでのリモートトンネル」を選択
- ④ホスト名が表示されるので、接続したいホストを選択
- ⑤必要に応じて「Autoconnect 起動時」をチェック
- ⑥接続先ホストのユーザrootのパスワードを入力
- ⑦仮想マシンマネージャーにホストが登録されたことを確認
このように接続することで、リモートの仮想マシンホストも管理することができるようになります。
NFS共有への接続
NFSで仮想ディスクファイルを共有できるようにします。リモートの仮想マシンホストでNFS共有をストレージプールとして扱うように設定します。
- ①仮想マシンマネージャーでリモートの仮想マシンホストを選択
- ②「編集」メニュー→「ホスト詳細」を選択
- ③「Storage」タブを選択
- ④左下の+ボタンをクリックして、ストレージプールを追加
- ⑤プールの名前は適当な名前を命名
- ⑥タイプは「netfs: Network Exported Directory」を選択
- ⑦「進む」をクリック
- ⑧ターゲットパスは「/var/lib/libvirt/images」に設定
- ⑨フォーマットは「nfs」を選択
- ⑩ホスト名はNFSサーバを設定(例ではホストkvm1)
- ⑪ソースパスは「/var/lib/libvirt/images」を設定
- ⑫「完了」をクリック
- ⑬リモートの仮想マシンホストのユーザrootのパスワードを入力
- ⑭ストレージプールが追加されていることを確認
- ⑮作成した仮想マシンが使用している仮想ディスクファイルがボリュームとして認識されていることを確認
NFS共有をストレージプールとして追加すると、対象ディレクトリに格納されている仮想ディスクファイルも認識されるようになります。これでライブマイグレーションの準備は整いました。
ライブマイグレーションの実行
ライブマイグレーションの移行先で仮想ディスクファイルが使用できるようになったことを確認したら、ライブマイグレーションを行います。
- ①仮想マシンを起動する
- ②仮想マシンマネージャーで仮想マシンを選択し、右クリック
- ③「Migrate」メニュー→移行先ホストを選択
- ④ダイアログの「はい」ボタンをクリック
- ⑤仮想マシンがもう一方のホストに移動したことを確認
- ⑥仮想マシンを開いて、システムが停止していないことを確認
- ⑦再度ライブマイグレーションを行ってみる
ライブマイグレーションにかかる時間は、ホスト間を接続しているネットワークの速度や仮想マシンのサイズ、仮想マシンの負荷状況などによって異なります。
まとめ
ライブマイグレーションが正常に動作するようになったら、仮想マシンに対してPINGを打ったり、SSHで接続したりして、停止していないことを確認してみてもよいでしょう。ただし、厳密に言えば、仮想マシンは瞬間的に停止しています。また、ホストを移動しているため、ネットワークのパケットが到達できない可能性があります。そのため、PING(ICMP)のようなセッションレスなプロトコルでは、抜け落ちが発生するかもしれません。SSHのような暗号化通信で使用しているセッション情報はそのまま移動するため、接続が途切れることはありません。
ライブマイグレーションは、仮想マシンらしい技術です。また、この設定ができることでフェイルオーバークラスタなどの構築にもつながっていきますので、きちんと考え方を理解しておく必要があるでしょう。