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.<yyyy-mm>.<tld.domain.some.host>[:<identifier>]
  • 今回はルールに従ってターゲット名を設定します。
    # 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」が今回追加したロジカルユニットです。
    # tgtadm --lld iscsi --op show --mode target
    Target 1: iqn.2012-02.net.oss-d.serv100:sdb
       System information:
           Driver: iscsi
           State: ready
       I_T nexus information:
       LUN information:
           LUN: 0
               Type: controller
               SCSI ID: IET     00010000
               SCSI SN: beaf10
               Size: 0 MB, Block size: 1
               Online: Yes
               Removable media: No
               Readonly: No
               Backing store type: null
               Backing store path: None
               Backing store flags:
           LUN: 1
               Type: disk
               SCSI ID: IET     00010001
               SCSI SN: beaf11
               Size: 12885 MB, Block size: 512
               Online: Yes
               Removable media: No
               Readonly: No
               Backing store type: rdwr
               Backing store path: /dev/sdb
               Backing store flags:
       Account information:
       ACL information:
           192.168.11.250

ファイアウォールの設定

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

データストアの追加 (192.168.11.250)

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

バックアップ (192.168.11.250)

バックアップ要件

  • 今回のバックアップ要件は以下の通りとします
    • 仮想マシン 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.txt
    serv101

バックアップの動作確認

  • 仮想マシンを起動させたまま、バックアップを実行します。
    # 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)

  • バックアップ実行中は下記の通り進行状況が表示されます。
    Logging output to "/tmp/ghettoVCB-2012-02-12_14-51-20.log" ...
    Insufficient arguments.
    2012-02-12 14:51:21 -- info: ====================== ghettoVCB LOG START ======================
    
    2012-02-12 14:51:21 -- info: CONFIG - USING GLOBAL GHETTOVCB CONFIGURATION 
    FILE = /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf
    2012-02-12 14:51:21 -- info: CONFIG - VERSION = 2011_11_19_1
    2012-02-12 14:51:21 -- info: CONFIG - GHETTOVCB_PID = 441430
    2012-02-12 14:51:21 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/datastore2
    2012-02-12 14:51:21 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 3
    2012-02-12 14:51:21 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2012-02-12_14-51-20
    2012-02-12 14:51:21 -- info: CONFIG - DISK_BACKUP_FORMAT = thin
    2012-02-12 14:51:21 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0
    2012-02-12 14:51:21 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0
    2012-02-12 14:51:21 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3
    2012-02-12 14:51:21 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5
    2012-02-12 14:51:21 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15
    2012-02-12 14:51:21 -- info: CONFIG - LOG_LEVEL = info
    2012-02-12 14:51:21 -- info: CONFIG - BACKUP_LOG_OUTPUT = /tmp/ghettoVCB-2012-02-12_14-51-20.log
    2012-02-12 14:51:21 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0
    2012-02-12 14:51:21 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0
    2012-02-12 14:51:21 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all
    2012-02-12 14:51:21 -- info: CONFIG - EMAIL_LOG = 0
    2012-02-12 14:51:21 -- info:
    2012-02-12 14:51:23 -- info: Initiate backup for serv101
    2012-02-12 14:51:23 -- info: Creating Snapshot "ghettoVCB-snapshot-2012-02-12" for serv101
    Destination disk format: VMFS thin-provisioned
    Cloning disk '/vmfs/volumes/SSD1/serv101/serv101.vmdk'...
    Clone: 72% done.
    2012-02-12 14:53:05 -- info: Removing snapshot from serv101 ...
    2012-02-12 14:53:05 -- info: Backup Duration: 1.70 Minutes
    2012-02-12 14:53:05 -- info: Successfully completed backup for serv101!
    
    2012-02-12 14:53:07 -- info: ###### Final status: All VMs backed up OK! ######
    
    2012-02-12 14:53:07 -- info: ====================== ghettoVCB LOG END ========================



  • バックアップ実行後にファイルが作成されている事を確認します。
    # ls /vmfs/volumes/datastore2/serv101
    serv101-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/spool/cron/crontabs/root
     /bin/busybox crond
    【注意】ESXiの時間はUTC(日本の9時間遅れ)なので注意して設定します。
        今回は平日の深夜26時にバックアップを実行するように17時(26-9=17)で登録します。

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


リストア (192.168.11.250)

リストア設定

ダウンロード解凍

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

リストア設定

  • リストア設定を1行追加します。
    # vi vms_to_restore.txt
     #"<DIRECTORY or .TGZ>;<DATASTORE_TO_RESTORE_TO>;<DISK_FORMAT_TO_RESTORE>"
     # 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 2012
    Restoring 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-provisioned
    Cloning disk '/vmfs/volumes/datastore2/serv101/serv101-2012-02-12_14-51-20/serv101.vmdk'...
    Clone: 100% done.
    Registering serv101 ...
    4
    End time: Sun Feb 12 15:18:16 UTC 2012
    ################## Completed restore for serv101! #####################
    
    
    Start time: Sun Feb 12 15:14:48 UTC 2012
    End   time: Sun Feb 12 15:18:16 UTC 2012
    Duration  : 3.47 Minutes
  • 仮想マシンのファイルがリストアされている事を確認します。
    # ls -l /vmfs/volumes/datastore1/serv101-*
    -rw-------    1 root     root         7516192768 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