Oracle Cloud上のRHELでディスク性能が必要な場合

# はじめに

先日 [Oracle CloudでRHELを利用するときに気を付けること](https://qiita.com/asahide/items/c423e6b6873c98c71ee1) という記事の中でRHELはマルチパス対応ができないため超高パフォーマンスのブロックボリュームを利用できない、という事を書きました。

では、RHELを利用する場合で高いディスク性能が要求された場合には諦めなければならないのでしょうか？というと、そんなことはありません。
複数のブロックボリュームをRAID構成にすることで高いディスク性能を確保することが可能です。
という事で、Oracle Cloud上でのRAID構成を試してみます。

# Oracle CloudでのRAID構成
最初から大変恐縮なのですが、**OCI上でRHELを利用するにはカスタムイメージが必要となり、カスタムイメージはFreeTierでは利用できないため、RAID構成としてはOracle Linuxで検証**します。

#### RAIDの作成

検証用のインスタンスに二つのブロックボリュームをアタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/fc7da67a-d22c-a6e8-2c16-0df6196fd40c.png)


パーティションを作成し、OS上から確認します。
```shell:パーティションの作成とブロックボリュームの確認
$ sudo parted -s -a optimal /dev/sda mklabel gpt mkpart primary 0% 100% set 1 lvm on
$ sudo parted -s -a optimal /dev/sdc mklabel gpt mkpart primary 0% 100% set 1 lvm on

$ sudo lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                  8:0    0   50G  0 disk
└─sda1               8:1    0   50G  0 part
sdb                  8:16   0 46.6G  0 disk
├─sdb1               8:17   0  100M  0 part /boot/efi
├─sdb2               8:18   0    1G  0 part /boot
└─sdb3               8:19   0 45.5G  0 part
  ├─ocivolume-root 252:0    0 35.5G  0 lvm  /
  └─ocivolume-oled 252:1    0   10G  0 lvm  /var/oled
sdc                  8:32   0   50G  0 disk
└─sdc1               8:33   0   50G  0 part

$ sudo parted /dev/sda print
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  53.7GB  53.7GB               primary  lvm

$ sudo parted /dev/sdc print
Model: ORACLE BlockVolume (scsi)
Disk /dev/sdc: 53.7GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  53.7GB  53.7GB               primary  lvm

```

また、インスタンスのソフトウェアRAIDツール mdadm のインストール確認を行っておきます。
```shell:mdadmのインストール確認
# dnf list --installed mdadm
Installed Packages
mdadm.x86_64                                             4.2-2.el8                                             @anaconda
```

アタッチされている二つのディスクを利用し、RAID0の一つのボリュームを作成します。
```shell:RAID0ボリューム作成
$ sudo mdadm --create --verbose --force --assume-clean --raid-devices=2 --level=raid0 /dev/md0 /dev/sda1 /dev/sdc1
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
```

作成したRAIDの状態を確認します。

```shell:RAIDディスク確認
$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Feb  5 05:49:57 2023
        Raid Level : raid0
        Array Size : 104785920 (99.93 GiB 107.30 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Sun Feb  5 05:49:57 2023
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

            Layout : -unknown-
        Chunk Size : 512K

Consistency Policy : none

              Name : asahidetest001:0  (local to host asahidetest001)
              UUID : xxxxxxxx:342ac97b:782961f4:0707b646
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       33        1      active sync   /dev/sdc1

$ sudo cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc1[1] sda1[0]
      104785920 blocks super 1.2 512k chunks

unused devices: <none>

$ sudo mdadm --examine --scan | sudo tee -a /etc/mdadm.conf
ARRAY /dev/md/0  metadata=1.2 UUID=xxxxxxxx:342ac97b:782961f4:0707b646 name=asahidetest001:0
```

作成したRAID（/dev/md0）にファイルシステムを作成します。
```shell:ファイルシステム作成
$ sudo mkfs.ext4 -F /dev/md0
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 26196480 4k blocks and 6553600 inodes
Filesystem UUID: xxxxxxxx-ca87-4864-9efe-546bbac337ee
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks):
done
Writing superblocks and filesystem accounting information: done
```

#### 性能の確認

今回もddでスループットを確認してみます。
```shell:RAID0構成
$ sudo dd if=/dev/zero of=/mnt/raid0/dummy bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 19.9057 s, 52.7 MB/s
```

以前「[Oracle Cloud(OCI)のBlock Volume の性能動的スケーリングを試してみた](https://qiita.com/asahide/items/a6329aad04c10a345c90)」でバランスのブロックボリュームに対してddを実施した結果は以下となりますので、二倍近くになっていることが確認できます。

```shell:シングル構成
$ sudo dd if=/dev/zero of=/mnt/bv1/dummy bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 38.5024 s, 27.2 MB/s
```

# まとめ
RAID0構成をとることで、通常の性能のブロックボリュームにおいても性能が確保できることが確認できました。題名にRHELと書いておきながらRHELを使っていないのは大変申し訳ないですが、動きとしては同じはずなので環境持っている方に試していただければと思います。。

また、RAID0は当然ながら冗長性がないため、実際に利用される場合にはRAID10等を利用されることをお勧めします。ランダムアクセス性能等も確認されたい場合には、fio等で確認していただければと思います。

#### 注意

インスタンスのシェイプ(フレキシブルではOCPU数)にネットワーク帯域幅は制限されるため、利用される際にはご注意ください。
VM-Standardの帯域幅は [こちら](https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/computeshapes.htm#vm-standard) です。


#### 参考

- [Oracle LinuxでのソフトウェアRAIDアレイの構築](https://docs.oracle.com/ja/learn/ol-mdadm/index.html)