制限付きのAmazon EC2バックアップ戦略(ほとんどまたはまったくスナップショットを取得できませんか?)


9

同様の質問が尋ねられましたが、EC2の使用について私の理解に何か欠けているものがないかどうかを知るために、状況下で推奨されるものを知る必要があります。

小規模な新興企業がEC2ネットワークでビジネスを運営しており、バックアップオプションについてアドバイスを求めてきました。彼らは現時点で自己資金を供給しており、可能であればコストを節約するためにできることを行っています。それらのシステムの構成を深く掘り下げることなく、例としてWebサーバーを示します。データベースを備えたシンプルなWebサーバーです。問題は、サーバーを停止させたくないということです。

セットアップを行っている人は、データベースを定期的にダンプしてS3に保存するか、必要なときにAmazonで新しいサーバーを再構築するスクリプトを作成して、構成情報を保持する選択したフォルダーをバックアップする必要があると考えています。彼は、サーバーのスナップショットを作成することは多くのディスク容量を必要とし、基本的に大きなデータダンプ間でデータが腐敗してスナップショットがすぐに古くなるため、サーバーのスナップショットを作成することは無駄になると示唆しました。

私の考えは、VMのスナップショットを取得し、データベースの定期的なダンプを実行してS3に保存することでした。EC2インスタンスを失うか、更新のようなものが使用できなくなった場合、最初から完全に新しいインスタンスを構築するのではなく、スナップショットを使用して最新のデータベースダンプでサーバーを比較的迅速にバックアップできます。新しいAMI。

私の理解では、EC2インスタンス(またはEBSストア)のスナップショットを撮るには、ダウンタイムが必要になるということです。また、スナップショットの作成時にファイルシステムの整合性を保つために、サーバーをシャットダウンする必要があることも読んだ。まだバランサーの背後にクラスターがないため、スナップショットに関連するオプションが制限されます。

サーバーを構築するためのスクリプト記述は、Amazonに特定されない限り、EC2に関連する役割を持つ新しいサーバーをデプロイできるChefまたはPuppetサーバーの作成を伴います。現在のところ、新興企業にはその種のサーバーを維持するための資金がなく、現在、それほど多くのサーバーを展開する必要はありません。

理想的には、仮想バランサーまたはAmazonのバランサーサービスの背後に多数のサーバーを作成し、一度に1つずつサーバーを停止して更新またはスナップショットを実行するための資金が必要です。データベースのダンプを実行している場合、システムの更新によってアプリケーションが依存しているライブラリが変更され、サービスが停止した場合、それは役に立たないので、今は更新のアイデアに不安を感じます。

また、別のオプションとして、EBSボリュームを作成してマウントするスクリプトを実行し、サーバーでrsyncなどを実行して、ほとんどのファイルシステム情報をEBSボリュームにキャプチャし、内容を圧縮してS3にコピーし、ボリュームを切断することも想定しました。ストレージコストを節約するためにそれを破棄し、データベースダンプを実行して、他の方法では一貫性のない飛行中のデータをキャッチします。一部のサーバーでは、データベースのニーズが増大するにつれて、一時的なEBSボリュームに保存する必要が生じる可能性が高くなります。

VMWareサンドボックスは、Amazonの本番システムに適用する前に更新を事前にテストできる環境でネットワークシステムを再作成するために作成されています。これにより、システムアップデートによってアプリケーションが強制終了される可能性を最小限に抑えられることを願っています。

したがって、システム上にデータベースとアプリケーションサーバーを備えた1つのサーバーを実行するという制限を与えられ、ダウンタイムができる限り近くないようにします(スナップショットの使用を制限し、バックアッププロセスを可能な限り「ホット」にします(サーバーをダウンさせることなくライブで作成されました)、私はEC2インスタンスのスナップショットを作成する時間をスケジュールし、そこからデータベースダンプを実行してS3にコピーするように提案するのは間違っていますか?追求するより良い戦略はありますか?スナップショットがダウンタイムを作成する場合、サーバーのライブバックアップを作成する際に


2
それらはダウンタイムの影響を受けますが、1つのサーバーでのみ実行されますか?
ceejayoz

1
彼らがクラスターを運営するための資金を得るまでは、そうです。彼らは知っており、バランサーの背後でクラスターを実行することを目指しています...それは現時点ではオプションではありません。
Bart Silverstrim

Amazonはインスタンスの障害を予想するよう強く警告しています。大幅なダウンタイムと一部のデータの損失はどのくらいの費用がかかりますか?
ceejayoz

時々あなたは状況があなたに与えるものを正当化しなければなりません...彼らの信用に応じて、彼らは適切な設定を整えるために働いています。
Bart Silverstrim

回答:


18

この質問には興味深い点があります。具体的には、ダウンタイムの考え方に関してです。アイデアの一部は、アプリケーションがダウンタイムの影響を受けやすい場合、リカバリ時間も考慮に入れる必要があるということです(極端な議論として、バックアップが必要でない限り、バックアップにダウンタイムは必要ありません。その場合、ダウンタイムは無限に近づくことがあります。 )。

EBSについて

EBSボリュームとスナップショットはブロックレベルで動作します。その結果、EBSボリュームが使用中であっても、インスタンスの実行中にスナップショットを取得できます。ただし、スナップショットに含まれるのは、実際にディスク上にある(つまり、ファイルキャッシュにない)データのみです。スナップショットの一貫性という考え方が生まれるのは、後者の理由です。

  • 推奨される方法は、ボリュームを切り離し、スナップショットを作成してから再接続することです。通常は実用的ではありません。
  • 次善の策は、書き込みキャッシュをディスクにフラッシュし、ファイルシステムをフリーズし、スナップショットを作成することです。

ここで興味深い点は、上記のどちらの場合でも、スナップショットが再接続/フリーズ解除されてディスクへの書き込みが再開されるのを待つ必要がないことです。スナップショットが開始されると、データはその時点と一致します。通常、これは数秒でディスクが書き込みロックされます。また、ほとんどのデータベースはディスク上のファイルを合理的な方法で構造化しているため、挿入による既存のブロックへの影響が最小限になる可能性が高く、スナップショットに追加されるデータが最小限に抑えられます。

バックアップのポイントを考慮する

EBSボリュームはアベイラビリティーゾーン内ですでに複製されているため、ある程度の冗長性が組み込まれています。インスタンスが終了した場合、EBSボリュームを新しいインスタンスに接続するだけで(一貫性の欠如を乗り越えた後)再開できますやめた。多くの点で、これにより、EBSボリュームは、アクセス可能な場合、不整合なスナップショットのようになります。とはいえ、ほとんどのEC2ユーザーはおそらく2011年の初めからのEBSボリュームのカスケード障害を思い出します-ボリュームには数日間アクセスできず、一部のユーザーもデータを失いました。

RAID1

EBSディスクの障害から保護しようとしている場合(それは起こります)、RAID1セットアップを検討することができます。EBSボリュームはブロックデバイスであるため、mdadmを使用して簡単に目的の構成に設定できます。EBSボリュームの1つが仕様どおりに実行されない場合は、手動でボリュームを故障させる(そして後で別のEBSボリュームと交換する)のは簡単です。もちろん、これには欠点があります-すべての書き込みの時間が増加し、可変パフォーマンスの影響を受けやすくなり、I / Oコストが2倍になり(金銭的であり、パフォーマンスの観点からではありません)、より広範囲のAWS障害に対する実際の保護はありません(昨年の一般的な問題はロックされた状態のEBSボリュームを切り離すことができないこと)、そしてもちろん、障害時にディスクの一貫性のない状態。

S3FS

特定のアプリケーションのオプション(データベースには絶対にありません)は、S3をローカルファイルシステムとしてマウントすることです(たとえば、s3fsを介して)。これは遅く、ファイルシステムに期待されるいくつかの機能が欠如しており、期待どおりに動作しない可能性があります(結果整合性)。とはいえ、アップロードされたファイルをインスタンス間で利用できるようにするという単純な目的には、メリットがあるかもしれません。明らかに、優れた読み取り/書き込みパフォーマンスを必要とするものには適していません。

MySQLビンログ

MySQL固有のもう1つのオプションは、bin-logの使用です。bin-logを格納する2番目のEBSボリュームをセットアップし(データベースへの追加の書き込みの影響を最小限に抑えるため)、それを使用するデータベースダンプと組み合わせて使用​​できます。s3fsでこれを行うこともできるかもしれませんが、パフォーマンスが許容できる場合は実際にメリットがあります(s3fsを直接使用するよりもrsyncの方がおそらく優れており、できる限り圧縮する必要があります)。

しかし、もう一度、目的の考えに戻ります。上記の提案で何が起こるかを検討してください:

  • アクセスできないEBSボリューム:
    • RAID1-データにアクセスできないため、役に立たない
    • bin-log-S3にエクスポートしない限り役に立たない-おそらくそれを行っても遅延
  • インスタンスが予期せず終了します:
    • RAID1-ディスクは使用可能ですが、一貫性がありません。データベースはそれ自体で不整合から回復する可能性があります
    • bin-log-データにアクセスできる必要がありますが、最後のいくつかのイベントを確認する必要がある場合があります
  • 誰かがrootとしてDROP DATABASEを実行します:
    • RAID1-存在しないデータベースの完全なコピーが2つある
    • bin-log-コマンドの直前までイベントを再生できるため、問題ありません。

そのため、実際にはRAID1はほとんど役に立たず、bin-logには時間がかかりすぎます。どちらも特定の状況ではメリットがあるかもしれませんが、バックアップのアイデアにはほど遠いものです。

スナップショット

スナップショットは差分であり、データを含む(そして圧縮されている)実際のブロックのみを保存することに注意してください。EBSボリュームとは異なり、20 GBのボリュームがあっても1 GBしか使用しない場合でも、「プロビジョニングされた」ストレージ(20 GB)に対して課金されます。スナップショットでは、使用した分だけが課金されます。スナップショット間でデータが変更されない場合、(理論的には)料金は発生しません。(スナップショットはPUTS / GETSおよび使用済みストレージに対して課金されます)。

余談ですが、アプリケーションデータ(データベースを含む)をルートボリューム(既にセットアップされている可能性がある)に保存しないことを強くお勧めします。利点の1つは、うまくいけば、ルートボリュームの変更が最小限になることです。つまり、スナップショットの頻度が少なくなる(または変更が最小限になる)ことで、コストと使いやすさが低下します。

また、古いスナップショットはいつでも削除できることにも言及しておく必要があります。それらは差分であっても、他のスナップショットには影響しません。ただし、スナップショットに割り当てられた各ブロックは、そのブロックを参照しているスナップショットがなくなるまで解放されません。

定期的なダンプの問題は、最初にダンプ間の時間(MySQLのbin-logを使用して対処される可能性があります)とリカバリの困難さです。大きなダンプをインポートして、bin-logからすべてのイベントを再生するには時間がかかります。また、ダンプを作成することには、パフォーマンスへの影響がないわけではありません。おそらく、そのようなダンプは、スナップショットよりもはるかに多くのストレージを必要とする可能性があります。データベースとスナップショットのためだけにEBSボリュームを設定することは、ほとんどの点で望ましいことです(つまり、スナップショットを取ると、パフォーマンスに多少の影響があります)。

スナップショットとEBSボリュームの優れた点は、他のインスタンスで使用できることです。インスタンスの起動に失敗した場合、ルートボリュームを別のインスタンスに接続して問題を診断および修正するか、データをコピーするだけで、ルートボリュームを数分のダウンタイムで切り替えることができます(インスタンスを停止し、デタッチします)ルートボリューム、新しいルートボリュームを接続し、インスタンスを起動します)。これと同じ考え方は、データを2番目のEBSボリュームに置く場合にも当てはまります。基本的に、カスタムAMIから新しいインスタンスを起動し、それに現在のEBSボリュームを接続するだけで、ダウンタイムを最小限に抑えることができます。

(同じサーバー(マスタースレーブ)にMySQLの2つのコピーをセットアップし、2つのEBSボリュームを使用してから、スレーブをシャットダウンしてそのスナップショットを取得することを主張できます(おそらくお勧めしません) EBSボリューム-ダウンタイムは発生せず、一貫性があります-しかし、パフォーマンスコストはそれほど価値がありません)。

AWSには自動スケーリングがあり、一定数のインスタンスを維持できます(その数が1の場合でも)。ただし、スナップショットからデプロイします。そのため、スナップショットが役に立たない場合、前提はあまり役に立ちません。 。

もう1つのポイント-単一のスナップショットから必要なだけインスタンスをデプロイできます(いつでも単一のインスタンスにのみ接続できるEBSボリュームとは異なります)。また、EBSボリュームはアベイラビリティーゾーン内での使用に制限されていますが、スナップショットはリージョン内で使用できます。

理想的には、スナップショットを使用して、サーバーがダウンした場合、最後のスナップショットを使用して新しいスナップショットを起動できます-特にルートボリュームをデータから分離している場合、悪いアップデートはダウンタイムを最小限に抑える必要があります(データが含まれるEBSボリュームを転送し、そのスナップショットをとって、不整合が原因で破損する可能性のあるものをすべて保持します。

補足として、Amazonは、最後のスナップショット以降に変更されたデータの量に応じて、EBSボリュームの失敗率が増加すると述べています。

最終的な推奨事項

  • スナップショットを使用する-すばらしい-ダウンタイムを、それが引き起こすよりもはるかに削減する
  • データとルートボリュームを分離し、データベースを独自のボリュームに配置し、必要に応じて更新前にスナップショットを作成します
  • bin-logを使用して可能な限り「ホット」に保つ-これを(圧縮して)S3にアップロードする
  • 実際にインスタンスからデータを取得していることを確認します(データがEBSボリュームにそのまま残っていても、ボリューム自体に一時的にアクセスできない場合があります)。

推奨読書:

(私はあまりにも多くのことを書いたと思いますが、十分に言っていません。


EBSスナップショットの機能に関する優れた情報と説明。
bwight 2012年

はい、そこにはいくつかの素晴らしい情報がありました。両方の回答(特にコメントと組み合わせると)は役に立ちました。両方を受け入れることができればいいのですが!
Bart Silverstrim

4

ライブEBSボリュームのスナップショットを作成することは可能ですが、ファイルシステムが一貫した状態にあることを確認し、スナップショットの開始中にフリーズする必要があります。すべてのファイルシステムがこれを可能にするわけではありませんが、それは間違いなく可能であり、独自のバックアップソリューションの基礎です。

EBSスナップショットは、変更されたデータに対してのみ課金されるため、非常に安価であり、データ料金はそれ自体で非常に妥当です。ただし、これはブロックレベルの変更に基づいているため、かなり迅速に変更される可能性があることに注意してください。これはスナップショット間でも同様で、スナップショット間で変更されたデータのみが課金されます。コストをわかりやすくするために、スナップショットストレージに月額10ドル未満を支払い、毎日のスナップショットを取り、過去7日間と過去数か月分の週次スナップショットを保持します。このスキームに従って2台のサーバーがあります(約20のスナップショット、 20GBハードドライブ)。


サーバー上のファイルシステムは、残念ながらxfsではありません。EBSボリュームでフォーマットされたXFSをマウントしてインスタンスにアタッチし、既存のデータをそのマウントポイントに移動した場合は、移行できると思いましたが。今のところ、彼らはダウンタイムに行くとは思わないし、それに料金を追加しました。
Bart Silverstrim

@Bart:1〜2時間のダウンタイムに耐えられる場合は、既存のスナップショットをXFSに移行することができます。また、ファイルシステムを使用している場合は、ext4が一貫性のあるスナップショットを機能させるために必要なものをサポートするようになったと思います。
Matthew Scharley、2012年

答えが示唆するように、サービスを停止せずにデータベースを停止せずにスナップショットを作成することもできます。あります可能性が、それは、そのスナップショットやってないかもしれません一貫しては、しかし、そのような状況で、あなたはまだ、データベースのダンプを持つことになります。
Javier Constanzo

@javierConstanzo-ライブスナップショットを取り、不整合な状態になる危険を冒し、データベースダンプを使用してファイルシステムの整合性のありそうなねじれを修正することを提案していますか?
Bart Silverstrim

@バート:スナップショットは、取得するのと同じくらい「ホット」なバックアップであり、rsyncなどよりも内部的にはるかに一貫していることをお勧めします。他のユーザーが転送している間にファイルが変更される可能性があります。つまり、状況によってはバックアップが役に立たなくなる可能性があります。個人的には、スナップショットを機能させるために、必要に応じてファイルシステムを変更するために、数時間のダウンタイムを費やすことをお勧めします。EBSスナップショットのバックアップソリューションの柔軟性は驚くべきものです。実行中のインスタンスにマウントして復元することができます。
Matthew Scharley、2012年

1

Zmanda Cloud Backupのような安価で安価なバックアップソリューションはどうですか?約6台のサーバーと1台のSQL Serverのバックアップに使用しており、月額約$ 10です。自己署名証明書を使用してデータを暗号化でき、それらはs3を使用してデータを格納します(したがって、EC2からバックアップする場合はデータ転送料金はかかりません)。


あなたは提携していますか?EBSスナップショットの1か月あたり$
1/1が急上昇し
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.