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

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

はじめに

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速度が倍になっていることが分かります。