CDP:Snapshotパターン
データのバックアップ
目次 |
解決したい課題
データは何よりも大切なものとして「安全」に扱わなければならない。そのためには、データをバックアップすることが欠かせない。具体例としては、テープを用いてバックアップしたデータを別拠点に保存しておく方法がある。しかしテープバックアップはテープ交換や保管などにコストが掛かかるうえ、これらの作業は自動化が困難である。高価な装置を購入することで半自動化することは可能だが、それでもテープの容量は有限のため補充が必要になり、完全な自動化は困難である。
クラウドでの解決/パターンの説明
クラウドでは安全で容量制限がない「インターネットストレージ(Webストレージともいわれる)」を比較的安価に利用できる。
ある瞬間のデータを複製したバックアップを「スナップショット」というが、これはクラウドではよく用いられる概念である。クラウド上で仮想サーバーのデータ(OS含む)やその他のデータをインターネットストレージに複製するのは簡単で、スナップショットを定期的に実施する負担は小さい。クラウドでのスナップショットは管理画面でワンクリックするだけで取得できるほか、APIを使用して取得することもできる。つまりプログラムを使用して自動化できるということだ。インターネットストレージは容量を気にする必要が無いため、プログラムでスナップショットを定期的に取得すれば、バックアップを自動化できる。
また、プログラムの更新確認やテストの環境を一時的に作る際、ある特定のデータ断面を用いて環境を作りたいというニーズは高い。この場合はデータだけではなくOSごと複製する必要があるが、スナップショットを使用すればOSごと複製できるので、こうしたニーズにも応えられる。
実装
AWSの仮想ストレージであるEBSにはスナップショット機能が付いているのでこれを利用する。取得したスナップショットは、99.999999999%の耐久性を持つように設計されたオブジェクトストレージS3に保管される。
EBSのスナップショット機能を用いると、EBSに含まれるデータが丸ごとS3に複製される。S3へ格納されたスナップショットは新たなEBSとして復元できる。もしEBS上のデータが破損したりロストしたりしても、スナップショットを取った時点のデータをS3から復元できる。
EBSをデータディスクとして使っていた場合、スナップショットを取得すれば任意の時点のデータバックアップとなる。容量を気にすることなく必要なときに必要なだけ新たなバックアップを作成できる。
EBSをブートディスクとして使っていた場合、OSごと複製され、それはAMIとして登録できる。そのデータから新しいEC2インスタンスを起動することも可能である。
スナップショットはリージョン間コピーが可能であるため、例えば東京リージョンで取得したスナップショットを定期的にシンガポールリージョンに転送することで、東京リージョン全体が障害で利用できなくなった場合でもデータをシンガポールリージョンで復旧することで大規模災害に対応したDR環境として利用することができる。
スナップショットは差分バックアップにて取得されるため、高い頻度でスナップショットを取得したとしてもスナップショット保存料金は低額に抑えることができる。障害復旧地点(RPO)に合わせてスナップショットを取得することが望ましい。
構造
利点
- バックアップの取得をプログラムから制御できる。つまり、人手を介すことなく自動化できる。また取得したスナップショットのタグに追加情報を付与し、追加情報を元に古いスナップショットを自動削除することで、プログラム内で世代管理を実施することができる。
- バックアップ先に耐久性の高いS3を用いることができる。
- EBSのデータを丸ごとバックアップでき、取得したバックアップは迅速に新たなEBSとして利用できる。万が一の障害時にも容易に復旧できる。また前述の通り、リージョン間転送を行えば、別リージョンにも復旧が可能である。
- ユーザーデータだけでなく、OSごとバックアップを取得できる。
- OSごと取得したバックアップはAMIとして登録できるので、新たなEC2インスタンスを起動することも可能。
- 特定の状態(例えばアプリケーションを入れ替えた後や、データを更新した後)のデータを取っておくことが可能で、しかも容量を気にしなくてもよいので複数の世代を取っておける。障害や不具合があった場合に容易に環境を再現できるし、任意のタイミングの環境に戻すことができる。
注意点
- EC2インスタンスを起動したままでスナップショットをとることは可能である。ただし、スナップショットを取得する際、データの整合性を確保しなければならない。EBSをマウントしたままスナップショットを取得するとき、ファイルシステム(EXT3やNTFS)のキャッシュをはき出したり、アプリケーションのトランザクションを終わらせたりするなど、論理的に整合性を取った状態でスナップショットを作成する必要がある。
- ブート領域とデータ領域をひとつのディスクで構築するか、分けるかについてはメリット・デメリットのトレードオフがある。一つで構築した場合、スナップショットの取得やEC2インスタンスの起動が容易である。[関連ブログ 1] 一方で、ブートディスクのデータサイズは小さい方が仮想サーバーの起動は早い。また、定期的に行わるディスクチェック(Linuxの場合はfsck)の際に時間もかからない。
その他
- ブート部分よりデータ部分のほうが頻繁にバックアップを取得することが多いため、ブート部分とデータ部分を別のEBSに分けておくこともよく行われる。
- EBSスナップショットは他のAWSアカウントに共有できるが、暗号化されたままで取得したスナップショットは他AWSアカウントに共有しても利用できない。