S3バケットにローテーションしてバックアップする serverbackup-s3

さくら 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 の下にバックアップ処理をまとめます。

$ sudo -i
# mkdir /backup
# cd /backup
# mkdir log
# mkdir tmp
# git clone --depth 1 https://github.com/tilfin/s3sync.git
# git clone --depth 1 https://github.com/tilfin/serverbackup-s3.git

s3sync の設定

# cd /backup/s3sync/etc
# vi etc/s3config.yml

s3config.yml に AWS のアクセスキーとシークレットキーをセットします。

aws_access_key_id: <your access key>
aws_secret_access_key: <your secret access key>

serverbackup-s3 の設定

# vi /backup/serverbackup-s3/conf

S3BucketsMaxAgeを下記のようにすると、tokyoのバケットに0,3日目のファイルが、singaporeには1,4日目のものが、sydneyには2,5日目のものがバックアップされます。

S3Buckets=tokyo,singapore,sydney
MaxAge=6
バックアップスクリプト

/backup/serverbackup-s3/conf/conf.d の中には各目的やサービスごとのバックアップスクリプトが置いてあります。これらを編集するなり追加してください。rc.d のように S で始まるファイルだけ有効とみなします。
例えば、S00hostfiles は /etc を全て tar.gz します。ファイル名は日にちのインデックス n が付いて、n-etc.tgz が tmp 中に作られます。そして最後 s3sync によって宛先となるバケットに同期されます。

#!/bin/bash
##############################
#
#  backup Host files
#
##############################

echo "Host files dump start."

# /etc
tar zcf ${BKUP_PREFIX}etc.tgz -C / etc

echo "Host files dump end."

結果

AWS コンソールで見るとこのようになります。virginiaとsigaporeの2つリージョンに6日分交互に保管しています。

f:id:tilfin:20140227230939p:plain

実際にホストのディスクが飛んだときにバックアップがどうおこなわれていたかわかるように serverscripts-s3 フォルダ内も tar.gz して n-backup-scritps.tgz としてバックアップされます。