さくら VPS サーバをいくつか借りていて、ホストの設定ファイルやデータべ―スダンプなどのバックアップを AWS S3 に置いています。S3 へのアップロードは無料なので、それなりに大きなファイルを毎日バックアップしても心配する必要はありません。
元々個別にスクリプト書いて、tar.gz したアーカイブファイルを s3sync で同期していました。その後仕組みをある程度まとめて Gitlab で内部管理していたんですが、デプロイキーの扱いが面倒だったため、今回 GitHub に上げました。
serverbackup-s3
tilfin/serverbackup-s3 · GitHub
特徴
- バックアップファイルのローテーション
- 複数の S3 バケットに日毎に振り分けられる。例えば、奇数日は東京、偶数日はシンガポールのバケットへということが可能。
- バックアップスクリプトをサービスごとに分けて管理できる。
使い方
s3sync & serverbackup-s3 のインストール
s3sync は開発が止まっていて、Ruby 1.9 以降に未対応だったり、etc ディレクトリの位置がアレだったりするのですが、その辺を修正した私のフォークしたリポジトリを使うと簡単です。
以下の例では、/backup の下にバックアップ処理をまとめます。
1 | $ sudo -i |
s3sync の設定
1 | # cd /backup/s3sync/etc |
s3config.yml に AWS のアクセスキーとシークレットキーをセットします。
1 | aws_access_key_id: <your access key> |
serverbackup-s3 の設定
1 | # vi /backup/serverbackup-s3/conf |
S3BucketsとMaxAgeを下記のようにすると、tokyoのバケットに0,3日目のファイルが、singaporeには1,4日目のものが、sydneyには2,5日目のものがバックアップされます。
1 | S3Buckets=tokyo,singapore,sydney |
バックアップスクリプト
/backup/serverbackup-s3/conf/conf.d の中には各目的やサービスごとのバックアップスクリプトが置いてあります。これらを編集するなり追加してください。rc.d のように S で始まるファイルだけ有効とみなします。
例えば、S00hostfiles は /etc を全て tar.gz します。ファイル名は日にちのインデックス n が付いて、n-etc.tgz が tmp 中に作られます。そして最後 s3sync によって宛先となるバケットに同期されます。
1 |
|
結果
AWS コンソールで見るとこのようになります。virginiaとsigaporeの2つリージョンに6日分交互に保管しています。
実際にホストのディスクが飛んだときにバックアップがどうおこなわれていたかわかるように serverscripts-s3 フォルダ内も tar.gz して n-backup-scritps.tgz としてバックアップされます。