web-dev-qa-db-ja.com

Amazon EC2インスタンス/ボリュームのシンプルなバックアップ戦略?

Amazon EC2 EBS-backed Windowsイメージ010の導入バックアップを入力しました...

SharePointサービスを実行している単一のWindows 2008サーバーの簡単なバックアップ戦略を見つけるために、頭を悩ませています。これは、1つのデータボリュームを持つ1つのサーバーのEBS-backedイメージです。エキゾチックなものは必要ありません。 「毎日」のバックアップのみが必要です(1日分のデータを失うことは致命的ではありません)。

私たちは使いやすいEBSバックアップAMIイメージ(Windows 2008)を作成して保存しました。新しいEBS AMIイメージを作成するだけで、バックアップの作成を開始しました。これは非常に簡単ですが、実行中のサーバーは、イメージの作成の最初の10〜15分間はオフラインになるため、理想的ではありません。

バックアップを作成する標準的な方法は、実行中のインスタンスに接続されているボリュームのスナップショットを作成することです。繰り返しますが、非常にシンプルで、スナップショットの生成中もサーバーは引き続き使用できます。明らかなCatch-22は、スナップショットから直接新しいインスタンスを直接起動することはできないということです。

実行中のインスタンスをS3ストレージにバンドルし、S3バケットからAMIを登録する方法を知っています。これにより、実行中のインスタンスのバックアップをキャプチャできます。実行中のインスタンスが失われた場合は、S3バケットからAMIを登録し、新しいAMIを起動してインスタンスを回復しますが、これは本当に複雑で、とんでもないことのようです。これを達成するために、AWSコンソールとFirefoxのS3 Organizerプラグインの間を行き来します。 (コマンドラインアプローチについては触れないでください。これは010レベルのコースです)。

EBS-backedイメージをいじくり回してみると、次のアプローチがうまくいくようです(すべてAWSコンソール内で行われます)。

1.バックアップについては、必要に応じてシステムボリューム(/ dev/sda1)のスナップショットを作成するだけです。 2.実行中のインスタンスを失った場合は、次の手順を実行します。a。最後のスナップショットバックアップから新しいボリュームを作成します。b。開始AMIの別のインスタンスを起動します(EBS-backedである必要があります)c。このインスタンスを停止します。 d。既存のシステムボリュームを新しく停止したインスタンスから切り離して破棄します。 e。新しく作成したボリュームをシステムボリューム(/ dev/sda1)として停止したインスタンスに接続します。 f。新しいインスタンスを再起動します。私はこれを数回テストしましたが、うまくいくようです。

質問:このアプローチに問題はありますか?

13
John Miner

あなたのアプローチは非常に良いようです-しかし、私はそれを改善するための可能な方法を考えることができます。

最後のバックアップ以降のデータ損失の影響、およびEBSボリュームの障害(可能性は低いですが、可能性があります)の影響を軽減するために、システムファイルとは別のEBSボリュームにデータを保存し、システムボリュームよりも頻繁にデータボリュームをバックアップできます。 。

現在の戦略では、最後のバックアップからインスタンスが失敗するまでの間に作成されたデータはすべて失われます。新しいアプローチでは、インスタンスの障害が発生するまでデータボリュームに書き込みが行われるため、起動して実行中に新しいインスタンスに再接続するだけで済みます。

9
gareth_bowles

Bashスクリプトを使用して、アカウントのすべてのボリュームのスナップショットを生成します

#!/bin/bash

ec2-describe-volumes | awk '{ print $2 }' | sort -u >  /tmp/ebs_volumes

for i in $(cat /tmp/ebs_volumes); do
   echo $i;
   ec2-create-snapshot $i;
done
4
N Abramson

VPC内のすべてのec2インスタンスのAMIバックアップを作成するスクリプトは次のとおりです

#!/bin/bash
#Script to Automate AMI backup

echo "----------------------------------\n   `date`   \n----------------------------------"

aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-xxx |   awk '{ print $8 }' | sort -n   | grep  "i-" > /tmp/instanceid.txt

echo "Starting the Daily AMI creation: "

 #To create AMI from instance-id 

for i in $(cat /tmp/instanceid.txt); do
        echo "Creating AMI for Instance id $i ......."


echo "instance-`date +%d%b%y`-$i" > /tmp/aminame.txt

aws ec2 create-image --instance-id $i --name "`cat /tmp/aminame.txt`" --description "This is created by AMI-backup.sh" --no-reboot | grep -ir AMI | awk '{print $4}' > /tmp/amiID.txt

echo  "AMI Name is: `cat /tmp/aminame.txt`\n"

done

echo done
0
Ashish Karpe