VPSサーバはConoHaを使っていますが、バックアップは別の会社にしたほうがリスク分散になります。この記事はさくらのクラウド オブジェクトストレージにバックアップを取る手順です。

前提条件

サーバ環境は次のようになっています。

  • CentOS 7.1
  • epel利用
  • s3cmd version 1.6.0(epelでyumインストール)

s3cmdインストール

yumで入ります。

# yum install s3cmd

s3cmdセットアップ

公式の手順を見ながらセットアップします。公式はs3cmd version 1.0.1ですが、手元の環境は1.6.0です。

http://cloud-news.sakura.ad.jp/2015/02/20/objectstorage_s3cmd/

/root/.s3cfg は公式に書いてあるhost_base、host_bucketのほか、signature_v2をTrueに変えました。

signature_v2 = True

この設定は、公式手順の一番下にある「動作仕様の違い例」のものです。

動作仕様の違い例
s3cmd-1.5.0以上の場合、signatureはv4がデフォルトとなりました。オブジェクトストレージはv2対応のため「–signature-v2」オプションを使用してください。

バックアップスクリプトの用意

汎用性まったくないうえにエラー処理していないので、その程度のバックアップです。VPSを使う場合はこれで十分かと思いますが、用心が必要なら監視を作りこむことになります。

#/bin/sh

rm -f /var/opt/ops_backup_app/*
tar cz /app | split -b 1G - /var/opt/ops_backup_app/app_tgz_


s3cmd del s3://noldor/b3/*
s3cmd mv --recursive s3://noldor/b2/ s3://noldor/b3/
s3cmd mv --recursive s3://noldor/b1/ s3://noldor/b2/

s3cmd put /var/opt/ops_backup_app/app_tgz_* s3://noldor/b1/

VPSサーバに1世代、オブジェクトストレージに3世代保存されます。バックアップ中は1世代減りますが、VPSサーバとオブジェクトストレージ合わせると3世代確保されます。

splitコマンドでtarボールを1GBに分割しています。ファイル分割については次の記事をご参照ください。

https://blog.takekoshi.net/split-cat

自動起動設定

cronに仕掛けます。

10 3 * * * root (/bin/sh /opt/ops/backup_app.sh 2>&1 >>/var/log/ops_backup_app.log) | /bin/tee -a /var/log/ops_backup_app.error.log >>/var/log/ops_backup_app.log

標準出力と標準エラー出力を/var/log/ops_backup_app.logに、標準エラー出力だけでさらに/var/log/ops_backup_app.error.logに保存しています。
この部分、teeを挟むことでどこかにバッファリングされないかどうか、ちょっと不安ですが確認できていません。エラー監視に支障はないとは思いますが、問題発生時にログが前後するかもしれません。

余談

awsのs3を使わないのは個人的な趣味です。商品に大きな差がないなら日本の会社にお金を使うようにしています。