aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

訳:エフェメラルディスクでRAID0

やっぱりXFS使ってるなぁ。

文中にでてくるリンク先も要チェック。

RAID0 ephemeral storage on AWS EC2 - Gabriel Weinberg's Blog

====

 もし、EC2インスタンスに付いているエフェメラルストレージディスクでRAID0(ディスクストライピング)を作ることを考えているなら、このポストを呼んで欲しい。というのも、私が挑戦した時にはどこにも素晴らしい情報が無かったので、それを示す。そして、なぜそうしたかったのか?も示す。

インスタンスを起動すると、ブロックデバイスマッピングとして外部ドライブを追加する必要があるか、そのディスクが使える状態ではない。私はこれにしばらく混乱した。何もしないのなら、デフォルト設定では、1つのエフェメラルドライブが追加され、/mnt にマウントされている。そして、あとからこれに接続するためにデキルことが何もない。

異なるインスタンスタイプは、異なる数とサイズのドライブを持つ。これがその一覧だ。要約すると、 m1.largeを起動すると、 1つの追加ドライブ( /dev/sdc)が使える。m1.xlargeに変えると、さらに2つ( /dev/sdd と /dev/sde )が使え、合計4本になる。

RAID0ボリュームにして、ランダムリードの平均を速くすることができるが、大きなインスタンスがすべて4本のディスクを必要としていないことに注意しなければならない。この表に各インスタンスが何本持っているかが載っている。例えば、High-Memory Extra Large (m2.xlarge)は1つのドライブしか持っていない。

コンソールから、ブロックデバイスマッピングの作り方を見つけ出せない。ウィザードに表示されないようだ。なので、コマンドラインから行う必要がある。m1.largeではこのように

 ec2-run-instances -b '/dev/sdb/=ephemeral0' -b '/dev/sdc=ephemeral1'

そして、m1.xlargeではこのようになる。

 ec2-run-instances ami-90fe01f9 -b '/dev/sdb/=ephemeral0' -b '/dev/sdc=ephemeral1' -b 'dev/sdd=ephemeral2' -b '/dev/sd3=ephemeral3'

他の名前をつけようとすると、エラーが投げられる。ドキュメントに従って同じ -b引数を渡せるec2-register でブロックデバイスマッピングをイメージに焼いてみたが、同じくうまくイカなかった。

一度ブートすると、 マウントポイント /mnt をアンマウントする必要がある。

umount /mnt

何かに使ってしまうとうまくいかないので、最初に行う必要がある。(私は、ユーザデータスクリプトに書いている) 以下のコマンドで RAID0を作ることができる。m1.largeではこのように

yes | mdadm --create /dev/md0 --level=0 -c256 --raid-devices=2 /dev/sdb /dev/sdc
echo 'DEVICE /dev/sdb /dev/sdc' > /etc/mdadm.conf 
mdadm --detail --scan >> /etc/mdadm.conf

そして、m1.xlargeでは

yes | mdadm --create /dev/md0 --level=0 -c256 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
echo 'DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde' > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf

そして、ファイルシステムを作成する必要がある。

blockdev --setra 65536 /dev/md0
mkfs.xfs -f /dev/md0
mkdir -p /mnt/md0 && mount -t xfs -o noatime /dev/md0 /mnt/md0
cd /mnt/md0

最後に、リブート時にもこれを行いたいなら、fstabから /mntを削除し、/mnt/md0を追加する

perl -ne 'print if $_ !~/mnt/' /etc/fstab > /etc/fstab.2
echo '#/dev/md0 /mnt xfs  defaults 0 0' >> /etc/fstab.2
mv /etc/fstab.2 /etc/fstab

 Ubuntu Lucid 10.04 LTSで行った。ベースAMI(Amazon Machine Image)とAKI(Amazon Kernel Image)がここで見つかるだろう。特に、私は ami-fa01f193 と、aki-427d952b (64-bit instance-store in us-east-1 region) を使った。

エフェメラルストレージのRAID0のベンチマークについての記事がこちら。

EBSのRAID0のベンチマークについての記事がこちら。

そして、インスタンスタイプの詳しい比較

[Phoronix] Amazon EC2 Cloud Benchmarks (Round 1: m1.large, m1.xlarge Performance)

CloudHarmony Blog: Disk IO Benchmarking in the Cloud