VMware ESXi 5.0 オンラインバックアップ/リストア


Table of Contents

↑

はじめに

ESXi上の仮想マシンをオンラインバックアップ/リストアします。

仮想マシンのオンラインバックアップは、スナップショットを利用すれば実現可能ですが、世代管理などの本格的なバックアップ運用をするのであれば、スクリプトを作り込む必要があります。

スクリプトの作り込みについては、時間的制約や品質的な問題があるため、
今回はVMwareコミュニティで公開されているスクリプトを利用します。

↑

公開スクリプト

↑

参考

↑

システム構成

esxi5.0_backup.jpg
  • ESXi上の仮想マシンをiSCSI共有ディスク上にバックアップします。

↑

ESXiサーバ

  • ホスト名(IP)
    • serv250 (192.168.11.250)
  • ディレクトリ構成
    • /vmfs/volumes/datastore1:仮想マシン用のデータストア
    • /vmfs/volumes/datastore2:バックアップを保存するデータストア

↑

仮想マシン

  • ホスト名(IP)
    • serv101 (192.168.11.101)
    • バックアップ対象の仮想マシン
  • OS
    • CentOS 6.2 (kernel 2.6.32-220.4.1.el6)

↑

iSCSIターゲット

  • ホスト名(IP)
    • serv100 (192.168.11.100)
    • バックアップの保存先
  • OS
    • CentOS 6.2 (kernel 2.6.32-220.4.1.el6)scsi-target-utils 1.0.14-4.el6
↑

iscsiターゲットの準備 (192.168.11.100側)

↑

iscsiターゲットのインストール

↑

インストール

# yum install scsi-target-utils
↑

起動

# /etc/init.d/tgtd start
↑

自動起動

# chkconfig tgtd on
↑

iscsiターゲットの設定

↑

HDDの構成について

  • serv100のHDD構成は以下の通りです。
    # ls /dev/sd*/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb
    • /dev/sda* はOS領域として利用しています
    • /dev/sdb は追加したHDDで未フォーマットです。このHDDをiSCSIに利用します。
↑

iscsiターゲットの作成

  • iscsiターゲットを作成します。iscsiターゲット名はユニークな名称である必要があり、以下のようなルールが推奨されています。
    iqn..[:]
  • 今回はルールに従ってターゲット名を設定します。
    # tgtadm --lld iscsi --op new --mode target --tid 1 --targetname \iqn.2012-02.net.oss-d.serv100:sdb
↑

公開パーティションのターゲット登録

  • ターゲットの作成後、公開パーティション(/dev/sdb)をロジカルユニットとしてターゲットに登録します。
    # tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 \--backing-store /dev/sdb
↑

イニシエータの登録

  • イニシエータの登録を行います。初期状態では、イニシエータが登録されていないためターゲットにアクセスできません。尚、イニシエータの登録は、IPアドレスまたはユーザー名の指定が可能ですが、今回はIPアドレスを利用します。
    # tgtadm --lld iscsi --op bind --mode target --tid 1 \--initiator-address 192.168.11.250
↑

設定確認

  • tgtadmコマンドで設定を確認します。
    「LUN:0」はコントローラで、「LUN:1」が今回追加したロジカルユニットです。
↑

ファイアウォールの設定

  • tgtdデーモンは「tcp:3260」をLISTENします。必要に応じてiptablesを変更してください。

↑

ESXi上にiSCSI領域をデータストアとして追加します。
iSCSIのデータストア追加

↑

↑

バックアップ要件

  • 今回のバックアップ要件は以下の通りとします
    • 仮想マシン serv101(192.168.11.101)のバックアップを実施する
    • オンラインバックアップを可能にする
    • バックアップは平日の深夜2時に実施する
    • 世代管理を可能にする(3世代)
    • cronを利用して自動化する
↑

設定

↑

ダウンロード解凍

  • バックアップスクリプトを解凍します。
    # cd /vmfs/volumes/datastore1/# tar zxvf lamw-ghettoVCB-518cef7.tar.gz# mv lamw-ghettoVCB-518cef7 ghettoVCB# cd ghettoVCB
↑

バックアップ設定

  • バックアップの設定を行います。(変更箇所と主要項目のみ記載)
    # cd # vi /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf
                            
                            VM_BACKUP_VOLUME
                            =/
                            vmfs
                            /
                            volumes
                            /
                            datastore2
                            
                            #バックアップ保存先(iSCSIターゲット)
                            
                            DISK_BACKUP_FORMAT
                            =
                            thin
                            
                            VM_BACKUP_ROTATION_COUNT
                            =
                            3
                            
                            #バックアップは3世代
                            
                            EMAIL_LOG
                            =
                            0
                            
                            #メール通知は無効
                            
                            EMAIL_SERVER
                            =
                            192.168
                            .11
                            .100
                            
                            EMAIL_SERVER_PORT
                            =
                            25
                            
                            MAIL_TO
                            =
                            root
                            
                            EMAIL_FROM
                            =
                            serv50
                          
    ※メール通知は利用しませんが、誤配信防止と今後の利用を考えて変更しておきます。


  • バックアップ対象の仮想マシン一覧を新規作成します。
    仮想マシン名はインベントリで表示される名前を記載します。
    # vi backup_vmlist.txtserv101

↑

バックアップの動作確認

  • 仮想マシンを起動させたまま、バックアップを実行します。
    # cd /vmfs/volumes/datastore1/ghettoVCB# ./ghettoVCB.sh -f ./backup_vmlist.txt -g ./ghettoVCB.conf

    ghettoVCB.shのオプションは以下の通り
    Usage: ./ghettoVCB.sh -f [VM_BACKUP_UP_LIST] -c [VM_CONFIG_DIR] -l [LOG_FILE] -d [DEBUG_LEVEL] -g [GLOBAL_CONF] -e [VM_EXCLUSION_LIST]OPTIONS:   -a     Backup all VMs on host   -f     List of VMs to backup   -c     VM configuration directory for VM backups   -g     Path to global ghettoVCB configuration file   -l     File to output logging   -d     Debug level [info|debug|dryrun] (default: info)

  • バックアップ実行中は下記の通り進行状況が表示されます。



  • バックアップ実行後にファイルが作成されている事を確認します。
    # ls /vmfs/volumes/datastore2/serv101serv101-2012-02-12_14-51-20
↑

cron設定

  • cronを利用してバックアップを自動化します。
  • ESXiでのcron設定は「/var/spool/cron/crontabs/root」へ直接書き込む事になりますが、
    このファイルはESXiを再起動すると削除されてしまいます。
    そのため、「rc.local」を利用してESXi起動時にcron設定ファイル「var/spool/cron/crontabs/root」を自動作成します。
    # vi /etc/rc.local
                            
                            #! /bin/sh
                            
                            export
                            
                            PATH
                            =/
                            sbin
                            :/
                            bin
                            
                            log
                            (
                            )
                            
                            {
                            
                            echo
                            
                            "
                            $1
                            "
                            
                            logger
                            
                            init
                            
                            "
                            $1
                            "
                            
                            }
                            
                            #execute all service retgistered in /etc/rc.local.d
                            
                            if
                            
                            [
                             -
                            d
                             /
                            etc
                            /
                            rc
                            .
                            local
                            .
                            d
                            
                            ]
                            ; 
                            then
                            
                            for
                            
                            filename
                            
                            in
                            
                            `
                            find /etc/rc.local.d/ | sort
                            `
                            
                            do
                            
                            if
                            
                            [
                             -
                            f
                            
                            $filename
                            
                            ]
                             && 
                            [
                             -
                            x
                            
                            $filename
                            
                            ]
                            ; 
                            then
                            
                            log
                            
                            "
                            running 
                            $filename
                            "
                            
                            $filename
                            
                            fi
                            
                            done
                            
                            fi
                            
                            #■vmwareのコミュニティサイトを参考に以下を追記します。
                            
                             /
                            bin
                            /
                            kill
                             $
                            (
                            cat
                             /
                            var
                            /
                            run
                            /
                            crond
                            .
                            pid
                            )
                            
                             /
                            bin
                            /
                            echo
                            
                            "
                            0 17 * * 1-5 /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh \ -f /vmfs/volumes/datastore1/ghettoVCB/backup_vmlist.txt \ -g /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf \ > /vmfs/volumes/datastore1/ghettoVCB/backup_log/ghettoVCB-backup-
                            \$
                            (date +%s).log
                            "
                             \ >>
                             /
                            var
                            /s
                            pool
                            /
                            cron
                            /
                            crontabs
                            /
                            root
                            
                             /
                            bin
                            /
                            busybox
                            
                            crond
                          
    【注意】ESXiの時間はUTC(日本の9時間遅れ)なので注意して設定します。
        今回は平日の深夜26時にバックアップを実行するように17時(26-9=17)で登録します。

  • バックアップログの保存ディレクトリを作成します。
    # mkdir /vmfs/volumes/datastore1/ghettoVCB/backup_log


↑

↑

リストア設定

↑

ダウンロード解凍

  • リストアスクリプトを解凍して設定ファイルを作成します。
    # cd /vmfs/volumes/datastore1/ghettoVCB# cp ghettoVCB-restore_vm_restore_configuration_template  vms_to_restore.txt

↑

リストア設定

  • リストア設定を1行追加します。
    # vi vms_to_restore.txt
                            
                            #";;"
                            
                            # DISK_FORMATS
                            
                            # 1 = zeroedthick
                            
                            # 2 = 2gbsparse
                            
                            # 3 = thin
                            
                            # 4 = eagerzeroedthick
                            
                            "
                            /vmfs/volumes/datastore2/serv101/serv101-2012-02-12_14-51-20;  /vmfs/volumes/datastore1;  3
                            "
                          

  • 追加するパラメータは下記をセミコロン区切りで追加します。
    パラメータ 説明
    バックアップディレクトリ 先ほど作成したバックアップ
    リストア先 リストア先のデータストアを指定します
    ディスクフォーマット 1-4で指定します。2以外は仮想マシン作成時に指定可能なものです。

  • ディスクフォーマットについて
    • 1,4は必要なディスク容量を全て確保します。(確保タイミングが、起動前、起動時という違い)
    • 3はディスク容量を全て確保せず、利用する分だけ確保します。
    • 2は不明です。
↑

リストアの動作確認

  • 仮想マシンserv101を停止させて仮想マシン名を「serv101」→「serv101_org」へ変更しておきます。
esxi5.0_backup14.JPG



  • リストアを実行します。
    # cd /vmfs/volumes/datastore1/ghettoVCB# ./ghettoVCB-restore.sh -c vms_to_restore.txt################## Restoring VM: serv101  #####################Start time: Sun Feb 12 15:14:48 UTC 2012Restoring VM from: "/vmfs/volumes/datastore2/serv101/serv101-2012-02-12_14-51-20"Restoring VM to Datastore: "/vmfs/volumes/datastore1" using Disk Format: "thin"Creating VM directory: "/vmfs/volumes/datastore1/serv101-2012-02-12_14-51-20" ...Copying "serv101.vmx" file ...Restoring VM's VMDK(s) ...Updating VMDK entry in "serv101.vmx" file ...Destination disk format: VMFS thin-provisionedCloning disk '/vmfs/volumes/datastore2/serv101/serv101-2012-02-12_14-51-20/serv101.vmdk'...Clone: 100% done.Registering serv101 ...4End time: Sun Feb 12 15:18:16 UTC 2012################## Completed restore for serv101! #####################Start time: Sun Feb 12 15:14:48 UTC 2012End   time: Sun Feb 12 15:18:16 UTC 2012Duration  : 3.47 Minutes
  • 仮想マシンのファイルがリストアされている事を確認します。
    # ls -l /vmfs/volumes/datastore1/serv101-*-rw-------    1 root     root          Feb 12 15:14 serv101-0-flat.vmdk-rw-------    1 root     root                518 Feb 12 15:18 serv101-0.vmdk-rw-r--r--    1 root     root                  0 Feb 12 15:18 serv101.vmsd-rwxr-xr-x    1 root     root               3138 Feb 12 15:14 serv101.vmx-rw-r--r--    1 root     root                262 Feb 12 15:18 serv101.vmxf


  • リストア後は「serv101」がインベントリに表示されます。
esxi5.0_backup15.JPG



  • リストアした仮想マシンを起動させます。
    起動時は下記警告が表示されるので「I moved it」を選択します。
    ※「I copied it」と回答するとネットワーク系の設定が初期化されてしまうので「I moved it」を選択します。
    esxi5.0_backup16.JPG



  • 起動して疎通確認で問題がなければリストアは完了です。
↑

参考

このエントリーをはてなブックマークに追加
Last-modified: 2012-02-13 (月) 00:53:55   最終更新のRSS