web-dev-qa-db-ja.com

ec2-consistent-snapshotで取得したスナップショットからAmazonEBSRAID0アレイを復元する

Amazon EC2で新しいMySQLサーバーを構成し、データをEBSRAID0アレイに保存することにしました。これまでのところ良好であり、ec2-consistent-snapshotを使用してこれらのデバイスのスナップショットを撮ることをテストしました。

では、これらのスナップショットから、新しいインスタンスでアレイをすばやく再構築するにはどうすればよいでしょうか。

Ec2-consistent-snapshotを使用して複数のボリュームのスナップショットを作成する場合、RAID内の各デバイスにどのボリュームが使用されたかを知る方法はありません。私は完全に間違っているかもしれませんが、ボリューム間でデータをストライピングしているので、スナップショットが作成されたボリュームとRAID上の同じ場所に各新しいボリュームを配置する必要があるのは当然です。

例:

  • RAID0構成の3x200gbボリューム。
  • vol-1はRAIDの/ dev/sdhデバイス0です
  • vol-2は、RAIDの/ dev/sdh1デバイス1です。
  • vol-3は、RAIDの/ dev/sdh2デバイス2です。

次のコマンドでec2スナップショットを作成します:ec2-consistent-snapshot <options> vol-1 vol-2 vol-3

これで3つのスナップショットが作成されました。スナップショットがどのデバイスであるかを追跡する唯一の方法は、ソースボリュームIDを確認し、次にソースボリュームIDがインスタンスにマウントされているデバイスを確認してから、RAIDの詳細を確認することです。ソースボリュームのインスタンスでの構成。

これは明らかに信じられないほど手動です...そして高速ではありません(他のインスタンスが失敗した場合に新しいmysqlインスタンスをすばやく起動するのは明らかに困難です。言うまでもなく、その時点でRAID上のデバイスの位置を記録する必要がありますソースボリュームインスタンスがクラッシュした場合、RAID構成に到達する方法がないためです)。

したがって、結論として:

  • Ec2-consistent-snapshotとソフトウェアRAID0アレイがどのように機能するかについて何かが足りませんか?
  • そうでない場合、スナップショットがRAIDアレイ内のどのデバイス/位置に属しているかわからないという問題に関する既知の解決策/ベストプラクティスはありますか?

これが明確であることを願っています、そしてあなたの助けに感謝します!

8
Jim Rubenstein

ボリューム間でデータをストライピングしているので、スナップショットが作成されたボリュームと同じRAID上の同じ場所に各NEWボリュームを配置する必要があるのは当然のことです。

私はあなたの前提をテストしました、そしてそれが思われるかもしれないように論理的です、観察はそうではありません。

これについて詳しく説明します:
私にはあなたとまったく同じ要件があります。ただし、使用しているRAID0には2つのボリュームしかありません。

私はUbuntu10を使用しており、XFSでフォーマットされたRAID0デバイスを形成する2つのEBSデバイスがあります。

Raid0デバイスは、次のコマンドを使用して作成していました。
Sudo mdadm --create /dev/md0 --level 0 --metadata=1.1 --raid-devices 2 /dev/sdg /dev/sdh

/ dev/md0を使用してデータファイルを保存するように構成されたMYSQLとその他のソフトウェアをインストールしました。

同じボリュームを使用:完了したら、すべてをアンマウントし、レイドを停止して、次のように再アセンブルします。Sudo mdadm --assemble /dev/md0 /dev/sdh /dev/sdg/dev/sdg /dev/sghの順序に関係なく、RAID自分自身を正しく再構成します。

スナップショットの使用:これを投稿します。ec2-consistent-snapshotを使用して、2つのEBSディスクのスナップショットを一緒に作成します。次に、このディスクからボリュームを作成し、新しいインスタンス(ソフトウェア用に構成済み)に接続し、RAIDを再構築し(EBSボリュームの順序も変更してみました)、マウントして準備が整いましたトーゴ。

奇妙に聞こえますが、機能します。

5
Ryan Fernandes

同様の構成(RAID0 over 4 EBSボリューム)を実行した結果、ec2-consistent-snapshotで作成されたスナップショットからRAIDアレイを再構成するという同じ懸念がありました。

幸い、RAIDアレイ内の各デバイスには、アレイ内の位置、アレイのUUID、およびアレイのレベル(RAID0など)を記録するメタデータ(スーパーブロック内)が含まれています。任意のデバイスでこのスーパーブロックをクエリするには、次のコマンドを実行します('^ this'に一致する行は、クエリされたデバイスを表します)。

$ Sudo mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 2ca96b4a:9a1f1fbd:2f3c176d:b2b9da7c
  Creation Time : Mon Mar 28 23:31:41 2011
     Raid Level : raid0
  Used Dev Size : 0
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0

    Update Time : Mon Mar 28 23:31:41 2011
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0
       Checksum : ed10058a - correct
         Events : 1

     Chunk Size : 256K

      Number   Major   Minor   RaidDevice State
this     0     202       17        0      active sync   /dev/sdb1

   0     0     202       17        0      active sync   /dev/sdb1
   1     1     202       18        1      active sync   /dev/sdb2
   2     2     202       19        2      active sync   /dev/sdb3
   3     3     202       20        3      active sync   /dev/sdb4

配列の一部ではないデバイスで同じクエリを実行すると、次のようになります。

$ Sudo mdadm --examine /dev/sda1
mdadm: No md superblock detected on /dev/sda1.

これは、このコマンドが実際にはデバイス自体に保存されている情報に依存しており、構成ファイルに依存していないことを証明しています。

RAIDデバイスから始めてRAIDアレイのデバイスを調べ、同様の情報を取得することもできます。

$ Sudo mdadm --detail /dev/md0

後者をec2-describe-volumesと一緒に使用して、ec2-consistent-snaptshot(-nおよび-debugのボリュームのリストを作成します=スナップショットを作成せずにこのコマンドをテストできるようにします)。次のコマンドは、ディレクトリ/ mysqlがボリュームのマウントポイントであり、AWSリージョンがs-west-1であることを前提としています。

$ Sudo -E ec2-consistent-snapshot --region us-west-1 --mysql --freeze-filesystem /mysql --mysql-master-status-file /mysql/master-info --description "$(date +'%Y/%m/%d %H:%M:%S') - ASR2 RAID0 (4 volumes) Snapshot" --debug -n $(ec2-describe-volumes --region us-west-1 | grep $(wget http://169.254.169.254/latest/meta-data/instance-id -O - -q) | egrep $(Sudo mdadm --detail $(awk '{if($2=="/mysql") print $1}' /etc/fstab) | awk '/ \/dev\//{printf "%s ", $7}' | sed -e 's# /#|/#g') | awk '{printf "%s ", $2}')
4
Jean Vincent

これがあなたの質問に答えないことは知っていますが、私は似たようなことをしていますが、Amazonのベースec2-create-snapshotツールとcronスクリプトを使用しています。 ec2-consistent-snapshotほど高速ではありませんが、必要な追加のコントロールを取得します。fsync、書き込みのロック、そして最も重要なこととして、スナップショットに適切な名前を付けて、正しい順序で再構成できるようにします。

0
scottburton11