【さくらのクラウド】アーカイブを利用したバックアップ取得

平成30年北海道胆振東部地震で被災された皆さまに謹んでお見舞い申し上げます。

今回の震災では石狩リージョン(石狩第1/第2ゾーン)において非常用発電機設備を起動・停止するための制御回路の故障により専用サーバの一部に影響が出ていたとのことですが、 クラウドをはじめとしたその他のサービスには影響は出なかった模様です。
とはいえ一時は石狩データセンターの自家発電設備により稼働しているという状態になっていました。

support.sakura.ad.jp

現在は北海道電力からの電力供給が復旧したとのことですが、仮に非常用発電設備の燃料供給が滞ったり商用電源の復旧が遅れた場合はサービスの停止といった影響が出ていた可能性もあります。

なので、これを機に利用しているクラウド上のサービスのBCP/DRといった運用について再確認をされる方も多いと思います。

この記事ではその一環として、さくらのクラウド上で稼働しているサーバのディスクを ローカルマシンや石狩以外のサーバにバックアップするための方法をご紹介いたします。

バックアップ方法あれこれ

さくらのクラウドにてディスクのバックアップを取得するにはいくつかの方法があります。

サーバ内のデータ領域などを自前でバックアップする方法については定期的にデータベースのダンプを取得する/静的ファイルは冗長化されたストレージに格納するなど様々な方法がありますが、環境に応じて方法が異なり一概にどの方法が良いとは言いにくい面があります。 このため、この記事では比較的汎用的に適用できる、2番目のさくらのクラウドが提供しているアーカイブ機能を中心に扱います。

アーカイブ機能

さくらのクラウドでのアーカイブ機能とは、仮想ディスクからバックアップを作成する機能 のことを指します。

knowledge.sakura.ad.jp

現在稼働中のサーバのディスクのイメージバックアップを取得する機能ですね。

取得したアーカイブはサーバ作成時のソースとして用いる他に、FTPSを用いてダウンロードしたり、他ゾーンにコピーしたりすることができます。

また、アーカイブはサイズと保存日数により課金されるようになっています。

2018/09時点でのアーカイブ価格

f:id:febc_yamamoto:20180907124313p:plain

アーカイブをどこに保存するか

取得したアーカイブの保存先候補としては大きく分けると以下のようなものがあります。

  • 作成元ディスクと同一ゾーン内に保存
  • 他ゾーンにコピーして保存
  • ローカルマシンなどにダウンロードして保存

それぞれに一長一短があります。

保存先 長所 短所
同一ゾーン - コピー\転送の時間がないので高速
- 後述する自動バックアップ機能が利用可能
- ゾーン\リージョン障害の場合に利用できない可能性
他ゾーンにコピー - ゾーン\リージョン障害時に影響を受けにくい - 作成時にコピー\転送分の時間がかかる
- 作成はコントロールパネルから行う必要がある(API非対応)
ローカルマシンなどにダウンロード - プラットフォーム障害の影響を受けにくい
- ダウンロード後にアーカイブを削除することでコストを抑えられる
- ダウンロードに時間がかかる
- 復元時に再度アップロードする時間がかかる

実際にはそれぞれをバランスよく組み合わせて利用することになるかと思います。

次に保存先ごとにアーカイブ取得方法について見ていきます。

アーカイブ取得方法

作成元ディスクと同一ゾーンに保存

最も単純な方法です。コントロールパネルやCLIから作成元ディスクを指定してアーカイブを作成します。

コントロールパネルの場合

アーカイブ作成画面にて作成元ディスクを指定して作成します。

f:id:febc_yamamoto:20180907124336p:plain

この方法は自動バックアップというさくらのクラウドの機能を利用して自動化することも可能です。 詳細は以下のドキュメントを参照してください。

manual.sakura.ad.jp

CLIの場合

さくらのクラウド CLI Usacloudでも取得可能です。 Usacloudのセットアップ(APIキー設定など)をあらかじめ行っておけば以下のように取得できます。

# アーカイブ作成
$ usacloud archive create --source-disk-id <ディスクID> --name <作成するアーカイブの名称>

他ゾーンにコピーして保存

次に他ゾーンにコピーする方法です。
ディスクのアーカイブ作成は同一ゾーンに対してのみ行えるようになっています。
このため、まずは 作成元ディスクと同一ゾーンに保存 の手順でアーカイブを作成し、その後そのアーカイブを他ゾーンにコピーするという手順になります。

なお、アーカイブを他ゾーンにコピーする方法はコントロールパネルでのみ可能です。APICLIからは実行できませんのでご注意ください。

作成自体は簡単で、アーカイブ作成画面にてコピー元アーカイブのゾーンとアーカイブを選択して作成するだけです。

f:id:febc_yamamoto:20180907124635p:plain

ただ、一時的なものだと思いますが、他ゾーンにコピーする処理が混雑しているのか、石狩->東京への転送が503エラーとなることがありました。

f:id:febc_yamamoto:20180907124431p:plain

この場合、少し時間を置いて試すか、次に紹介する ローカルマシンなどにダウンロードして保存 の方法を試すのが良さそうです。

ローカルマシンなどにダウンロードして保存

さくらのクラウドアーカイブはFTPSによるダウンロードが行えるようになっています。

コントロールパネルやAPIでダウンロードを指示するとFTPS接続情報(ホスト名/ユーザー名/パスワードなど)が発行されます。 これを用いてwinSCPFileZillaなどのFTPクライアントツールでFTPSによるダウンロードを行います。

ダウンロードするアーカイブはあらかじめ作成しておく必要がありますので、まずは 作成元ディスクと同一ゾーンに保存 の手順でアーカイブを作成しておきます。

コントロールパネルの場合

保存したアーカイブの詳細画面の右上にFTPを開始というボタンがあります。

f:id:febc_yamamoto:20180907130005p:plain

これをクリックするとFTPS接続情報が表示されます。

f:id:febc_yamamoto:20180907130023p:plain

この情報を用いてFTPクライアントツールでダウンロードを行います。 ダウンロード完了後は FTPを完了ボタンでFTPS接続情報を無効化しておきましょう。

CLIの場合

UsacloudはFTPSクライアント機能を持っています。以下のようにすればアーカイブのダウンロードが可能です。

# この例では /tmp/archive.rawに保存
$ usacloud archive download --file-destination /tmp/archive.raw <アーカイブのID or 名称>

標準入力への出力も対応しているため、そのままgzipに渡して圧縮も可能です。

$ usacloud archive download -y <アーカイブのID or 名称> | gzip -c > /tmp/archive.raw

参考までに、アーカイブ取得〜ダウンロード〜gzip圧縮までを行うシェルスクリプトを掲載しておきます。

#!/bin/bash

# 対象ディスクの名称を設定
SOURCE_DISK_NAME=<ディスク名>
# ゾーン
ZONE=<対象ゾーン(is1a or is1b or tk1a)>

# =====================================

# ディスク名からIDに変換
SOURCE_DISK_ID=`usacloud --zone $ZONE disk read -q ${SOURCE_DISK_NAME}`
if [ -z "$SOURCE_DISK_ID" ]; then
  echo "Disk '${SOURCE_DISK_NAME} is not found'
  exit
fi

# アーカイブ作成
ARCHIVE_ID=`usacloud --zone $ZONE archive create -y -q --source-disk-id=${SOURCE_DISK_ID} --name ${SOURCE_DISK_NAME}`

# ダウンロード & gzip
usacloud --zone $ZONE archive download -y $ARCHIVE_ID | gzip -c > /tmp/${ARCHIVE_ID}.raw.gz

# アーカイブ削除
$ usacloud archive delete -y ${ARCHIVE_ID}

オプション: usacloud+curlでのダウンロード

以下の記事にあるようにcurlコマンドを利用することも可能です。

qiita.com

Usacloudと併用すると以下のような感じになります。

# アーカイブのID
ARCHIVE_ID=<アーカイブのID>
# ftp-openコマンドでFTP接続情報を取得、--formatオプションでcurlコマンドを作りevalする
eval $(usacloud archive ftp-open -y --format 'curl -u {{.User}}:{{.Password}} --ftp-ssl --ftp-pasv -k --compressed ftp://{{.HostName}}:21/archive.img -o /tmp/${ARCHIVE_ID}.raw' ${ARCHIVE_ID})

# 終わったらFTPクローズして削除
$ usacloud archive ftp-close -y ${ARCHIVE_ID}
$ usacloud archive delete -y ${ARCHIVE_ID}

UsacloudのFTPS処理はあまり最適化してない(すいません…)のでこちらの方が早いかも?と思い試してみましたがあまり変わらずでした。
ちゃんと試したら違いがあるかもしれませんが今回はそこまで調べていません。また機会があれば試してみます。

組み合わせ

アーカイブ取得の各方法は単独で利用するのではなく組み合わせて利用することが多いと思います。
普段のバックアップとして自動バックアップを用い、予算に応じて他ゾーンへのコピーやローカルマシンへのダウンロードなどを組み合わせるといった具合です。

各環境に最適な方法をご検討ください。

おまけ:その他のバックアップツール

ググって見たらバックアップツールはUsacloud以外にもちょいちょいありました。

qiita.com

itexp.hateblo.jp

まとめ

この記事では様々なアーカイブ取得方法について紹介しました。

障害はどんなプラットフォームでも避けて通れないものです。 普段から障害を考慮した設計、バックアップ、訓練を行っておきたいものですね。

障害に負けずがんばっていきましょう!!

おまけ: コミュニティによるサポート

さくらのクラウドのユーザーコミュニティSacloudにはSlackワークスペースがあります。

ツールの使い方をはじめとしたQAなどを行えますので、お困りの際はぜひご参加ください。

さくらのクラウド ユーザーコミュニティSacloudのSlackワークスペース

https://slack.usacloud.jp

以上です。