IDCFクラウドのオブジェクトストレージにWordPressとMySQLのバックアップを保存する

Linux

ブログサイトのバックアップをIDCFクラウドのオブジェクトストレージに転送する設定を行いました。

転ばぬ先のバックアップ

このブログサーバーは現在ConoHa VPSで稼働しているのですが、バックアップを外部保管したいと以前から考えていました。日次でウェブサイトのコンテンツツリーのtar.gzバックアップと、MySQLというかMariaDBのダンプをローカルには取得しているのですが、当然このサーバーが壊れたらデータはなくなってしまいます。なので、外部に転送しておくのが良いと。

アーカイブの外部保管といえばクラウドサービス等のオブジェクトストレージになるわけで、いつかは設定したいなぁと思っていたのですが、今回、ついにやってやりましたよ。

バックアップ先はIDCFクラウドのオブジェクトストレージ

バックアップ先を何処にするか、ということですが、当然AWSのS3等が検討対象となるわけです。手近なところで言えば、ConoHaもオブジェクトストレージサービスを提供してくれています。ただ、とは言えバックアップなので、無駄なコストは掛けたくない。

そこで白羽の矢を立てたのが、IDCFクラウドのオブジェクトストレージです。元々、IDCFはこのブログドメインのメールサーバーとして使っていましたので、アカウントもあります。他にも以下のメリットがあります。

  • 50GBまで無料。
    • バックアップアーカイブは高々数GBなので、無料枠内で使える。
    • ConoHaもAWSも有料。特にConoHaは100GB単位でしか容量を数えてくれないので高くつく。
  • アップロードに係る転送料金が無料。外部からの転送でも無料。
  • AWS S3互換でCLIで操作が可能。これは当然のこととして。
  • ConoHaから充分近い。ping応答数msなので、充分実用に足る。
    • 転送帯域はConoHa側が100Mbpsなので、あまり多くは望まない。

という訳で、IDCFに自動転送してやります。

s3cmdでバッチで、dockerで動かす設定

まぁ普通にローカルに作成されたバックアップファイルをs3cmdで転送するんですが、それはそれ、ここは全部コンテナでやりたいよね、ということで、バッチ環境からコンテナ化します。ホストにs3cmdを入れないと。

IDCFクラウドのオブジェクトストレージの準備

まずはIDCFのオブジェクトストレージにアカウントとbucketを作ります。

オブジェクトストレージサービスを有効化するのですが、50GBまで無料の「従量プラン」を選びます。間違ったり、あるいは他の用途のために「10TBパック」を選んでも良いですが、結構高額ですので。

そうすると、オブジェクトストレージのコンソールにアクセスできるようになりますので、まずはアカウントというか「APIユーザー」を作成します。ユーザー名はドメイン付きのメールアドレス形式が必須になりますので、適当に「test@domain.domain」とか、なんでも良いので作ります。

必要なのはアカウントではなく、アカウントに紐づくAPI KeyとSecret Key、あとはエンドポイントになりますので、これらの情報を保存しておきます。

次に、オブジェクト保存先となる「バケット」を作成します。今回は、2個作りました。

  • wordpress.backup・・・Webコンテンツのバックアップ保存用
  • database.backup・・・MariaDBバックアップ保存用

とりあえずここまででオブジェクトストレージは準備完了です。

s3cmd用コンテナの作成

バックアップ転送処理用のコンテナイメージを作成します。以下のようなDockerファイルを作成します。

FROM ubuntu
RUN apt-get update && apt-get upgrade -y &&\
    ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN apt-get install -y s3cmd
COPY s3cfg /root/.s3cfg

ほぼubuntuのテンプレなんですが、s3cmdのインストールと、あと設定ファイル「.s3cfg」だけ入れ込んだコンテナイメージを作成します。s3cfgは以下のような感じです。

[default]
access_key = [API Key]
secret_key = [Secret Key]
host_base = ds.jp-east.idcfcloud.com
host_bucket = %(bucket)s.ds.jp-east.idcfcloud.com
use_https = True
multipart_chunk_size_mb = 15
send_chunk = 32768
signature_v2 = True

設定値のポイントは以下。

  • access_key=API Key、secret_key=Secret Keyです。
  • host_baseがエンドポイント。host_bucketは上記のままです。現在のところオブジェクトストレージは東日本リージョンにしかないので、みんなこれになると思います。
  • use_httpsをTrueにするとSSL通信(暗号化)してくれます。ただしcertを設定しないので、s3cmdコマンド実行時に–no-check-certificateオプションが必要になります。send_chunkはSSL有効化時に必要です。
  • multipart_chunk_size_mbを設定してmultipart転送を行います。オブジェクトサイズが大きい場合には設定したほうが良さそうです。
  • signature_v2を設定します。

最後のsignature_v2は、これを設定しないと、以下のエラーでputに失敗します(※lsは成功するのが厄介なところ)。

ERROR: S3 error: 400 (InvalidRequest): The authorization mechanism you have provided (AWS4-HMAC-SHA256) is not supported.

s3cmdのバージョンが新しいものでこの設定が必要になるようです。

以上、Dockerfileとs3cfgファイルを配置したディレクトリで、docker buildします。ややこしいですが、コンテナ名も「s3cmd」にします。

% docker build -t s3cmd

イメージができたら、動作確認します。ゴミが溜まるので、–rmを忘れずに。

% docker run --rm s3cmd s3cmd --no-check-certificate ls
2016-11-15 14:27  s3://database.backup
2016-11-15 14:27  s3://www.backup

こんな感じになればOK。動作確認として、ファイル送信も確認。

% dd if=/dev/zero of=test.file bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00292809 s, 358 MB/s
% docker run --rm -v `pwd`:/mnt s3cmd s3cmd --no-check-certificate put /mnt/test.file s3://database.backup
WARNING: test.file: Owner username not known. Storing UID=1000 instead.
WARNING: test.file: Owner groupname not known. Storing GID=1000 instead.
upload: '/mnt/test.file' -> 's3://database.backup/test.file' (1048576 bytes in 0.2 seconds, 4.83 MB/s) [1 of 1]

UIDのWARNINGとかはとりあえずとして、これでオブジェクトが転送されていれば問題無しです。

cronでのバックアップ設定

あとは、cron設定で起動されるバックアップスクリプトの最後に、このスクリプトでデータを転送する設定を入れればOKです。以下、mariadbのサンプルです。MariaDBもdockerコンテナで動かしているので、コンテナ内でdumpして、バックアップファイルを作り、そのファイルを再度s3cmdコンテナからputします。転送ログをsyslogで確認できるよう、loggerにパイプしています。

% cat /usr/local/bin/backup-mariadb.sh
#!/bin/sh
BACKUP=mysql-wordpress-dump-`date +%Y%m%d%H%M%S`.gz
/usr/bin/docker exec blogserver_mariadb_1 /usr/bin/mysqldump -uroot -p<<password>> wordpress | gzip > /share/mariadb/backup/${BACKUP}
/usr/bin/docker run --rm -v /share/mariadb/backup:/backup s3cmd s3cmd --no-check-certificate put /backup/${BACKUP} s3://database.backup | logger

手動でバックアップ試験をするなどして確認して完了です。

バックアップはやっぱりオブジェクトストレージ

これでいつブログサーバーが壊れても復旧できます。安心です。オブジェクトストレージは便利です。しかもIDCFなら50GBまで無料って、素敵すぎます。是非活用しましょう。

今回の設定もすべて処理をdocker化していますが、兎に角、コンテナで処理系をパッケージングすると、サーバーの構成の維持管理が非常に楽になります。なんでもdocker(というかコンテナ)で考えると、処理系がパズルのように組み上がり、なんかちょっと嬉しい気分になれますので、これもオススメ(苦笑)。

・・・あとは、50GB超えるまでに、ハウスキープ準備しなきゃ・・・(汗)

コメント

タイトルとURLをコピーしました