1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Oracle Cloud] Block Volume を Software RAID (LVM, mdadm) で複数まとめて性能を上げる

Last updated at Posted at 2020-07-11

はじめに

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

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?