Windows on Amazon EC2でEBSをRAID0で構成する
はじめに
Amazon EC2で利用するディスクストレージであるAmazon EBSは、一般的なRAID構成は全て使用できます。が、RAID5とRAID6はパリティ書き込み操作によってIOPSが消費されるため推奨されておらず、RAID0とRAID1を利用するのがEBSにおけるグッドノウハウです
RAID0は複数のボリュームをストライピングし、使用できるボリュームサイズもスループットも合計されますが、データの冗長性が無く、単一のボリュームに障害が発生した場合データが完全に失われます。RAID1は複数のボリュームをミラーリングするため、パフォーマンスもボリュームサイズも単一ボリュームと同等ですが、単一のボリュームに障害が発生した場合にもデータが失われません。オンプレミスのディスクストレージだとRAID0+1を構成できるものもありますね。
今回はAmazon EC2上に構築したWindows Server 2012で、EBSをRAID0で構成し、パフォーマンスを計測してみました。
やってみた
構成
以下のような100GBのSSD(300IOPS)のボリュームを、3つ用意しました。
インスタンスタイプは ベンチマークのためにEBS-optimizedなm4.largeを使用しています。
RAID0ボリュームを作成する
Amazon EC2には以下のように100GBのSSDが3つともアタッチされています。
コマンドプロンプトを起動し、diskprtを実行します。
C:\Users\Administrator>diskpart Microsoft DiskPart バージョン 6.3.9600 Copyright (C) 1999-2013 Microsoft Corporation.
ディスクの一覧を確認します。
DISKPART> list disk ディスク 状態 サイズ 空き ダイナ GPT ### ミック ------------ ------------- ------- ------- --- --- ディスク 0 オンライン 35 GB 0 B ディスク 1 オンライン 100 GB 0 B ディスク 2 オンライン 100 GB 0 B ディスク 3 オンライン 100 GB 0 B
このうち、ディスク1と2をRAID0構成とします。まずはディスク1を選択し、ダイナミックフォーマットに変換します。
DISKPART> select disk 1 ディスク 1 が選択されました。 DISKPART> convert dynamic DiskPart は選択されたディスクをダイナミック フォーマットに正常に変換しました。
ディスクの状態を確認します。以下のようにボリュームが存在する状態になっています。
DISKPART> detail disk AWS PVDISK SCSI Disk Device ディスク ID: 6A409C71 種類 : SCSI 状態 : オンライン パス : 0 ターゲット : 5 LUN ID : 0 場所のパス : PCIROOT(0)#PCI(1F00)#PCI(1F00)#SCSI(P00T05L00) 現在の読み取り専用状態: いいえ 読み取り専用 : いいえ ブート ディスク : いいえ ページ ファイル ディスク : いいえ 休止状態ファイル ディスク : いいえ クラッシュ ダンプ ディスク : いいえ クラスター化ディスク : いいえ Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ---- ---------- ------- --------- -------- Volume 2 D NTFS シンプル 99 GB 正常
このボリュームを削除します。
DISKPART> select volume 2 ボリューム 2 が選択されました。 DISKPART> delete volume DiskPart はボリュームを正常に削除しました。
同じようにディスク2もダイナミックフォーマットに変換し、存在するボリュームを削除します。
すると以下のように、ディスク1とディスク2がダイナミックフォーマットになっており、GPT(GUID パーティション テーブル)にマークが付いていることが確認出来ます。
DISKPART> list disk ディスク 状態 サイズ 空き ダイナ GPT ### ミック ------------ ------------- ------- ------- --- --- ディスク 0 オンライン 35 GB 0 B ディスク 1 オンライン 100 GB 99 GB * * ディスク 2 オンライン 100 GB 99 GB * ディスク 3 オンライン 100 GB 0 B
ディスクの管理画面で見ると、以下のようにディスク1と2が未割り当てになっています。
では、RAID0ボリュームを作成してみましょう。以下のようにstripeと指定してボリュームを作成します。ちなみにRAID1の場合は mirrorと指定します。
DISKPART> create volume stripe disk=1,2 DiskPart はボリュームを正常に作成しました。
ボリュームを一覧表示すると、ボリューム2としてタイプがストライプとなっているボリュームが作成されています。元のディスクサイズがそれぞれ100GBだったので、2つを結合して199GBになっています。
DISKPART> list volume Volume ### Ltr Label Fs Type Size Status Info ---------- --- ----------- ---- ---------- ------- --------- -------- Volume 0 NTFS Partition 350 MB 正常 システム Volume 1 C NTFS Partition 34 GB 正常 ブート * Volume 2 RAW ストライプ 199 GB 正常 Volume 4 F NTFS Partition 99 GB 正常
このボリュームをラベルをつけてフォーマットし、さらにEドライブとして割り当てます。
DISKPART> select volume 2 ボリューム 2 が選択されました。 DISKPART> format quick recommended label="raid0" 100% 完了しました DiskPart は、ボリュームのフォーマットを完了しました。 DISKPART> assign letter e DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。
では、ディスクの管理画面で確認してみます。このようにraid0というラベルで、Eドライブとしてマウントされています。
もちろんエクスプローラ上でもEドライブとして利用可能です。
ベンチマーク
それではお待ちかね、RAID0化したEBSボリュームとそのままのEBSボリュームで、ベンチマークを測ってみます。Windowsでのベンチマークなので、CrystalDiskMarkを使いました。
ベンチマーク前に事前ウォーミングをしておきます。
C:\Users\Administrator>format e: /p:1 C:\Users\Administrator>format f: /p:1
そして実行結果がこちら。RAID0構成にしたEBSボリューム(200GB/600IOPS)
RAIOD0構成にしていない、ただのEBSボリューム(100GB/300IOPS)
シーケンシャルアクセスでは大差が無いものの、4KiBランダムアクセス(Queues=32、Threads=1)では2倍の性能差があります。想定通りですね!
さいごに
さらっとですが、RAID0構成にすることでボリュームサイズもパフォーマンスも向上することが確認出来ました。今回くらいの小さなボリュームサイズだと単体でIOPSを向上させる手段(ボリュームサイズを上げる、プロビジョンドIOPSにする、等)がありますが、汎用SSDの最大IOPSが10,000、プロビジョンドIOPSのSSDの最大IOPSが20,000という制限がありますので、RAID0化することでそれぞれIOPSを向上させることが出来ます。高いIOPSを求められるシステムではEBSのRAID0構成は選択肢の一つとして有用です。