連載
» 2003年02月08日 00時00分 公開

Linux管理者への道(6):LVMによる自動バックアップ・システムの構築 (3/3)

[アイティーブースト]
前のページへ 1|2|3       

計画例とバックアップの設定手順

 ここでは小規模なシステム環境を想定し、これまでに説明してきた要素を取り入れたバックアップシステム構築の例を紹介します。

 システムはWebサーバとして稼働し、そのバックアップを担当するNFSサーバが存在するという想定です。テープ装置は高価であるため、各サーバのバックアップデータを集めるNFSサーバのみに装備し、必要に応じてデータ保存を行うこととします。

図4 想定環境 図4 想定環境

環境の分析と方針決定

 このWebサーバはユーザーの追加などの作業は発生せず、コンテンツのみが随時追加・変更されるシステムです。これを大まかに分析すると、システム上にあるデータは以下のように分類できます。

パーティション分割 主なデータ 更新頻度 重要度
/usr/local Webサイト用データ 常時 最重要
/var ログファイル 常時 中位
/ システムデータ ほとんどなし 低い

 今回は/usr/local/に対してLVMを使用し、スナップショットを利用してバックアップを取ります。また、バックアップはcronによって定期的に実行されるようにします。以上をまとめると以下のようになります。

  • コンテンツデータ部分はLVMベースのファイルシステム
  • スナップショットをdumpでバックアップ
  • 週1回フルバックアップ、平日はダンプレベル1をcronで自動化
  • バックアップ媒体はNFSマウントしたバックアップサーバ

バックアップサーバ側の準備

 ネットワーク経由でバックアップを取る場合、最も手軽なのがNFSの利用です。ここでは、NFSへの最低限のアクセス制御を考慮した設定を紹介します。

 バックアップサーバ側には、/backupというディレクトリに各サーバ用のディレクトリを作成します。このディレクトリには書き込みを認めなければならないので、NFS専用のユーザーnfsbackupを作成し、それぞれのディレクトリの所有者とします。

# mkdir -p /backup/www
# mkdir -p /backup/www2
# mkdir -p /backup/www3
# groupadd -g 1001 nfsbackup
# useradd -s /bin/false -u 1001 -g 1001 -d /backup nfsbackup
# chown -R nfsbackup:nfsbackup /backup

 次に、各サーバからNFSマウントできるように設定します。ただし、各サーバから別のサーバのデータを編集できないように、ここでは個別に公開するディレクトリを設定しています。

/backup/www    www.example.com(rw,anonuid=1001,anongid=1001,all_squash)
/backup/www2  www2.example.com(rw,anonuid=1001,anongid=1001,all_squash)
/etc/exports

 その後、portmapとrpc.mountd、rpc.nfsdを起動させれば、NFSサーバとして機能するようになります。

# portmap
# rpc.mountd
# rpc.nfsd

 また、必要に応じてrpc.statdやrpc.lockd、rpc.rquotadなどのデーモンを動作させておきます。

バックアップクライアント側の準備

 クライアント側は、スナップショットを利用してバックアップを取るようにします。ここでは、バックアップサーバが公開しているディレクトリを/mnt/backupというディレクトリにマウントして利用することとします。

 後は、バックアップを自動実行できるようなスクリプトを作成して、cronで自動実行するようにしておけばよいでしょう。以下にスクリプト例を挙げておきますが、これは最小限の機能しか持っていません。ほかにもNFSサーバ側でのデータ量監視機能、7世代を超えた場合はアーカイブデータを消去する機能、作成したアーカイブをテープに書き出すための機能などを持たせる必要があると思います。

#!/bin/sh
#
# /root/bin/lvmbackup  -- Backup Script
#--------------------------------------------------------------------

PARTITION=(lv0 lv1)                   #バックアップ対象の論理ボリュームを指定

PREFIX=/dev/volgrp                    #ボリュームグループ名を含むディレクトリ指定
SNAP_SIZE=100M                        #スナップショットのサイズ指定
SNAP_NAME=snap0                       #スナップショットの名前指定
BACKUP_DIR=nfs.example.com:/backup    #NFSサーバの公開ディレクトリ指定
MOUNT_POINT=/mnt/backup               #マウントポイント指定


mount $BACKUP_DIR  $MOUNT_POINT || exit

for i in ${PARTITION[*]}
do
  lvremove -f ${PREFIX}/${SNAP_NAME}
  lvcreate --snapshot --size $SNAP_SIZE --name $SNAP_NAME ${PREFIX}/$i

  if [ `date +%w` = 0 ]; then
      DUMP_LEVEL=0
  else
      DUMP_LEVEL=1
  fi

# dumpの実行 ファイル名は backup-論理ボリューム名-ダンプレベル-日付
  dump ${DUMP_LEVEL}uf \
       ${MOUNT_POINT}/`hostname`/backup-${i}-${DUMP_LEVEL}-`date +%Y%m%d` \
       ${PREFIX}/${SNAP_NAME}

  lvremove -f ${PREFIX}/${SNAP_NAME}
done

umount $MOUNT_POINT

 上記のスクリプトを/root/bin/lvmbackup(例)として保存したら、cronに登録します。

# crontab -e

 例として、毎日00:00に上記スクリプトが実行されるようにしています。

00 00 * * * /root/bin/lvmbackup

 アーカイブをテープにバックアップする場合は、NFSサーバ側で以下のようにddコマンドを利用します。

# dd if=/backup/www.example.com/backup-lv0-0-20030129 of=/dev/st0 bs=512

バックアップは要件とコストのバランスで

 2回にわたってバックアップに関する情報を紹介していきました。最後に紹介した方法は、これまでに紹介したツールをどの場所で利用するのかを分かりやすくするために想定した環境を前提としています。しかし、バックアップをどのように実現するかは、求められる要件によって異なります。コスト(費用、管理の手間)とのバランスを考えながら、適切な方法を選択してください。

 バックアップシステムが大規模になればなるほど、データを失った場合の損害は大きくなり、管理コストも膨れ上がることになります。その場合は、管理コストの低減が見込める商用バックアップツール使用の検討をお勧めします。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。