スナップショット/リストアパターン#
本構成はFJcloud-O 東日本/西日本リージョン3向けとなります。
要求事項#
- FJcloud-O上の仮想サーバにメンテナンス作業(OSのパッチ投入等)を行う前にデータを高速にバックアップし、万一の場合に復旧できるようにしたい
- 増設ストレージのデータを変更する前に、データを高速にバックアップし、万一の場合に復旧できるようにしたい
対応するデザインパターン概要#
FJcloud-Oでは、仮想サーバで利用中のシステムストレージや増設ストレージのスナップショットを取得する スナップショット機能 を提供しています。
仮想サーバが起動中/停止中のどちらの状態でも取得可能です。
Note
仮想サーバ起動中のスナップショット取得にはリスクがあります。後述の 注意事項 を参照してください。
スナップショットのデータは、以下のようにリストアできます。
スナップショット | リストア先 | リストア手段 (API) |
リストア手段 (IaaSポータル) |
リストア概要 |
---|---|---|---|---|
システムストレージのスナップショット | 元の仮想サーバ | 提供済 | - | スナップショットの取得元の仮想サーバのシステムストレージにリストア |
新規仮想サーバ | 提供済 | 提供済 | 仮想サーバ作成時に、設定項目の "仮想サーバのブートソース" に "ストレージスナップショット" を指定して、新しいストレージにリストア | |
増設ストレージのスナップショット | 元のストレージ | 提供済 | - | スナップショットの取得元のストレージにリストア |
新規ストレージ | 提供済 | 提供済 | ストレージ作成時に、設定項目の "ストレージソース" 項目に "スナップショット" を指定して、新しいストレージにリストア |
Note
スナップショットから新たな仮想サーバを配備される場合や、確実な動作保証が必要な場合は、仮想サーバを停止してからスナップショットを取得してください。
構造(イメージ図)#
スナップショットの取得#
配備された仮想サーバのスナップショットを取得します。
本パターンでは、以下の2種類のストレージのスナップショットを取得する手順を掲載します。
- システムストレージ
- 増設ストレージ
スナップショットのリストア#
取得したスナップショットを取得元ストレージにリストアします。
本パターンでは、以下の2種類の取得元のストレージに対してリストアする手順を掲載します。
- システムストレージ
- 増設ストレージ
実装サンプル#
(A) システムストレージの場合#
1. スナップショットの取得#
- スナップショットを作成する仮想サーバを停止します。
- 「ストレージ」⇒「ブロックストレージ」と選択した画面で、スナップショットを作成するストレージの「アクション」メニューから、
「スナップショット作成」をクリックします。
どのストレージがどの仮想サーバで使用されているかは、「ブロックストレージ一覧」画面の「接続先」列をご確認ください。 - 「ストレージスナップショット作成」画面で、「スナップショット名」と「説明」を入力し、「作成」ボタンをクリックします。 「スナップショット名」は、例として "demo_snapshot" とします。
- 「スナップショット」画面で、新規作成したスナップショットの状態が "available" になっていれば、作成完了です。
2. スナップショットのリストア(元のシステムストレージへリストア)#
(1) 仮想サーバの解放#
IaaSポータルより、スナップショットを使用してリストアする仮想サーバを解放してください。
(2) スナップショットの状態確認#
リストアするスナップショットの状態が"available"であることを確認してください。
- 設定項目(REST API)
項目 | 設定値例 | 内容 |
---|---|---|
$SNAP_ID | (スナップショットID) | 仮想サーバにアタッチされているストレージから取得したスナップショットのID |
- 実行API
curl -X GET -s $BLOCKSTORAGE/v2/$PROJECT_ID/snapshots/$SNAP_ID -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq .
(3) システムストレージのステータス変更#
スナップショットからリストアしたいシステムストレージのステータスを、"in-use"から"available"に変更します。
- 設定項目(REST API)
項目 | 設定値例 | 内容 |
---|---|---|
$VOLUME_ID | (ボリュームID) | 仮想サーバにアタッチされているシステムストレージのボリュームIDを指定 |
- 実行API
curl -Ss $BLOCKSTORAGE/v3/$PROJECT_ID/volumes/$VOLUME_ID/action -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "X-Auth-Token: $OS_AUTH_TOKEN" -d '{"os-reset_status": {"status": "available"}}'
(4) システムストレージのリストア#
スナップショットを使用し、システムストレージをリストアします。
- 設定項目(REST API)
項目 | 設定値例 | 内容 |
---|---|---|
$SNAP_ID | (スナップショットID) | スナップショットをリストアするシステムストレージから取得したスナップショットIDを指定 |
$VOLUME_ID | (ボリュームID) | スナップショットをリストアするシステムストレージのボリュームIDを指定 |
- 実行API
curl -Ss $BLOCKSTORAGE/v3/$PROJECT_ID/volumes/$VOLUME_ID/action -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "OpenStack-API-Version: volume 3.41" -H "X-Auth-Token: $OS_AUTH_TOKEN" -d '{"revert": {"snapshot_id": "'$SNAP_ID'"}}'
(5) システムストレージのステータス変更#
スナップショットからリストアしたシステムストレージのステータスを、"available"から"in-use"に変更します。
- 設定項目(REST API)
項目 | 設定値例 | 内容 |
---|---|---|
$VOLUME_ID | (ボリュームID) | 仮想サーバにアタッチされているシステムストレージのボリュームIDを指定 |
- 実行API
curl -Ss $BLOCKSTORAGE/v3/$PROJECT_ID/volumes/$VOLUME_ID/action -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "X-Auth-Token: $OS_AUTH_TOKEN" -d '{"os-reset_status": {"status": "in-use"}}'
(6) 仮想サーバの復元#
IaaSポータルより、リストアが完了したした仮想サーバを復元してください。
以上でシステムストレージのリストアは完了です。
(B) 増設ストレージの場合#
1. スナップショットの取得#
- 増設ストレージがマウントされた仮想サーバのOS上で、スナップショットを作成する増設ストレージに対してアンマウントを行います(Linuxの場合のみ)。
- 「ストレージ」⇒「ブロックストレージ」と選択した画面で、スナップショットを作成するストレージの「アクション」メニューから、
「スナップショット作成」をクリックします。
どのストレージがどの仮想サーバで使用されているかは、「ブロックストレージ一覧」画面の「接続先」列をご確認ください。 - 「ストレージスナップショット作成」画面で、「スナップショット名」と「説明」を入力し、「作成」ボタンをクリックします。 「スナップショット名」は、例として "demo_snapshot_external_disk" とします。
- 「スナップショット」画面で、新規作成したスナップショットの状態が"available"になっていれば、作成完了です。
2. スナップショットのリストア(元の増設ストレージへリストア)#
(1) ストレージのアンマウント#
増設ストレージがマウントされた仮想サーバのOS上で、リストアを行う増設ストレージをアンマウントします(Linuxの場合のみ)。
(2) ストレージの切断#
「ストレージ」⇒「ブロックストレージ」と選択した画面で、リストアするストレージの「アクション」メニューから、「ストレージ切断」をクリックします。
(3) 増設ストレージのリストア#
スナップショットを使用し、増設ストレージをリストアします。
- 設定項目(REST API)
項目 | 設定値例 | 内容 |
---|---|---|
$SNAP_ID | (スナップショットID) | スナップショットをリストアする増設ストレージから取得したスナップショットIDを指定 |
$VOLUME_ID | (ボリュームID) | スナップショットをリストアする増設ストレージのボリュームIDを指定 |
- 実行API
curl -Ss $BLOCKSTORAGE/v3/$PROJECT_ID/volumes/$VOLUME_ID/action -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "OpenStack-API-Version: volume 3.41" -H "X-Auth-Token: $OS_AUTH_TOKEN" -d '{"revert": {"snapshot_id": "'$SNAP_ID'"}}'
(4) ストレージの接続#
- 「ストレージ」⇒「ブロックストレージ」と選択した画面で、リストアしたストレージの「アクション」メニューから、「ストレージ接続」をクリックし、対象の仮想サーバに接続します。
(5) ストレージのマウント#
増設ストレージを接続する仮想サーバのOS上で、リストアが完了した増設ストレージをマウントします(Linuxの場合のみ)。
以上で増設ストレージのリストアは完了です。
メリット・効果#
スナップショット機能を利用した場合のメリット・効果は以下の通りです。
- ストレージ単位で高速に丸ごとバックアップ可能
- 取得したスナップショットからストレージのデータ復元が可能
注意事項#
-
本パターンは2020年1月時点のFJcloud-O 東日本/西日本リージョン3にて動作検証しています。
-
オンライン状態で取得したスナップショットを再利用した場合の動作は保証できません。
確実な動作を期待するバックアップデータとしたい場合は、仮想サーバが停止状態のときに取得するようにしてください。 -
起動中の仮想サーバの増設ストレージのスナップショットを取得する際は、仮想サーバのOS上でいったんマウントを外すと、そのストレージへの書き込みを停止した状態でスナップショットを取得できるようになります。
Linux の場合、sync コマンドを実行後、umount コマンドでストレージをアンマウントします。 -
実装サンプルのようにスナップショットを元の仮想サーバにリストアした場合は、元の仮想サーバのIDは変わりません。
-
スナップショットから直接仮想サーバイメージは作成できません。
-
スナップショットは、スナップショット取得元の仮想サーバ/ストレージ、または、新規の仮想サーバ/ストレージに対してリストアすることができます。
スナップショットを、スナップショット取得元とは別の既存の仮想サーバ/ストレージにリストアすることはできません。
その他#
- スナップショットを取得した元のストレージは、スナップショットを削除しないと削除できません。