VPSが4つあるとしましょう。それぞれで、次のcronコマンドはローカルバックアップのために週に1回実行されます。
0 0 * * 6 zip -r /root/backups/dirs/html-$(date +\%F-\%T-).zip /var/www/html
1 0 * * 6 find /root/backups/dirs/* -mtime +30 -exec rm {} \;
0 0 * * 6 mysqldump -u root -pPASSWORD --all-databases > /root/backups/db/db-$(date +\%F-\%T-).sql
1 8 * * 6 find /root/backups/db/* -mtime +30 -exec rm {} \;
(4つのVPSのそれぞれで)各ローカルバックアップのコピーを次に送信したいと思います。5番目のVPS、中央バックアップ環境として使用します。転送はできるだけ安全でなければなりません(合理的な範囲内)。
rsyncを使用してこのタスクを自動的に(スケジュールに従って)どのように実行できますか?
(それともSCPですか?)
答え1
各バックアップがファイルであると仮定すると(上記の2つのファイルをアーカイブして)、SCPと比較される同期これは、ファイルの転送に加えて、全体的に作業量が少ないためです。
自動化が行われる限り、次のように設定する必要があります。
- 5番目のVPSはバックアップを読むことができるユーザーで、パスワードなしで他の4つのVPSに接続できます(管理は少し簡単ですが、コーディングするのは難しいです)。
- 他の4つのVPSはパスワードなしで5番目のVPSに接続できます。それぞれに別々のアカウントを使用することをお勧めします(管理は少し難しいですが、コーディングは簡単です)。
どちらも好む方法は通常暗号化されていないSSHキーです。完了したら、クローンジョブ(1の場合は5番目のVPS、2の場合は4つのVPS)を設定して、最新のバックアップを希望の場所に転送できます。
以下は、ディレクトリ内の最新のファイルをリモートシステムにコピーする2番目のオプションのための迅速で汚れたシェルスクリプトです。
#!/bin/bash
file=`ls -t "${1}" | head -n 1`
scp -pCB "${1}"/"${file}" ${2}
バックアップが格納されているディレクトリパスを最初のパラメータとして指定し、5user@host:/path
番目のVPSの場所を指す文字列を2番目のパラメータとしてこのコマンドを実行すると、ローカルシステムの最新のバックアップが5番目のVPSにコピーされます。
-p
SCPオプションはmtimeを保存し(同じコマンドを使用して以前のバックアップをfind
縮小することができます)、-C
圧縮を有効にし(パフォーマンスが向上または改善されない可能性があります)、-B
メッセージが表示されないようにします。
答え2
この手順では、各クライアント VPS に対して個別のユーザーを作成します。必ずしも必要ではありませんが、VPSが破損している場合は、他のシステムがバックアップを読み書きできないようにしたいと思います。
アカウントがあると仮定するとVPN1 VPN 2、バックアップサーバーVPSから。
SSH経由でバックアップサーバーのVPSにアクセスするためにパスワードの代わりに証明書を使用するように各VPSを設定します。
- ユーザーを作成します(「バックアップ」など)(必ずしも必要ではありません)。
ssh-keygen
各VPSでユーザー「バックアップ」用のSSHキーセットを作成します。- 各VPSアカウント
~/backup/.ssh/id_rsa.pub
にコンテンツをリンクします。~/<vps-user>/.ssh/authorized_keys
このユーザーだけが読めることを確認してください(chmod 600 ~<vps-user>/.ssh/authorized_keys
)
これで、各VPSで「バックアップ」アカウントからバックアップサーバーvpsアカウントにSSH経由で接続できるようになりました。
各クライアントマシンに対して、VPSサーバーマシンにバックアップを書き込むディレクトリを作成し、そのクライアントのVPSアカウントでのみ使用できるようにします。例:
mkdir /var/spool/big-backups/vps1; chown vps1 /var/spool/big-backups/vps1; chmod 600 /var/spool/big-backups/vps1;
各vpsでユーザー「バックアップ」用のcronjobを作成します
rsync -avz /root/backups/db/ -e "ssh -l vps1" /root/backups/ /var/spool/big-backups/vps1/"
。明らかに、クライアントVPSシステムでローカルバックアップジョブの後にスケジュールします。 (z
ファイルがすでに圧縮されていてデータベースのバックアップが例にない場合、rsyncのフラグは望ましくありません...)
必要scp
に応じて代わりに使用できますrsync
(なぜそうするのかわかりませんが、すべて機能します)。