CentOSサーバのバックアップ方法の検討
現在利用しているCentOSで「サーバ(グローバルIP)の特定のディレクトリのバックアップを取って、それをバックアップ先の外部PC(プライベートIP)から自動的に取得する。」ということをやってみた。
その覚え書き。
バックアップ
バックアップの方法だが、下記のサイトを参考にcronを利用して自動的に行うことにした。
自動バックアップ運用(tar+GnuPG+rsync/ftp) - CentOSで自宅サーバー構築
どうやって外部のPCからデータを取得するか
バックアップ先のPCがグローバルIPを持ったサーバの場合はftpサーバを立ててそこへ自動的に送ってやるようにすればいいと思う。
しかし、プライベートIPしか持っていないので、サーバへ接続してやる必要がある。
あと、処理をできるだけ自動で行いたい。
そこで、いろいろ試してみた結果、sftp + rssh + pycron を利用することで、やりたかった処理ができるようになった。
rsshのインストールと設定
以下のサイトを参考にしてインスールした。
シェルは使わせずに scp/sftp のみ公開したい場合 - Sleepless geek in Seattle
まず、下記のコマンドでrpmforgeのレポジトリを追加する。
$ wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm $ rpm -Uhv rpmforge-release-0.5.2-2.el5.rf.i386.rpm $ yum -y install rssh
次に、rsshの設定を行う。
/etc/rssh.conf を以下のように修正する。
#allowscp
allowsftp
#allowcvs
#allowrdist
#allowrsync
sftp用ユーザの作成
sftp専用ユーザを作成する。
$ useradd user $ passwd user $ chsh user -s /usr/bin/rssh
$ ssh-keygen -t rsa $ mv ~/.ssh/id_rsa.pub authorized_keys
id_rsaをUSBなどで外部PCへコピーする。
クライアントPCの設定
sftp用バッチファイル batch を作成する。
cd /backup get backup.tar.bz2 quit
backup.bat を作成する。
@ECHO OFF sftp -b batch user@ホスト名 REM ファイル名を日付を含むものに変更 mv backup.tar.bz2 backup_%date:~0,4%%date:~5,2%%date:~8,2%.tar.bz2
backup.batに実行権限を付加。
chmod 700 backup.bat
下記のサイトを参考にして、pycronからbatch.bat を自動で実行するように設定。
Windowsでcronが使えるツール「pycron」 - Sometime PHP
参考サイト
まとめ
とりあえずこれで自動的にバックアップを取得してくれるようになったはず。
まだ、完全に動作を確認したわけではないので、後日追記。
追記 2010/11/17
ちょっとpycronの動作がややこしかったので、備忘録的な追記。
- pycronで処理を行うと、バッチファイル実行時のカレントディレクトリがpycronのインストール先のフォルダになる。
- pycron_console.exeを実行していないとうまくpycronが動いてくれない。