背景
Citrix XenServerを使ってデータベースサーバを複数立てて運用しています。
ただ、ホストマシンだったり、仮想マシンは、いつお亡くなりなるかわからないので必ずバックアップが必要です。
備忘録も兼ねてバックアップするためのスクリプト記録しておきます。
XenServerの環境
- XenServer: 7.6.0
実際にバックアップ処理をするスクリプトが以下です。
バックアップの流れ
- バックアップ先のディレクトリをマウントします。
- この例では、自前のNASの共有ディレクトリにバックアップしています。
- 指定された仮想マシンのスナップショットを作成します。
- 「仮想マシン名_SNAPSHOT」という名前のスナップショットを作成します。
- 作成したスナップショット(uuidで識別)をバックアップ先のパスに(xva形式?)エクスポートします。
- エクスポートが終了したら、スナップショットを削除します。
- バックアップ先のマウントを解除します。
vm-export
#!/bin/bash
## VM Name
echo $1
VMNAME=$1
DestDir=`date '+%Y%m%d'`
## Mount Backup Server
mount -t nfs 192.168.3.150:/volume1/xenserver_vm /mnt
cd /mnt
if [ -e $DestDir ]; then
echo "$DestDir found."
else
mkdir $DestDir
fi
cd ..
## Snapshot created.
uuid=`xe vm-snapshot vm=$VMNAME new-name-label="$VMNAME"_SNAPSHOT`
## Export snapshot.
xe template-param-set is-a-template=false uuid=$uuid
xe vm-export uuid=$uuid filename=/mnt/"$DestDir"/"$VMNAME".xva
##delete Snapshot
xe vm-uninstall uuid="$uuid" force=true
## Unmount Backup Server
umount /mnt
まとめてバックアップ
指定した仮想マシンをバックアップします。
vm-exportに仮想マシン名を渡すだけです。
- バックアップしたいVMの名前をvm-exportの1番目の引数に指定して呼び出します。
-
vm-export-all
は、vm01, vm02, vm03という仮想マシンを順番にバックアップします。
vm-export-all
#!/bin/bash
./vm-export vm01
./vm-export vm02
./vm-export vm03
バックアップの実行
バックアップの実行は、毎日0時にcron
で自動的にするようにしています。
/etc/cron.d
に以下のファイルを置いています。
vm-backup.cron
#!/bin/bash
#vm-export-all
0 0 * * * root /root/vm-export-all
失敗談
バックアップ先のNASがダウンしていることがあり、バックアップ先をマウントできずにローカルディスクの /mnt
にバックアップファイルが作成されてしまい、Disk fullでXenServerが起動しなくなったことがありました。
(もちろん原因の特定に時間がかかって仕事は止まりました)
気を付けてください。大量の汗がでます。
お礼
このスクリプトのベースになったのは、どこかの記事だったのですがもうすれてしまいました。
スクリプトしか残ってません。
でも、おかげで仮想マシン破壊の恐怖から逃れることができています。
ありがとうございます。