はじめに
Oracle Cloud Infrastructure (以下OCI) では、Block Volume サービスが提供されています。一般的なパブリッククラウドと同様に、Block Volume 1個あたりの性能上限があります。
Block Volume 1個あたりの性能上限
スループット : 480MB/s
IOPS : 35,000
Performance : Higher Performance
詳細は次の Document に書いています
https://docs.cloud.oracle.com/en-us/iaas/Content/Block/Concepts/blockvolumeperformance.htm
1個あたり性能もそれなりに早いですが、これ以上の性能を出す場合にはどうすればいいのでしょうか? Software RAID を使って、Block Volume を論理的な1個の Volume にまとめることで、性能を上げられます。
今回の記事では、代表的な2種類の Software RAID の構成方法を紹介します。
- LVM
- mdadm (Multi Device Aministrator という名前が由来らしい)
前提条件
Block Volume について
今回は、800GB の Higher Performance のBlock Volume を 5 つ纏めます。机上でのカタログスペックはこんな感じです。
- 35,000 IOPS x5 = 175000 IOPS
- 480 MB/s x5 = 2400 MB/s
Software RAID でまとめているため、このままのカタログスペック性能が出るかというと、出ないです。また、どこの性能検証をどのようなパラメータで行うか、によっても変わってきます。が、こういうカタログスペックなんだな、というのは参考値になるはずです。
Compute Instance について
Block Volume の性能を出すためには、Compute Instance のネットワーク帯域も重要です。ネットワーク越しに Block Volume を利用しているため、ストレージへのI/O を行うと、Compute Instance のネットワーク帯域も消費します。
今回は、2400MB/s を上回るために、AMD E3 の 20 OCPU を使っています。
ネットワーク帯域 20Gbps = 2.5GB/s
Attach LVM Vol
Higher Performance 800GB の Block Volume を 5個アタッチします。その後、LVM を使って1個の Logical Volume にまとめていきます。
PV作成
pvcreate /dev/oracleoci/oraclevdc
pvcreate /dev/oracleoci/oraclevdd
pvcreate /dev/oracleoci/oraclevde
pvcreate /dev/oracleoci/oraclevdf
pvcreate /dev/oracleoci/oraclevdg
確認
[root@lvm01 oracleoci]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 800.00g 800.00g
/dev/sdd lvm2 --- 800.00g 800.00g
/dev/sde lvm2 --- 800.00g 800.00g
/dev/sdf lvm2 --- 800.00g 800.00g
/dev/sdg lvm2 --- 800.00g 800.00g
VG作成
vgcreate vg1 \
/dev/oracleoci/oraclevdc \
/dev/oracleoci/oraclevdd \
/dev/oracleoci/oraclevde \
/dev/oracleoci/oraclevdf \
/dev/oracleoci/oraclevdg
確認
[root@lvm01 singlevol01]# vgdisplay -v vg1
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 5
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 5
Act PV 5
VG Size <3.91 TiB
PE Size 4.00 MiB
Total PE 1023995
Alloc PE / Size 0 / 0
Free PE / Size 1023995 / <3.91 TiB
VG UUID DNAr9j-eR3a-E87e-ThZY-VLn8-lJYM-ygdjeB
--- Physical volumes ---
PV Name /dev/sdc
PV UUID 5B399q-cV1q-oeD7-sQ2Y-OI8R-91zj-sTQh1C
PV Status allocatable
Total PE / Free PE 204799 / 204799
PV Name /dev/sdd
PV UUID nq6VA3-cqVn-0BC4-R3pi-47I4-faTq-FbkXIq
PV Status allocatable
Total PE / Free PE 204799 / 204799
PV Name /dev/sde
PV UUID anVKHI-Swv1-Uzk8-EcyQ-Phhh-RGBJ-kFptzD
PV Status allocatable
Total PE / Free PE 204799 / 204799
PV Name /dev/sdf
PV UUID gZUeYO-NZKt-phTY-zbci-WOrk-YXB2-0Fxj5Z
PV Status allocatable
Total PE / Free PE 204799 / 204799
PV Name /dev/sdg
PV UUID 8FJ8C9-FF0g-psTk-ZvhO-0DgV-5oT6-tafGLx
PV Status allocatable
Total PE / Free PE 204799 / 204799
[root@lvm01 singlevol01]#
LV作成
i
: ストライプ数
I
: ストライプサイズ
l
: 容量
type
: raid0(ストライピング)を指定
n
: 名前
lvcreate -i 5 -I 4 -l 100%free --type raid0 -n lv1 vg1
実行例
[root@lvm01 singlevol01]# lvcreate -i 5 -I 4 -l 100%free --type raid0 -n lv1 vg1
Logical volume "lv1" created.
確認
lvs -a -o +devices -o +stripesize
実行例
Logical Volume が使っている、Physical Volume 及び、ストライプサイズを確認可能
[root@lvm01 singlevol01]# lvs -a -o +devices -o +stripesize
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Stripe
lv1 vg1 rwi-a-r--- <3.91t lv1_rimage_0(0),lv1_rimage_1(0),lv1_rimage_2(0),lv1_rimage_3(0),lv1_rimage_4(0) 4.00k
[lv1_rimage_0] vg1 iwi-aor--- <800.00g /dev/sdc(0) 0
[lv1_rimage_1] vg1 iwi-aor--- <800.00g /dev/sdd(0) 0
[lv1_rimage_2] vg1 iwi-aor--- <800.00g /dev/sde(0) 0
[lv1_rimage_3] vg1 iwi-aor--- <800.00g /dev/sdf(0) 0
[lv1_rimage_4] vg1 iwi-aor--- <800.00g /dev/sdg(0) 0
Device Mapper を確認
[root@lvm01 mapper]# ls -la /dev/mapper/
total 0
drwxr-xr-x. 2 root root 180 Jul 11 07:24 .
drwxr-xr-x. 21 root root 3540 Jul 11 07:24 ..
crw-------. 1 root root 10, 236 Jul 10 18:13 control
lrwxrwxrwx. 1 root root 7 Jul 11 07:24 vg1-lv1 -> ../dm-5
lrwxrwxrwx. 1 root root 7 Jul 11 07:24 vg1-lv1_rimage_0 -> ../dm-0
lrwxrwxrwx. 1 root root 7 Jul 11 07:24 vg1-lv1_rimage_1 -> ../dm-1
lrwxrwxrwx. 1 root root 7 Jul 11 07:24 vg1-lv1_rimage_2 -> ../dm-2
lrwxrwxrwx. 1 root root 7 Jul 11 07:24 vg1-lv1_rimage_3 -> ../dm-3
lrwxrwxrwx. 1 root root 7 Jul 11 07:24 vg1-lv1_rimage_4 -> ../dm-4
FileSystem作成
性能を気にする場合は、Block Size の指定も検討しましょう。
mkfs.xfs /dev/mapper/vg1-lv1
実行例
[root@lvm01 mapper]# mkfs.xfs /dev/mapper/vg1-lv1
meta-data=/dev/mapper/vg1-lv1 isize=512 agcount=4, agsize=262142720 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1048570880, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=511997, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@lvm01 mapper]#
fstab 編集
vim /etc/fstab
末尾に追加
iSCSI デバイスなので、_netdev
を入れています。また、nobarrier
で多少性能を上げています。(あまり変わらない気がする)
/dev/mapper/vg1-lv1 /mnt/lvmvol01 xfs nobarrier,_netdev,nofail 0 2
mount
mkdir /mnt/lvmvol01
mount /mnt/lvmvol01
確認
[root@lvm01 mnt]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 158G 0 158G 0% /dev
tmpfs tmpfs 158G 0 158G 0% /dev/shm
tmpfs tmpfs 158G 8.8M 158G 1% /run
tmpfs tmpfs 158G 0 158G 0% /sys/fs/cgroup
/dev/sda3 xfs 39G 2.0G 37G 6% /
/dev/sda1 vfat 512M 12M 501M 3% /boot/efi
tmpfs tmpfs 32G 0 32G 0% /run/user/1000
/dev/sdb xfs 800G 5.1G 795G 1% /mnt/singlevol01
/dev/mapper/vg1-lv1 xfs 4.0T 33M 4.0T 1% /mnt/lvmvol01
Attach mdadm Vol
Higher Performance 800GB の Block Volume を 5個アタッチします。その後、mdadm を使って1個にまとめていきます。
参考 : https://qiita.com/sugimount/items/7d7267c9ff82b0da0126
Dir 作成
mkdir /dev/md/
SoftwareRAID 作成
md_name=mdadm-vol01
mdadm --create /dev/md/${md_name} --level=raid0 --name=${md_name} --chunk=4 --raid-devices=5 /dev/oracleoci/oraclevdh /dev/oracleoci/oraclevdi /dev/oracleoci/oraclevdj /dev/oracleoci/oraclevdk /dev/oracleoci/oraclevdl
実行例
[root@lvm01 oracleoci]# mdadm --create /dev/md/${md_name} --level=raid0 --name=${md_name} --raid-devices=5 /dev/oracleoci/oraclevdh /dev/oracleoci/oraclevdi /dev/oracleoci/oraclevdj /dev/oracleoci/oraclevdk /dev/oracleoci/oraclevdl
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/mdadm-vol01 started.
設定値保存
mdadm --detail --scan > /etc/mdadm.conf
確認
[root@lvm01 oracleoci]# mdadm --detail --scan
ARRAY /dev/md/mdadm-vol01 metadata=1.2 name=lvm01:mdadm-vol01 UUID=b650d2fd:de895fbf:39a59894:10b744c5
確認
[root@lvm01 oracleoci]# mdadm --detail /dev/md/mdadm-vol01
/dev/md/mdadm-vol01:
Version : 1.2
Creation Time : Sat Jul 11 08:32:51 2020
Raid Level : raid0
Array Size : 4193643520 (3999.37 GiB 4294.29 GB)
Raid Devices : 5
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Sat Jul 11 08:32:51 2020
State : clean
Active Devices : 5
Working Devices : 5
Failed Devices : 0
Spare Devices : 0
Chunk Size : 4K
Consistency Policy : none
Name : lvm01:mdadm-vol01 (local to host lvm01)
UUID : de777861:5e62caaa:030b36b9:cdf777d5
Events : 0
Number Major Minor RaidDevice State
0 8 112 0 active sync /dev/sdh
1 8 128 1 active sync /dev/sdi
2 8 144 2 active sync /dev/sdj
3 8 160 3 active sync /dev/sdk
4 8 176 4 active sync /dev/sdl
[root@lvm01 oracleoci]#
memo : SoftwareRAID 削除コマンド
mdadm --stop /dev/md/mdadm-vol01
mdadm --zero-superblock /dev/oracleoci/oraclevdh /dev/oracleoci/oraclevdi /dev/oracleoci/oraclevdj /dev/oracleoci/oraclevdk /dev/oracleoci/oraclevdl
rm /etc/mdadm.conf
FileSystem作成
mkfs.xfs /dev/md/mdadm-vol01
実行例
[root@lvm01 md]# mkfs.xfs /dev/md/mdadm-vol01
meta-data=/dev/md/mdadm-vol01 isize=512 agcount=4, agsize=262102720 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1048410880, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=511919, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@lvm01 md]#
fstab 編集
vim /etc/fstab
末尾に追加
/dev/md/mdadm-vol01 /mnt/mdadmvol01 xfs nobarrier,_netdev,nofail 0 2
mount
mkdir /mnt/mdadmvol01
mount /mnt/mdadmvol01
確認
[root@lvm01 md]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 158G 0 158G 0% /dev
tmpfs tmpfs 158G 0 158G 0% /dev/shm
tmpfs tmpfs 158G 8.8M 158G 1% /run
tmpfs tmpfs 158G 0 158G 0% /sys/fs/cgroup
/dev/sda3 xfs 39G 2.0G 37G 6% /
/dev/sda1 vfat 512M 12M 501M 3% /boot/efi
tmpfs tmpfs 32G 0 32G 0% /run/user/1000
/dev/mapper/vg1-lv1 xfs 4.0T 5.1G 3.9T 1% /mnt/lvmvol01
/dev/sdb xfs 800G 5.1G 795G 1% /mnt/singlevol01
/dev/md127 xfs 4.0T 33M 4.0T 1% /mnt/mdadmvol01
まとめ
具体的な数値の公開は控えさせていただきますが、1個の Block Volume の性能と、5個の Block Volume をソフトウェアで1個にまとめた性能を比較すると、後者の方が性能が向上しています。また、LVM と mdadm の性能を比較しましたが、若干 mdadm の方が性能が良かったです。本の少しだけなので、どちらを選んでも良いと思います。
性能を非公開の理由は、ファイルシステムの Block Size や、RAID の Stripe Size によって性能が大きく変わるためです。普段使用しているアプリケーションから投げられる ストレージ I/O が、どれくらいのものなのかによって、これらのパラメータを調整すると良いはずです。
参考URL
mdadmの拡張
https://kledgeb.blogspot.com/2014/04/ubuntu-mdadm-122-raid-0.html