仮想マシンの自動バックアップ
仮想化ソフトウェアであるXenServerには有償版と無償版があり、バージョン6.0までは無償版に多くの機能制限がありました。
現在の最新版は6.5ですが、バージョン6.2以降になるとその機能制限が大幅に解除され、無償版でもほとんどの機能が使用出来るように変更されています。
(ただし、Citrixからのサポートを得るには、XenServerのライセンスが必要です)
例えば、6.0以前のバージョンの無償版では動的メモリー制御(DMC)が利用出来ず、各仮想マシンに割り当てたメモリ容量を変更するには、一度仮想マシンをシャットダウンさせる必要がありました。この機能も無償版で使えるようになり、稼働状態を維持したまま仮想マシンのメモリ容量を変更出来るようになっています。
また初心者にも使いやすい、XenCenter(XenServer を操作するためのWindows用 GUI クライアント)の存在もあり、XenServerはますます本格運用がしやすい仮想化ソフトウェアになっています。
しかしながら、ことバックアップに関しては、定期的に仮想マシンの完全なバックアップを自動で行うような機能までは用意されていません。
XenServerのようなVPSであっても各仮想マシン毎に rsync などを用いて必要なディレクトリ・ファイル単位でのバックアップを取得しておくことで、重大な障害が発生した際には仮想マシンの再構築後にデータのみをバックアップから戻すということは可能です。
ただXenServerに限ったことではありませんが、多数の仮想マシンを1台の物理サーバで運用する性質上、この方法では障害復旧に多くの時間を必要とするため、心もとないと言えるのではないでしょうか?
今回は、そんなXenServerが抱える仮想マシンの自動バックアップの問題をスクリプトを使うことにより解決する手法について紹介したいと思います。
構成およびバックアップの手法について
初めに今回の説明で使用するサーバの構成及び、バックアップの手法について簡単に説明します。
構成
■物理サーバA
・XenServerホスト :192.168.0.1
・仮想マシン(VM01) :192.168.0.2
■物理サーバB
・バックアップサーバ:192.168.0.3 (OSはCentOS 6.6を使用)
※仮想マシンバックアップイメージの保存先
バックアップの手法
1. NFSマウントを用いてXenServerホストからバックアップサーバのストレージを使えるようにする。
2. xeコマンドを記述したスクリプトで、【スナップショットの作成】【スナップショットから仮想マシンのエクスポート】【スナップショットの削除】を行う。
この手法を用いることで、稼働中の仮想マシンを無停止でバックアップすることが可能になります。
XenCenterで操作を行うことで同様のことは可能ですが、自動化することは出来ません。
今回紹介する方法で作成したスクリプトをcronに設定することでバックアップを自動化することが出来ます。
手順の説明
続いて手順の具体的な説明を行います。
1. NFSマウントを用いてXenServerホストからバックアップサーバのストレージを使えるようにする。
■対象サーバ:192.168.0.3 (バックアップサーバ)
初めにバックアップサーバにrpcbindとnfsをインストールします。
1 |
# yum install rpcbind nfs-utils |
hosts.allow の設定を変更します。
1 2 3 4 5 6 |
# vi /etc/hosts.allow ALL:127.0.0.1 rpcbind:192.168.0.1 portmap:192.168.0.1 mountd:192.168.0.1 |
rpcbindを起動します。
1 |
# /etc/init.d/rpcbind start |
nfsを起動します。
1 |
# /etc/rc.d/init.d/nfs start |
ストレージ用のディレクトリを作成します。
1 |
# mkdir -p /export/common |
公開ルールの設定をおこないます。
1 2 |
# vi /etc/exports /export/common 192.168.0.1/24(rw,sync,no_root_squash) |
nfsを再起動します。
1 |
# /etc/rc.d/init.d/nfs restart |
全てのディレクトリを一度エクスポート・アンエクスポートします。
1 |
# exportfs -ra |
NFSエクスポートの状況を確認します。
1 |
# exportfs -v |
次にXenServerホスト側にNFSクライアントの設定を行います。
■対象サーバ:192.168.0.1 (XenServerホスト)
マウント用のディレクトリを作成します。
1 |
# mkdir /mnt/exports |
NFSマウントを実行します。
1 2 3 |
# mount -t nfs 192.168.0.3:/export/common /mnt/exports mount: mount to NFS server '192.168.0.3' failed: System Error: No route to host. |
上記のようなエラーが出る場合、バックアップサーバ側のiptablesが問題になっている可能性があります。
一時的に停止させるなどして、確認してみてください。
2. xeコマンドを記述したスクリプトで、【スナップショットの作成】【スナップショットから仮想マシンのエクスポート】【スナップショットの削除】を行う。
次に、XenServerホストでバックアップ用のスクリプトを作成します。
今回はスクリプトの中でバックアップデータの保存先をマウント及びアンマウントするようにしていますが、こちらはお好みで設定してください。(サーバ起動時からずっとマウントしておく方法でも構いません。)
■対象サーバ:192.168.0.1 (XenServerホスト)
スクリプトを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# cd /usr/local/sbin # vi vmexport.sh #!/bin/sh ## VM Name VMNAME=VM01 ## Mount network server mount -t nfs 192.168.0.3:/export/common /mnt/exports ## Snapshot Var1=`xe vm-snapshot vm=$VMNAME new-name-label="$VMNAME"_SNAPSHOT` ## Export snapshot xe template-param-set is-a-template=false uuid=$Var1 rm -f /mnt/exports/"$VMNAME".xva xe vm-export uuid=$Var1 filename=/mnt/exports/"$VMNAME".xva ## delete Snapshot xe vm-uninstall uuid="$Var1" force=true ## Unmount network server umount /mnt/exports |
作成したスクリプトに実行権限を与えます。
1 |
# chmod +x vmexport.sh |
作成したスクリプトを実行してテストを行います。
1 |
# sh -x vmexport.sh |
正しく設定が出来ていれば、バックアップサーバの /export/common 内に仮想マシンの全データが含まれているイメージファイルが出来ているはずです。
スクリプトのテストが終わりましたら最後にcronによる自動化の設定を行います。
1 |
0 2 * * * /usr/local/sbin/vmexport.sh |
バックアップの説明は以上となりますが、最後に今回作成したバックアップデータを使った仮想マシンの復元方法について説明します。
仮想マシンの復元
仮想マシンの復元は下記の手順で行います。
・バックアップした仮想マシンのイメージファイルをインポートする。(XenServerで行う)
・インポートしたデータを使って仮想マシンを作成する。(XenCenterで行う)
XenServerへのインポート
この作業には、ファイル名を指定して仮想マシンをインポートする xe vm-import というコマンドを使います。
■対象サーバ:192.168.0.1 (XenServerホスト)
1 2 3 4 5 6 |
# mount -t nfs 192.168.0.3:/export/common /mnt/exports # cd /mnt/exports # xe vm-import filename="/mnt/exports/VM01-SNAPSHOT.xva" sr-uuid=17ee8f1f-xxxx-xxxx-xxxx-xxxx sr-uuid= には、XenServerのローカルストレージのUIDが入ります。XenCenter であらかじめ確認しておいてください。 |
XenServerへのインポートは上記までの手順で完了していますが、この状態ではまだ仮想マシンとしては動作しません。
(仮想マシンの元となるテンプレートのようなものがXenServer上に作成された状態です。)
XenServerへインポートしたデータを使って仮想マシンを再構築することで、最終目的である仮想マシンの復元が完了します。
仮想マシンの作成
XenServerへのインポートが完了したらXenCenter上でインポートしたデータを確認出来るようになっていますので、そのデータから仮想マシンを作成して起動します。
こちらはXenCenterをお使いの方ならは説明不要と思いますので細かい説明は省略します。
(対象のデータを右クリックして、新規VMウィザードを実行するだけです。)
尚、インポートしたデータを使って仮想マシンを作成し、IPアドレスを変更してネットワークのリスタートを行っても有効にならない場合があります。
その場合はHWADDRの重複が原因となっている可能性がありますので、ネットワーク設定のHWADDRの部分をコメントアウトもしくは、削除してみてください。
1 2 3 4 5 6 7 |
DEVICE="eth0" #HWADDR="42:79:xx:xx:xx:xx" NM_CONTROLLED="yes" ONBOOT="yes" IPADDR=192.168.0.2 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 |
またスクリプトを実行した際に、XenCenterを起動しておくとスナップショットが自動的に作成され、エクスポート完了後に不要となったスナップショットを削除する様子が確認出来ます。
最後に本記事に記載されている内容につきましてはテスト環境にて一度テストしてから利用していただくことををお勧め致します。
また、今回紹介した方法を実行したことで問題が発生した場合でも、弊社で責任は負いませんのでくれぐれも自己責任において試していただければと思います。
今回の記事は以上となります。それでは。