AWS EC2インスタンスのRAID化(Windows Server編)
- 2019.11.07
- AWS

はじめに
AWSのEC2で使用しているEBSは可用性も高くわざわざRAIDを組む必要があるのかと思ってしまいますが、AWSで使用されるRAIDは0か1とのことです。
用途的にRAID0(ストライピング)を組んで Disk I/O をあげるのかなって思います。実際のところまだそこまではよく分かりません。今後、仕事で使うようになっていくと分かっていくのかもしれませんので、そのときにはまた追記します。
今回はRAID0を組んで、Disk I/O の変化を測定してみたいと思います。
EC2インスタンスの構築
この手順にてWindows Server2019のEC2インスタンスを構築します。
EBSボリュームの作成と割り当て
EC2インスタンスを構築したときに1つEBSボリュームは割り当てられますが、システムドライブになってしまうため、ここではRAID用にEBSボリュームを2つ作成します。
RAIDを構築するEBSボリュームはボリュームのSizeとIopsと同じにする必要がありますが、汎用SSD(gp2)はIOPSはボリュームサイズによって自動的に割り当てられるため、ここではサイズのみ指定します。
$ aws ec2 create-volume --availability-zone ap-northeast-1a --size 30
{
"AvailabilityZone": "ap-northeast-1a",
"CreateTime": "2019-11-07T02:29:50.000Z",
"Encrypted": false,
"Size": 30,
"SnapshotId": "",
"State": "creating",
"VolumeId": "vol-011a1936af9e88e72",
"Iops": 100,
"Tags": [],
"VolumeType": "gp2"
}
$ aws ec2 create-volume --availability-zone ap-northeast-1a --size 30
{
"AvailabilityZone": "ap-northeast-1a",
"CreateTime": "2019-11-07T02:30:04.000Z",
"Encrypted": false,
"Size": 30,
"SnapshotId": "",
"State": "creating",
"VolumeId": "vol-07108c6b4a5280ff8",
"Iops": 100,
"Tags": [],
"VolumeType": "gp2"
}
次に、作成したボリュームを次のコマンドでアタッチします。
$ aws ec2 attach-volume --device /dev/sdb --instance-id $ins_id --volume-id vol-011a1936af9e88e72
{
"AttachTime": "2019-11-07T02:30:49.972Z",
"Device": "/dev/sdb",
"InstanceId": "i-0bd51b6b032347bb9",
"State": "attaching",
"VolumeId": "vol-011a1936af9e88e72"
}
$ aws ec2 attach-volume --device /dev/sdc --instance-id $ins_id --volume-id vol-07108c6b4a5280ff8
{
"AttachTime": "2019-11-07T02:31:12.374Z",
"Device": "/dev/sdc",
"InstanceId": "i-0bd51b6b032347bb9",
"State": "attaching",
"VolumeId": "vol-07108c6b4a5280ff8"
}
EBSボリュームの割り当て
Windowsにリモートデスクトップ接続し、コマンドプロンプトを開いて次の通りにコマンドを実行していきます。
>diskpart
Microsoft DiskPart version 10.0.17763.1
Copyright (C) Microsoft Corporation.
On computer: EC2AMAZ-6CBB90E
DISKPART> list disk
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 30 GB 0 B
Disk 1 Offline 30 GB 30 GB
Disk 2 Offline 30 GB 30 GB
DISKPART> select disk 1
Disk 1 is now the selected disk.
DISKPART> online disk
DiskPart successfully onlined the selected disk.
DISKPART> attribute disk clear readonly
Disk attributes cleared successfully.
DISKPART> convert dynamic
DiskPart successfully converted the selected disk to dynamic format.
同じようにして Disk 2 もダイナミックディスクに変換します。
DISKPART> list disk
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 30 GB 0 B
Disk 1 Online 30 GB 29 GB *
* Disk 2 Online 30 GB 29 GB *
Disk 1 と Disk 2 をダイナミックディスクに変換できたら次のコマンドでストライプボリュームを作成します。
DISKPART> create volume stripe disk=1,2
DiskPart successfully created the volume.
DISKPART> format recommended quick
100 percent completed
DiskPart successfully formatted the volume.
DISKPART> assign letter d
DiskPart successfully assigned the drive letter or mount point.
DISKPART> exit
Leaving DiskPart...
Dドライブにストライプボリュームが割り当てられました。

Disk I/O の測定
事前にストライプボリュームを作成する前に、シンプルボリュームを作成してDisk I/O を測定しておきました。ベンチを取ってみると次の通りでした。

ストライプボリュームのベンチを取ってみます。

ランダムアクセスのキューが複数あるとIO速度が倍になっていることが分かります。
-
前の記事
AWS EC2インスタンス Windows Server2019を作成してMacから接続 2019.11.06
-
次の記事
AWS EC2インスタンスのRAID化(Amazon Linux編) 2019.11.07