Linux Lovers
    Fedora Coreで始めるサーバ構築

Home > 運用管理 > rsyncでバックアップ

rsyncでメインサーバのデータを予備のLinuxマシンにバックアップする

rsyncは、ただデータをコピーするのでは無く、更新分のデータだけをバックアップしたり、
また、バックアップ元から削除されたデータをバックアップ先でも削除するなどの同期を行うことが
可能です。

ここでは、メインサーバと予備のLinuxマシンがある場合のrsyncを使ったバックアップ方法の紹介をします。
別マシンにデータをバックアップしますので、SSHを利用しての暗号化転送を行います。
バックアップはサーバ運営をしていく上で非常に大事なことですので、ぜひ実践してください。
rsyncでデータを同期させておけば、メインサーバに何か障害が発生しても、すぐに予備のマシンに
切り替えることが可能になります。

ここで紹介するバックアップの概要としては、メインサーバから予備のマシンに対してrsyncを
実行
するようにします。ただ、予備のマシンに常に電源が入ってるわけでは無いと思いますので、
その辺を考慮し、予備のマシンが稼動している場合にだけ、rsyncを実行するようなスクリプトを
作成
しました。このスクリプトをcrontabに登録し、自動でバックアップできるようにします。
なお、自動化するに当たって、予備のマシンのSSHの設定を変更する必要がありますので、
先ずはそこから紹介していきたいと思います。


rsync自動化の為の準備 予備マシンのSSHの設定を変更する

ここで行う予備マシンのSSHの設定変更については次のようなものになります。
rootでのログインを許可にする。また、メインサーバから予備マシンに対してrsyncを実行した
場合は、通常はrootのパスワードを求められます。rootのパスワードを入力して、初めてrsyncでの
同期が行われます。ただ、パスワードの入力があると、rsyncを自動化できないので、
鍵認証にし、更にはパスフレーズを空にすることで、入力が求められない状態にし、
自動化していきます。

なおこの先、メインサーバと予備マシンの設定を行ったり来たりで紛らわしくなるので、
メインサーバの操作の場合は、[root@server root]# とし、
予備マシンの操作の場合は、[root@yobi root]# とします。また、予備マシンのIPアドレスは、
192.168.1.100
として、話を進めていきます。IPアドレスは自分の環境に置き換えてください。

先ずは、メインサーバのほうで鍵の作成をします。Enterと書いてある部分は、何も入力せずに
Enterキーを押せばOKです。

[root@server root]# ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):   ←Enter
Enter passphrase (empty for no passphrase):   ←Enter
Enter same passphrase again:   ←Enter
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
16:68:99:ee:3a:4b:54:e3:29:e5:19:d2:9e:5c:06:7d root@server


予備マシンのほうのsshd_configを編集して、rootでのログインを許可にします。

[root@yobi root]# vi /etc/ssh/sshd_config
PermitRootLogin no   ←37行目

PermitRootLogin yes


この変更を終えたら、予備マシンのSSHを再起動しておきます。

[root@yobi root]# service sshd restart


先ほど、メインサーバで鍵ペアを作成していますので、次は公開鍵を予備マシンに送ります。
ここでは、予備マシンでSSHが稼動しているので、メインサーバでscpコマンドを実行して、予備マシンに
公開鍵を送ります。scpの実行後に予備マシンのrootのパスワードを入力する必要があります。

[root@server root]# scp /root/.ssh/id_rsa.pub 192.168.1.100:/root/
root@yobi's password:    ←予備マシンのrootのパスワードを入力
id_rsa.pub 100% 220 0.2KB/s 00:00    ←転送完了


予備マシンの/rootに転送したid_rsa.pubをauthorized_keys2に登録します。
続いて、authorized_keys2のパーミッションの変更をします。

[root@yobi root]# mkdir .ssh
[root@yobi root]# cat id_rsa.pub >> /root/.ssh/authorized_keys2    ←/rootで
[root@yobi root]# chmod 600 .ssh/authorized_keys2


以上で、メインサーバから予備マシンへのSSH接続は、パスワード等を入力することなく
接続できるようになっています。試しにメインサーバから、予備マシンにSSHで接続してみます。

[root@server root]# ssh 192.168.1.100

これでパスワードなどを入力することなく、予備マシンに接続できれば成功です。


>>このページのTOPへ

rsyncでデータを予備マシンにバックアップしてみる

早速、rsyncコマンドでメインサーバのデータを予備マシンにバックアップしてみます。
ここでは、試しにメインサーバの/var/www/htmlを予備マシンに送ってみます。

[root@server root]# rsync -avz -e ssh --delete /var/www/html/ 192.168.1.100:/var/www/html


ちゃんと予備マシンにデータが送られているか確認してみてください。
また次回以降、/var/www/htmlを送る場合は、全てのファイルを送るのでは無く、追加分や変更部分だけが
送られる
ようになります。また、メインのほうから消えたファイルは予備のほうでも消されます。

このようにしてバックアップしたいデータを予備マシンに送っていきます。
ただ、毎回上のようなコマンドを入力して実行するのは面倒ですし、何より毎回手動でやっていては、
便利さも半減してしまいます。なので、ここではスクリプトを作成して、それをcrontabに登録し、
定期的に自動でバックアップしたいと思います。


>>このページのTOPへ

rsyncを実行するスクリプトを作成する

それではrsyncを実行するスクリプトをbackup.shという名前で/rootに作成してみます。

[root@server root]# vi backup.sh
#!/bin/sh

# 変数の設定
BACKUP=192.168.1.100   #IPアドレスは自分の環境に合わせて書き換える
RSYNC='rsync -avz -e ssh --delete'

# pingで対象ホストが稼動してるか確認
/bin/ping -c 1 $BACKUP

# 稼動してれば、rsyncを実行、稼動してなければ、メールでエラーを通知
if [ $? -eq 0 ] ; then
  # 各種データ
  $RSYNC /var/www/ $BACKUP:/var/www
  $RSYNC /var/log/httpd/ $BACKUP:/var/log/httpd
  $RSYNC /home/ $BACKUP:/home
  $RSYNC /var/lib/awstats/ $BACKUP:/var/lib/awstats
  $RSYNC /var/lib/squirrelmail/prefs/ $BACKUP:/var/lib/squirrelmail/prefs

  # 各種設定ファイル
  $RSYNC /etc/passwd $BACKUP:/etc/
  $RSYNC /etc/shadow $BACKUP:/etc/
  $RSYNC /etc/group $BACKUP:/etc/
  $RSYNC /root/.bashrc $BACKUP:/root/
  $RSYNC /var/named/chroot/var/named/ $BACKUP:/var/named/chroot/var/named
  $RSYNC /var/named/chroot/etc/named.conf $BACKUP:/var/named/chroot/etc/
  $RSYNC /etc/httpd/conf/httpd.conf $BACKUP:/etc/httpd/conf/
  $RSYNC /etc/httpd/conf/ssl.key $BACKUP:/etc/httpd/conf/
  $RSYNC /etc/httpd/conf/ssl.crt $BACKUP:/etc/httpd/conf/
  $RSYNC /etc/httpd/conf.d/ $BACKUP:/etc/httpd/conf.d
  $RSYNC /etc/postfix/ $BACKUP:/etc/postfix
  $RSYNC /usr/lib/sasl2/smtpd.conf $BACKUP:/usr/lib/sasl2/
  $RSYNC /etc/dovecot.conf $BACKUP:/etc/
  $RSYNC /etc/samba/smb.conf $BACKUP:/etc/samba/
  $RSYNC /etc/awstats/awstats.conf $BACKUP:/etc/awstats/
  $RSYNC /etc/vsftpd/vsftpd.conf $BACKUP:/etc/vsftpd/
  $RSYNC /etc/vsftpd.chroot_list $BACKUP:/etc/
  $RSYNC /etc/vsftpd.user_list $BACKUP:/etc/
  $RSYNC /etc/ntp.conf $BACKUP:/etc/
  $RSYNC /etc/dhcpd.conf $BACKUP:/etc/

 # /etcと/rootを丸ごと
  $RSYNC /etc $BACKUP:/var/backup/
  $RSYNC /root $BACKUP:/var/backup/
else
  echo "rsync NG" | mail -s "rsync" chibi   #chibiの部分は、自分の環境に置き換える
fi


このスクリプトでは、先ず予備マシンに対してpingを放ちます。そして応答があれば、予備マシンと
通信できる状態ですので、rsyncを実行します。逆に応答が無い場合は、ホストがダウンしてると
みなし、rsyncは実行せずエラーのメールを送信します。通常は、LAN内マシンからのpingに応答する
設定にしていると思いますが、もし応答しない設定にしているとこのスクリプトを使用することが
できないので注意してください。

あと大事なのが、変数の設定部分です。BACKUP=の後ろのIPアドレスは自分の環境に合わせたものに
記述し直してください。ここでは例として、192.168.1.100と記述しています。

また、この記述では予備マシンがダウンしてる度にエラーのメールを送信してしまいます。
エラーメールはいらないという場合には、elseとecho〜の2行を削除してください。
メール送信が必要な場合には、chibi(ユーザ名)の部分は自分の環境に置き換えてください。
ここには、携帯のアドレスなどを記述すれば、携帯に届くようにもできます。

バックアップするものについては大きく3つに分けました。
各種データ各種設定ファイル/etcと/rootを丸ごと※1です。

/var/lib/awstats/は、Awstatsの集計データです。/var/lib/squirrelmail/prefs/は、
SquirrelMailのアドレス帳です。各種設定ファイルについては、当サイトで紹介している
各種サーバの設定ファイルを転送するようにしています。また、/etc/passwdなども
転送しています。これにより、ユーザ情報もそのまま引き継ぐことが可能です。

このスクリプトに記述しているもので、特に不要なものがある場合にはその行を削除してください。
また、転送したいものが他にある場合には、同じような容量で付け加えればOKです。

※1
/etcと/rootは、予備マシンの/var/backupに転送しています。これら2つは、予備機のそのままの場所に
転送してはいけません。/rootをやると予備機のほうにあるauthorized_keys2が消えます。
authorized_keys2が消えてしまっては、rsyncの自動化ができなくなってしまいます。

/etcを丸ごと同期させてしまうと、予備マシンの情報が狂います。
そのマシン特有の設定ファイルが/etcの中には有り、それらを変えてしまうと
おかしなことになりますので、それらを同期させてはいけません。なので/etc丸ごとは危険です。
このような理由から、/etcと/rootは、予備機の/var/backupに転送するようにしています。

このrsyncのスクリプト、backup.shはwgetで入手できるようにしてあります。
また、このbackup.shのハッシュ値は、34b31fadc3e16dcc8d39477c382fc529 です。
wgetで入手後は、ハッシュ値が一致するか確認してください。

[root@server root]# wget http://chibi.name/script/backup.sh
[root@server root]# md5sum backup.sh


それでは試しに、このbackup.shを実行してみます。

[root@server root]# . backup.sh

ここでは、まだbackup.shに実行権限を付与してないので、.(sourceコマンド)で実行しました。
ちゃんと予備マシンにデータが送れたか確認してみてください。

あとは、このbackup.shに実行権限を与えて、自動で実行する為にcrontabに登録します。

[root@server root]# chmod 700 backup.sh
[root@server root]# crontab -e
20 0-23/3 * * * /root/backup.sh > /dev/null 2>&1


ここでは、3時間置きの20分の時間に実行するようにしました。
何時間ごとに実行するかは、自分の環境に合わせて変更してください。


>>このページのTOPへ

rsyncのオプション

今回実行したrsyncのオプションについてまとめてみます。

-a ディレクトリ内に含まれる全てのファイル、/ディレクトリを、シンボリックリンク、パーミッション属性、グループ属性、所有者属性、タイムスタンプを保持したまま同期
-v バックアップ時にバックアップしているファイル名を表示する
-z データーを圧縮して転送する
--delete バックアップ元で削除されたファイルはバックアップ先でも削除する
-e ssh 別マシンにファイルを暗号化して転送する


>>このページのTOPへ

最終更新 : 06/17/2005


Fedoraの設定    SSH    Web    Mail    FTP    DNS    ファイルサーバ    運用管理    システム管理    ネットワーク    セキュリティ対策
Copyright (C) 2004-2007 chibi ,All Rights Reserved