Amazon EC2で新しいMySQLサーバーを構成し、データをEBSRAID0アレイに保存することにしました。これまでのところ良好であり、ec2-consistent-snapshotを使用してこれらのデバイスのスナップショットを撮ることをテストしました。
では、これらのスナップショットから、新しいインスタンスでアレイをすばやく再構築するにはどうすればよいでしょうか。
Ec2-consistent-snapshotを使用して複数のボリュームのスナップショットを作成する場合、RAID内の各デバイスにどのボリュームが使用されたかを知る方法はありません。私は完全に間違っているかもしれませんが、ボリューム間でデータをストライピングしているので、スナップショットが作成されたボリュームとRAID上の同じ場所に各新しいボリュームを配置する必要があるのは当然です。
例:
次のコマンドでec2スナップショットを作成します:ec2-consistent-snapshot <options> vol-1 vol-2 vol-3
。
これで3つのスナップショットが作成されました。スナップショットがどのデバイスであるかを追跡する唯一の方法は、ソースボリュームIDを確認し、次にソースボリュームIDがインスタンスにマウントされているデバイスを確認してから、RAIDの詳細を確認することです。ソースボリュームのインスタンスでの構成。
これは明らかに信じられないほど手動です...そして高速ではありません(他のインスタンスが失敗した場合に新しいmysqlインスタンスをすばやく起動するのは明らかに困難です。言うまでもなく、その時点でRAID上のデバイスの位置を記録する必要がありますソースボリュームインスタンスがクラッシュした場合、RAID構成に到達する方法がないためです)。
したがって、結論として:
これが明確であることを願っています、そしてあなたの助けに感謝します!
ボリューム間でデータをストライピングしているので、スナップショットが作成されたボリュームと同じ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ボリュームの順序も変更してみました)、マウントして準備が整いましたトーゴ。
奇妙に聞こえますが、機能します。
同様の構成(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}')
これがあなたの質問に答えないことは知っていますが、私は似たようなことをしていますが、Amazonのベースec2-create-snapshotツールとcronスクリプトを使用しています。 ec2-consistent-snapshotほど高速ではありませんが、必要な追加のコントロールを取得します。fsync、書き込みのロック、そして最も重要なこととして、スナップショットに適切な名前を付けて、正しい順序で再構成できるようにします。