Linuxサーバ運用マニュアル

第5話「データを2重化しよう!」

前回までに,サーバの構成などの話は終了したので。ここからが,運用マニュアルの本編となります。しばらくは,第2部「定常運用編」として,Linuxでサーバを運用していく際,定期的に行っていかねばならない作業について説明していきます。

今回のテーマはデータの2重化です。コンピュータにとって,最も重要なのはデータです。サーバとして運用する場合,その重要性はさらに高まります。そこで,重要なデータは2重に持っておき。主データに欠損などの障害があった場合でも,即座に副データでそれを補っていくことが必要になります。

データの2重化を実現するためには,バックアップ・システムを構築しなければいけません。ここでは,Linuxサーバ運用に際してのデータ・バックアップについて,

の3つに分けて解説します。

バックアップ・ポリシーについて

データをバックアップするに際して,どのデータを,どこに,どのような方法で,バックアップするのか,その方針を決定しておく必要があります。

バックアップ対象データ(どのデータをバックアップするのか)

サーバにはさまざまなデータが存在するわけですが,そのうち,バックアップが必要になると思われるものは,WWWサーバのデータ,ファイルサーバのデータ,メールスプール,各種設定ファイルなどです。サーバの運用方針によってデータの重要性は異なるため,注意が必要です。

バックアップ先(どこにバックアップするのか)

別のマシンのHDDにバックアップ
基本的にはこれがメインとなります。同じマシン内のバックアップでは,マシン・トラブルなどの際にバックアップも破損する危険があるため,別のマシンにバックアップするべきです。なお,手動でのバックアップでは,負担が大きく,ミスも発生しやすくなるため,バックアップ用の各種ツールを利用し,shellやcronを使って自動化するべきでしょう。
ただし,自動で行う場合,ユーザが誤ってデータを更新,削除してしまった場合などには,バックアップ先データも同様に更新,削除されてしまうという危険性も存在します。(次項で紹介するcvsなどを使用すれば問題はなくなります)
MO,テープ,CDRなどの外部媒体へのバックアップ
別のマシンでも,動作しているマシンのHDDは安全とは言い切れません。 そこで,外部記録媒体を用意し,そこにバックアップをとります。メディアの準備などの作業もあり,完全に自動化することは現実的ではないので,手動でバックアップすることにします。ただし,その作業の通知や作業終了報告などは,システム化しておきたいところです。
また,外部媒体は,実質的に容量の制限がないので,過去のデータを数世代にわたって保管しておき,参照したりや復帰させたりすることが可能です。

バックアップの方法,頻度(どのような方法でバックアップするのか)

変更があり次第,即座にバックアップ
データを監視しつづけ,更新があり次第バックアップするか,データを保存する際に,2個所に保存するようにする場合があります。
これを自動化する場合には,データ管理用のツールを導入するか,プログラムなどの変更が必要になり,複数のディスクに対する同時書き込みなどで,実行速度も低下しますが,常に最新のデータがバックアップされるという大きなメリットがあります。
一定時間ごとに自動バックアップ
cronなどにより,一定時間ごとにバックアッププログラムを起動して,データをバックアップする場合です。
1時間ごと,1日ごと,など,データの量や重要度に応じて決定します。バックアップ頻度によってデータの損失がありますが。当然,頻度が高いほどデータ損失は小さくなります。また,サーバ・アプリケーションとは無関係にバックアップするため,実行速度が低下することはありません。
一定時間ごとに手動バックアップ
一定時間ごとに手動でバックアップ作業を行います。
手動はミスが多くなるので,外部媒体へのバックアップに使用するくらいでしょう。

バックアップ・ツールについて

サーバのデータをバックアップする際には,バックアップ用のツールを使用するのが一般的です。ここでは,3つの違うタイプのツールについて簡単に紹介します。

rsync

別のマシン間でのファイルコピーを行うコマンドです。rcpを強力にしたものとも言えるもので,同様なものにrdistなどもあります。使用方法はcpコマンドなどと基本的に同様で,

Linux> rsync [オプション] コピー元 コピー先

のように指定します。

rsyncは,データをチェックしたうえでバイナリ差分情報だけを転送する。というようなこともしてくれるツールで,オプションも非常にたくさんありますので,手動でバックアップする際などには便利なツールです。

cvs

Current Version Systemという名前でもわかるように,これは,バックアップ・ツールというよりは,バージョン管理ツールと言った方が正確です。ファイルの更新情報などをすべて管理してくれるので,プログラムのソースを管理する場合や,複数の人間が同じファイルを扱う場合などに,特に大きな力を発揮します。

そして,バックアップ・ツールとしても,commitコマンドを使って2つのデータ間の同期をとることができ,その機能だけでも有効ですし,更新段階ごとのデータを保持しているため,上書き更新してしまったデータを復帰することなども可能となります。

mirror

バックアップ用として最も有名なツールだと思われるmirrorは,指定したサーバからデータを「もってくる」ツールです。指定されたサーバにアクセスし,そこにあるデータをローカルマシンのディレクトリに保存することができるものです。

ここでは,バックアップ・ツールにmirrorを使うとして。その設定について別項目として簡単に解説しておきます。

mirrorの解説

mirrorはパッケージという単位でバックアップを行い,mirrorを使用する際には,

Linux> mirror -p[パッケージ名] 

というように,パッケージ名を指定して実行します。

パッケージや動作の設定は,mirror.defaultというファイルで行い,mirror.defaultでは,

package=defaults

で,全般的な情報を定義し,

package=各パッケージ名

で,ミラーを行う各パッケージを指定します。


まず,package=defaults部分の記述を解説します。

hostname=gwsv.lo.ash.or.jp
自分のホスト名
remote_user='ユーザ名'
remote_password='パスワード'
接続先のユーザ名とパスワード。
ここではWWWサーバなどのものです。
local_dir=/backup/
転送先基本ディレクトリの指定。
わかりやすいように,このような指定になっています。
mode_copy=true
転送元と同じファイルモードでコピーする (falseを指定すると,ファイルモード固定)
update_log=.mirror
ミラー先ディレクトリに残すログファイル名指定
make_bad_symlinks=false
無効なシンボリック・リンクもコピーするかの指定
do_deletes=false
転送元のファイルが無くなった場合でも,ミラー側のファイルを消さない指定 (trueを指定すると,転送元に合わせて消去)

パッケージの例も1つ紹介しておきます。

package=htm
        site=www.ash.or.jp
        remote_dir=/usr/local/apache/htm
        local_dir+htm

ここではhtmという名前のパッケージを設定しており,www.ash.or.jpというサーバの,/usr/loval/apache/htmを,ローカルディレクトリ/usr/local/apache/htmにコピーする設定です。

運用方法

データの2重化という作業を行う際の具体的な運用方法について解説します。

バックアップ環境の構築

1,バックアップ・ポリシーの決定

上記を参考に,データのバックアップ・ポリシーを決定します。

データ頻度媒体方法
メールスプール1時間ごとゲートウェイのHDDcronとmirrorで自動化
WWWサーバのデータ1日ごとゲートウェイのHDDcronとmirrorで自動化
1週間ごとMO手動(毎週月曜日)
ファイルサーバのデータ1日ごとゲートウェイのHDDcronとmirrorで自動化
1週間ごとMO手動(毎週月曜日)
設定ファイル更新あり次第ゲートウェイのHDD更新作業時に手動で

今回は以上の方針で,バックアップをすることにします。

外部媒体としてはさまざまなものが考えられますが,コストやデータ量などからMOを選択することにし,毎週月曜日にMOに手動バックアップを行うことにします。なお,MOには3世代分(3週間分)のデータを残すことにします。

各種ログについてもバックアップの必要があるのですが,ログのバックアップについては,次回以降の回でログについての解説と同時に行う予定です。

2,バックアップ・ツールの設定

ゲートウェイにmirrorをインストールし,mirror.defaultに,パッケージを設定します。

package=mail
        site=www.ash.or.jp
        remote_dir=/var/spool/mail
        local_dir+mail

package=htm
        site=www.ash.or.jp
        remote_dir=/usr/local/apache/htm
        local_dir+htm

package=file
        site=www.ash.or.jp
        remote_dir=/usr/local/samba/files
        local_dir+files

決定したポリシーの通り,3つのパッケージを設定します。

3,動作実験(実際にバックアップさせてみる)

設定されたmirrorが,きちんと動作するかどうかチェックします。

Linux> mirror -pmail
Linux> mirror -phtm
Linux> mirror -pfiles
Linux> cd /backup
Linux> ls -l

4,自動化(shellとcronの設定)

1時間ごとのものと,1日ごとのものを,それぞれまとめてシェル・スクリプトを作ります。今回は,usr/local/etc/mirror/cronlibに,

hour.sh

#!/bin/sh
/usr/local/etc/mirror/mirror -pmail

day.sh

#!/bin/sh
/usr/local/etc/mirror/mirror -phtm
/usr/local/etc/mirror/mirror -pfiles

を作り,実行権を与えます。

Linux> chmod u=rwx usr/local/etc/mirror/cronlib/hour.sh usr/local/etc/mirror/cronlib/day.sh

そして,それをcronで定期的に実行するように指定します。(cronについての詳しい話は後の回で行う予定です)

Linux> crontab -e

crontabに,以下の2行を追加します。

15 08 * * * /usr/local/etc/mirror/cronlib/day.sh
0 * * * * /usr/local/etc/mirror/cronlib/hour.sh

毎朝8時15分にday.shを起動し,毎時0分にhour.shを起動する設定です。

5,外部メディアの準備

MOドライブを準備し,ファイル転送ができるようにしておきます。

Linuxでリムーバブル・メディアを使用する場合,マウントやアンマウントが必要になり,操作が複雑化するので,sambaを利用してWindowsクライアントで操作する方が便利です。

6,週次運用システム構築

詳しい話は後の回で行う予定ですが,バックアップ完了の知らせがなければメールなどで警告できるように設定します。

週ごとの運用

毎週月曜日にMOへの手動バックアップを行うと決めました。その作業の際の運用方法の解説です。


1,メディアの準備

その週のバックアップに使用するMOを準備する。

2,指定データのバックアップ

ここでは,ゲートウェイの/backup下に,すべてのデータが入っているので,それをMOにコピーします。

Windowsクライアントで操作しない場合は,mount, tar, umountコマンドなどを使用することになります。

3,指定された場所に保管

MOを指定場所に保管する

4,バックアップしたことを通知

バックアップ完了を警告用のシステムに通知します。


次回予告

サーバを運用するには,サーバの状態を把握しなければなりません。そのためには様々なコマンドを使ってマシンの状態を調べなければなりません。

と,いうわけで次回は「リソースをチェックしよう!」です。

(ASHマルチメディア研究会/joe,はしもと)