広告sp

php-mpos マイニングプール

定期バックアップ

投稿日:

定期バックアップについて考えてみましょう。
※bitzenyd + php-mpos の構成を想定しており、本投稿で完全なバックアップを保証するものでは無い点にご注意ください。

いきなりサーバーが使えなくなる事態を考えた事がありますか?考えられる要因としてはすぐ思いつくものでも下記が挙げられます。

  • 不慮の事故(ハードウェア障害)
  • DDosでホスティング会社から強制解約
  • クラッキング
  • メンテナンス作業のミスによる消失

さて、完全に使えなくなった場合にどういった問題が起きるのでしょうか。

ウォレットの秘密鍵をバックアップしていない場合はプールの資産にアクセスできなくなります。データベースをバックアップしていない場合はプールを使っていた人の連絡先や残高が失われます。正確には残高自体は消えない(ブロックチェーン上にはプール残高として存在している)のですが誰にいくら残高があったのか分からなくなってしまいます。

もちろん他にも「プログラムで変更した部分」「各種ログ」など色々と消えて無くなりますがユーザーに迷惑をかける部分は上記の2点が大きいかと思います。みずたまりでは(本投稿時点の設定で)1日2回のAWSのS3への自動バックアップを行っています。以降はAWSにアカウントを持っている前提で話を進めます。
※AWSは有料です(特定の条件下では無料の範囲があります)

セットアップ作業

まずはAWSにコマンドでアクセスできるようにawscliをインストールします。

# apt-get -y install python-pip
# pip install awscli
# aws configure

スクリプト準備

最後の「aws configure」以降は対話形式で設定が行われるので適宜情報を入力します。続いてシェルスクリプトを用意します。

S3へのアップロードはオプションで指定しない限り基本は非公開になりますが、万が一データが流出した際を考慮して暗号化も行った方が安心です。暗号化方式については今回は伏せてありますのでご了承ください。

ウォレット用

※wallet.datを直接コピーすると壊れるという話を聞いたことがあるので、これが最良ではないかもしれません。6か月ほどこれで運用していますが今のところ私の環境では壊れていません。

$ vi ~/auto_backup_wallet.sh
以下、書き込む内容

#!/bin/bash

# ==== wallet backup ====

# バックアップ保存用ディレクトリの指定
dirpath='/var/tmp/backup'

# ファイル名を指定する
filename='wallet_'`date +%Y%m%d%H%M%S`

# バックアップ
cp /root/.bitzeny/wallet.dat $dirpath/$filename.dat

# 暗号化
※詳細は省略($dirpath/$filename.dat を暗号化して $dirpath/$filename.dat.enc に出力)

# S3にアップロード
/usr/local/bin/aws s3 cp $dirpath/$filename.dat.enc (s3出力先)

# 後始末
rm $dirpath/$filename.dat
rm $dirpath/$filename.dat.enc

データベース用

$ vi ~/auto_backup_database.sh
以下、書き込む内容

#!/bin/bash

# ==== database backup ====

# バックアップ保存用ディレクトリの指定
dirpath='/var/tmp/backup'

# ファイル名を指定する
filename='dump_mpos_'`date +%Y%m%d%H%M%S`

# バックアップ
mysqldump -u (DBユーザー名) -p (DBパスワード) --add-drop-table --single-transaction (DB名) | gzip > $dirpath/$filename.sql.gz

# 暗号化
※詳細は省略($dirpath/$filename.sql.gz を暗号化して $dirpath/$filename.sql.gz.enc に出力)

# S3にアップロード
/usr/local/bin/aws s3 cp $dirpath/$filename.sql.gz.enc (s3出力先)

# 後始末
rm $dirpath/$filename.sql.gz
rm $dirpath/$filename.sql.gz.enc

定期実行の設定

cronの設定を行います。何種類か方法がありますが下記の例ではカレントユーザーとして実行する方法です。下記の例では、ウォレットは4時20分と16時20分、データベースは4時30分と16時30分で実行するようにしています。

$ crontab -e
以下、内容

MAILTO="送信先メールアドレス"

20 4,16 * * * ~/auto_backup_wallet.sh
30 4,16 * * * ~/auto_backup_database.sh

注意

このまま回し続けると単調増加でS3の容量を消費し続けることになります。AWSは従量課金なのでご注意ください。

-php-mpos, マイニングプール

Copyright© みずたまりブログ , 2018 All Rights Reserved Powered by STINGER.