AWS EC2インスタンスのRAID化(Amazon Linux編)
- 2019.11.07
- AWS

はじめに
前回、Windows編をやってみましたが、今回はAmazon Linux編です。
Amazon Linux2のEC2インスタンスを構築し、RAID0(ストライピング)を設定してみたいと思います。最終的にはDisk I/Oのチェックまで実施します。
EC2インスタンスの構築
SSH Keyやセキュリティグループは事前に準備しておきます。それから次のようなJSONファイルを作成します。
{
"ImageId": "ami-0064e711cbc7a825e",
"InstanceType": "t2.micro",
"KeyName": "myawskey-tokyo",
"MaxCount": 1,
"SecurityGroupIds": [
"sg-04b4e7642a8fc6efe"
],
"SubnetId": "subnet-0b99e52d17314979d"
}
次のコマンドでEC2インスタンスを構築します。
$ aws ec2 run-instances --cli-input-json file://ec2-amazonlinux.json
EBSボリュームの作成と割り当て
RAID用にEBSボリュームを2つ作成します。
$ aws ec2 create-volume --availability-zone ap-northeast-1a --size 30
{
"AvailabilityZone": "ap-northeast-1a",
"CreateTime": "2019-11-07T06:41:59.000Z",
"Encrypted": false,
"Size": 30,
"SnapshotId": "",
"State": "creating",
"VolumeId": "vol-0ee8ef286a7aa803a",
"Iops": 100,
"Tags": [],
"VolumeType": "gp2"
}
$ aws ec2 create-volume --availability-zone ap-northeast-1a --size 30
{
"AvailabilityZone": "ap-northeast-1a",
"CreateTime": "2019-11-07T06:42:34.000Z",
"Encrypted": false,
"Size": 30,
"SnapshotId": "",
"State": "creating",
"VolumeId": "vol-04d53a3abf85c630b",
"Iops": 100,
"Tags": [],
"VolumeType": "gp2"
}
次に作成したボリュームを次のコマンドでアタッチします。
$ aws ec2 attach-volume --device /dev/sdb --instance-id $ins_id --volume-id vol-0ee8ef286a7aa803a
{
"AttachTime": "2019-11-07T06:43:54.388Z",
"Device": "/dev/sdb",
"InstanceId": "i-079b3bc7c886bd285",
"State": "attaching",
"VolumeId": "vol-0ee8ef286a7aa803a"
}
$ aws ec2 attach-volume --device /dev/sdc --instance-id $ins_id --volume-id vol-0c4ea99bede4e2b80
{
"AttachTime": "2019-11-07T06:44:36.161Z",
"Device": "/dev/sdc",
"InstanceId": "i-079b3bc7c886bd285",
"State": "attaching",
"VolumeId": "vol-04d53a3abf85c630b"
}
EBS ボリュームの割り当て
作成したEBSボリュームをRAID0でRAID化しマウントします。まずは、sshでEC2インスタンスにログインし、EBSボリュームの確認をします。
$ ssh -i $key ec2-user@hoge.ap-northeast-1.compute.amazonaws.com
The authenticity of host 'hoge.ap-northeast-1.compute.amazonaws.com (hoge)' can't be established.
ECDSA key fingerprint is SHA256:hoge.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hoge.ap-northeast-1.compute.amazonaws.com,hoge' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
8 package(s) needed for security, out of 15 available
Run "sudo yum update" to apply all updates.
[ec2-user@hoge ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 30G 0 disk
xvdc 202:32 0 30G 0 disk
/dev/sdbと/dev/sdcでアタッチしたのですが、xvdbとxvdcに名前が変わっています。
次に、以下のコマンドでRAIDを構築します。
$ sudo mdadm --create --verbose /dev/md0 --level=0 --name=my_raid --raid-devices 2 /dev/xvdb /dev/xvdc
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
次のコマンドでRAID構築の進行状況を確認できます。構築完了したらRAIDの情報を見てみます。
$ sudo cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 xvdc[1] xvdb[0]
62881792 blocks super 1.2 512k chunks
unused devices: <none>
$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Nov 7 06:51:57 2019
Raid Level : raid0
Array Size : 62881792 (59.97 GiB 64.39 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu Nov 7 06:51:57 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : none
Name : my_raid
UUID : a91cbfeb:a092d730:c3315c2d:e13711e8
Events : 0
Number Major Minor RaidDevice State
0 202 16 0 active sync /dev/sdb
1 202 32 1 active sync /dev/sdc
ファイルシステムの構築をします。
$ sudo mkfs.ext4 -L my_raid /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=my_raid
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
3932160 inodes, 15720448 blocks
786022 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2164260864
480 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
mdadm.confファイルを作成します。
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=my_raid UUID=a91cbfeb:a092d730:c3315c2d:e13711e8
ラムディスクイメージを作成します。
$ sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
マウントします。
$ sudo mkdir -p /mnt/raid
$ sudo mount LABEL=my_raid /mnt/raid
ブート時に毎回マウントするように設定します。
$ sudo cp /etc/fstab /etc/fstab.orig
$ sudo vi /etc/fstab
#
#UUID=577849ee-6d06-4473-9eec-074495a45d70 / xfs defaults,noatime 1 1
LABEL=my_raid /mnt/raid ext4 defaults,nofail 0 2
これで割り当て完了です。
Disk I/Oの測定
次のコマンドでDisk I/Oを測定してみます。まずはfioをインストールします。
$ sudo yum install fio
次にこのような設定ファイルを作成します。
参考URL: https://thr3a.hatenablog.com/entry/20180804/1533378243
[global]
ioengine=libaio
iodepth=1
size=1g
direct=1
runtime=60
directory=/mnt/raid
stonewall
[Seq-Read]
bs=1m
rw=read
[Seq-Write]
bs=1m
rw=write
[Rand-Read-512K]
bs=512k
rw=randread
[Rand-Write-512K]
bs=512k
rw=randwrite
[Rand-Read-4K]
bs=4k
rw=randread
[Rand-Write-4K]
bs=4k
rw=randwrite
[Rand-Read-4K-QD32]
iodepth=32
bs=4k
rw=randread
[Rand-Write-4K-QD32]
iodepth=32
bs=4k
rw=randwrite
それでは測定してみます。
$ sudo chmod o+w /mnt/raid
$ fio -f bench.txt
(途中略)
Run status group 0 (all jobs):
READ: io=1024.0MB, aggrb=66453KB/s, minb=66453KB/s, maxb=66453KB/s, mint=15779msec, maxt=15779msec
Run status group 1 (all jobs):
WRITE: io=1024.0MB, aggrb=66445KB/s, minb=66445KB/s, maxb=66445KB/s, mint=15781msec, maxt=15781msec
Run status group 2 (all jobs):
READ: io=1024.0MB, aggrb=66428KB/s, minb=66428KB/s, maxb=66428KB/s, mint=15785msec, maxt=15785msec
Run status group 3 (all jobs):
WRITE: io=1024.0MB, aggrb=66437KB/s, minb=66437KB/s, maxb=66437KB/s, mint=15783msec, maxt=15783msec
Run status group 4 (all jobs):
READ: io=648896KB, aggrb=10814KB/s, minb=10814KB/s, maxb=10814KB/s, mint=60001msec, maxt=60001msec
Run status group 5 (all jobs):
WRITE: io=396616KB, aggrb=6609KB/s, minb=6609KB/s, maxb=6609KB/s, mint=60004msec, maxt=60004msec
Run status group 6 (all jobs):
READ: io=1024.0MB, aggrb=25061KB/s, minb=25061KB/s, maxb=25061KB/s, mint=41840msec, maxt=41840msec
Run status group 7 (all jobs):
WRITE: io=1024.0MB, aggrb=24595KB/s, minb=24595KB/s, maxb=24595KB/s, mint=42633msec, maxt=42633msec
Disk stats (read/write):
md0: ios=440752/386833, merge=0/0, ticks=0/0, in_queue=0, util=0.00%, aggrios=220376/189114, aggrmerge=0/5099, aggrticks=755520/766738, aggrin_queue=1522234, aggrutil=72.50%
xvdc: ios=220184/189142, merge=0/5003, ticks=762412/186920, in_queue=949304, util=60.25%
xvdb: ios=220568/189086, merge=0/5195, ticks=748628/1346556, in_queue=2095164, util=72.50%
以下はRAIDを組まずに測定してみた結果です。
$ fio -f bench.txt
(途中略)
Run status group 0 (all jobs):
READ: io=1024.0MB, aggrb=64935KB/s, minb=64935KB/s, maxb=64935KB/s, mint=16148msec, maxt=16148msec
Run status group 1 (all jobs):
WRITE: io=1024.0MB, aggrb=55028KB/s, minb=55028KB/s, maxb=55028KB/s, mint=19055msec, maxt=19055msec
Run status group 2 (all jobs):
READ: io=1024.0MB, aggrb=64766KB/s, minb=64766KB/s, maxb=64766KB/s, mint=16190msec, maxt=16190msec
Run status group 3 (all jobs):
WRITE: io=1024.0MB, aggrb=50751KB/s, minb=50751KB/s, maxb=50751KB/s, mint=20661msec, maxt=20661msec
Run status group 4 (all jobs):
READ: io=490216KB, aggrb=8170KB/s, minb=8170KB/s, maxb=8170KB/s, mint=60001msec, maxt=60001msec
Run status group 5 (all jobs):
WRITE: io=374744KB, aggrb=6245KB/s, minb=6245KB/s, maxb=6245KB/s, mint=60001msec, maxt=60001msec
Run status group 6 (all jobs):
READ: io=746704KB, aggrb=12442KB/s, minb=12442KB/s, maxb=12442KB/s, mint=60011msec, maxt=60011msec
Run status group 7 (all jobs):
WRITE: io=737476KB, aggrb=12289KB/s, minb=12289KB/s, maxb=12289KB/s, mint=60011msec, maxt=60011msec
Disk stats (read/write):
xvdb: ios=325614/294510, merge=0/1128, ticks=2095028/2121360, in_queue=4216472, util=99.08%
ちょっと比較しにくいので結果を整形します。
比較内容 | RAID0 | シングル構成 |
Seq-Read | 66453KB/s | 64935KB/s |
Seq-Write | 66445KB/s | 55028KB/s |
Rand-Read-512K | 66428KB/s | 64766KB/s |
Rand-Write-512K | 66437KB/s | 50751KB/s |
Rand-Read-4K | 10814KB/s | 8170KB/s |
Rand-Write-4K | 6609KB/s | 6245KB/s |
Rand-Read-4K-QD32 | 25061KB/s | 12442KB/s |
Rand-Write-4K-QD32 | 24595KB/s | 12289KB/s |
並列処理を行なった際のIOは2倍以上の速度がでていることが分かります。
-
前の記事
AWS EC2インスタンスのRAID化(Windows Server編) 2019.11.07
-
次の記事
AWS EC2 cloud-initを試してみる 2019.11.08