[Oracle Cloud] SoftwareRAID(mdadm) にディスクを追加して性能を向上する

# はじめに

[前回の記事](https://qiita.com/sugimount/items/db2b193af56a9725b266) で、Block Volume を5つまとめて、SoftwareRAID で性能を上げられることを確認しました。今回の記事では、この SoftwareRAID に Block Volume を1個追加して、ストライプ数を増やしてさらに性能を追加する方法を確認してみましょう



# ポイント

- mdadm で 5個の Volume を RAID 0 でストライピングしている状態
- 1個の Block Volume 追加で6個の RAID 0 にする
- 1個の Block Volume を追加して、Rebuild が走ったタイミングから、再度手動で RAID 0 に戻すまでの期間、性能が縮退する (今回の構成では半分くらいの性能に減った)
- Rebuild の時間は、今回の構成では 6時間弱ほどかかった。必要な時間は、容量や負荷状況に応じて変わるはず



# ディスクを追加して、ストライプ数を増やす

現状確認
5個の Volume で RAID 0 (ストライピング) を構成しています

```
[root@lvm01 ~]# 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      144        0      active sync   /dev/sdj
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
       3       8      112        3      active sync   /dev/sdh
       4       8      160        4      active sync   /dev/sdk
[root@lvm01 ~]#
```



なお、性能検証コマンドはこちらです。実施前、実施後で性能を確認しました

```
sudo fio --filename=/dev/md/mdadm-vol01 --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1 --readonly
```



追加するディスクは、`/dev/oracleoci/oraclevdm` です

```
[root@lvm01 ~]# ls -la /dev/oracleoci/
total 0
drwxr-xr-x.  2 root root  360 Jul 11 15:25 .
drwxr-xr-x. 23 root root 3980 Jul 11 15:25 ..
lrwxrwxrwx.  1 root root    6 Jul 11 15:21 oraclevda -> ../sda
lrwxrwxrwx.  1 root root    7 Jul 11 15:21 oraclevda1 -> ../sda1
lrwxrwxrwx.  1 root root    7 Jul 11 15:21 oraclevda2 -> ../sda2
lrwxrwxrwx.  1 root root    7 Jul 11 15:21 oraclevda3 -> ../sda3
lrwxrwxrwx.  1 root root    6 Jul 11 15:22 oraclevdb -> ../sdd
lrwxrwxrwx.  1 root root    6 Jul 11 15:22 oraclevdc -> ../sdh
lrwxrwxrwx.  1 root root    6 Jul 11 15:22 oraclevdd -> ../sdf
lrwxrwxrwx.  1 root root    6 Jul 11 15:22 oraclevde -> ../sdb
lrwxrwxrwx.  1 root root    6 Jul 11 15:22 oraclevdf -> ../sdc
lrwxrwxrwx.  1 root root    6 Jul 11 15:22 oraclevdg -> ../sdg
lrwxrwxrwx.  1 root root    6 Jul 11 15:24 oraclevdh -> ../sdl
lrwxrwxrwx.  1 root root    6 Jul 11 15:24 oraclevdi -> ../sde
lrwxrwxrwx.  1 root root    6 Jul 11 15:24 oraclevdj -> ../sdk
lrwxrwxrwx.  1 root root    6 Jul 11 15:24 oraclevdk -> ../sdj
lrwxrwxrwx.  1 root root    6 Jul 11 15:24 oraclevdl -> ../sdi
lrwxrwxrwx.  1 root root    6 Jul 11 15:25 oraclevdm -> ../sdm
```



RAID 0 に 1本のディスクを追加です。
同時に2本のDiskを追加すると、Rebuild がうまく進まないように見えましたので、ご注意ください。
今回の検証では、6時間ほど Rebuild に時間が掛かりました

```
mdadm --grow /dev/md/mdadm-vol01 --level=raid0 --raid-devices=6 --backup-file=/root/RAID0ArrayBackup.reshape_$(date "+%Y%m%d_%H%M%S") --add /dev/oracleoci/oraclevdm
```



実行例

```
[root@lvm01 ~]# mdadm --grow /dev/md/mdadm-vol01 --level=raid0 --raid-devices=6 --backup-file=/root/RAID0ArrayBackup.reshape_$(date "+%Y%m%d_%H%M%S") --add /dev/oracleoci/oraclevdm
mdadm: level of /dev/md/mdadm-vol01 changed to raid4
mdadm: added /dev/oracleoci/oraclevdm
mdadm: Need to backup 120K of critical section..
[root@lvm01 ~]#
```



追加したタイミングで、性能が下がっている (RAID 4になったので、下がっているように見える)

```
[root@lvm01 ~]# sudo fio --filename=/dev/md/mdadm-vol01 --direct=1 --rw=randread --bs=4k --ioengine=libaio --
追加したタイミングで、性能が半分ほどになっている
```



mdadm で detail を確認すると、RAID 4 に一時的に切り替わっています
RAID 4 は、 RAID 0 + パリティディスク の構成です

```
[root@lvm01 ~]# mdadm --detail /dev/md/mdadm-vol01
/dev/md/mdadm-vol01:
           Version : 1.2
     Creation Time : Sat Jul 11 15:24:41 2020
        Raid Level : raid4
        Array Size : 4193643520 (3999.37 GiB 4294.29 GB)
     Used Dev Size : 838728704 (799.87 GiB 858.86 GB)
      Raid Devices : 7
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Sat Jul 11 15:27:06 2020
             State : clean, FAILED, reshaping
    Active Devices : 5
   Working Devices : 6
    Failed Devices : 0
     Spare Devices : 1

        Chunk Size : 4K

Consistency Policy : resync

    Reshape Status : 0% complete
     Delta Devices : 1, (6->7)

              Name : lvm01:mdadm-vol01  (local to host lvm01)
              UUID : 55cc11d3:a34ac1eb:8f391e0f:f6d62598
            Events : 50

    Number   Major   Minor   RaidDevice State
       0       8      176        0      active sync   /dev/sdl
       1       8       64        1      active sync   /dev/sde
       2       8      160        2      active sync   /dev/sdk
       3       8      144        3      active sync   /dev/sdj
       4       8      128        4      active sync   /dev/sdi
       6       8      192        5      spare rebuilding   /dev/sdm
       -       0        0        6      removed
[root@lvm01 ~]#
```



rebuild の速度が確認できる

```
cat /proc/mdstat
```



実行例

```
[root@lvm01 workdir]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid0]
md127 : active raid4 sdm[6] sdi[4] sdj[3] sdk[2] sde[1] sdl[0]
      4193643520 blocks super 1.2 level 4, 4k chunk, algorithm 5 [7/6] [UUUUU__]
      [>....................]  reshape =  0.6% (5427840/838728704) finish=574.2min speed=24184K/sec

unused devices: <none>
[root@lvm01 workdir]#
```



なお、当たり前ですが、ファイルシステムとしては容量はかわっていません

```
[root@lvm01 oracleoci]# 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  9.0M  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
/dev/sdc            xfs       800G  5.1G  795G   1% /mnt/singlevol01
/dev/mapper/vg1-lv1 xfs       4.0T  5.1G  3.9T   1% /mnt/lvmvol01
tmpfs               tmpfs      32G     0   32G   0% /run/user/1000
/dev/md127          xfs       4.0T  5.1G  3.9T   1% /mnt/mdadmvol01
```



Rebuild に時間が掛かるため、ステータスを確認しつづける Bash Script を流しておきます。

```
vim mdadm_detail_output.sh
```



中身

```
#!/bin/bash

while :
do
  echo "=========================="
  date
  mdadm --detail /dev/md/mdadm-vol01
  sleep 60;
  echo ""
  echo ""
done

exit 0
```



バックグラウンド実行

```
nohup sh mdadm_detail_output.sh >> output.logs &
```



なお、Rebuild のパフォーマンス調整はこちらで出来ます。あまりに数値を高くしすぎると、他に影響をあたえるので注意
http://liliumrubellum.blog10.fc2.com/blog-entry-300.html?sp



rebuild完了

```
[root@lvm01 workdir]# mdadm --detail /dev/md/mdadm-vol01
/dev/md/mdadm-vol01:
           Version : 1.2
     Creation Time : Sat Jul 11 15:24:41 2020
        Raid Level : raid4
        Array Size : 5032372224 (4799.24 GiB 5153.15 GB)
     Used Dev Size : 838728704 (799.87 GiB 858.86 GB)
      Raid Devices : 7
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Sun Jul 12 01:00:01 2020
             State : clean, degraded
    Active Devices : 6
   Working Devices : 6
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 4K

Consistency Policy : resync

              Name : lvm01:mdadm-vol01  (local to host lvm01)
              UUID : 55cc11d3:a34ac1eb:8f391e0f:f6d62598
            Events : 1582

    Number   Major   Minor   RaidDevice State
       0       8      176        0      active sync   /dev/sdl
       1       8       64        1      active sync   /dev/sde
       2       8      160        2      active sync   /dev/sdk
       3       8      144        3      active sync   /dev/sdj
       4       8      128        4      active sync   /dev/sdi
       6       8      192        5      active sync   /dev/sdm
       -       0        0        6      removed
[root@lvm01 workdir]#
```



Rebuild が完了している状態でも、読み込み性能が半分ほどになっている。RAID 4 だからだと思われます

```
[root@lvm01 workdir]# sudo fio --filename=/dev/md/mdadm-vol01 --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1 --readonly
iops-test-job: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256
...
Rebuild が完了しても、性能は半分ほどのまま
```



RAID 4 から RAID 0 へ変更　**※rebuild 中は実行不可。完了まで待たないといけない**

```
mdadm --grow /dev/md/mdadm-vol01 --level=raid0 --backup-file=/root/RAID0ArrayBackup.reshape
```



実行例

```
[root@lvm01 workdir]# mdadm --grow /dev/md/mdadm-vol01 --level=raid0 --backup-file=/root/RAID0ArrayBackup.reshape
mdadm: level of /dev/md/mdadm-vol01 changed to raid0
[root@lvm01 workdir]#
```



コマンド実行直後、すぐに RAID 0 になる

```
/dev/md/mdadm-vol01:
           Version : 1.2
     Creation Time : Sat Jul 11 15:24:41 2020
        Raid Level : raid0
        Array Size : 5032372224 (4799.24 GiB 5153.15 GB)
      Raid Devices : 6
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Sun Jul 12 05:36:07 2020
             State : clean
    Active Devices : 6
   Working Devices : 6
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 4K

Consistency Policy : none

              Name : lvm01:mdadm-vol01  (local to host lvm01)
              UUID : 55cc11d3:a34ac1eb:8f391e0f:f6d62598
            Events : 1583

    Number   Major   Minor   RaidDevice State
       0       8      176        0      active sync   /dev/sdl
       1       8       64        1      active sync   /dev/sde
       2       8      160        2      active sync   /dev/sdk
       3       8      144        3      active sync   /dev/sdj
       4       8      128        4      active sync   /dev/sdi
       6       8      192        5      active sync   /dev/sdm
[root@lvm01 workdir]#
```



RAID 0 にした瞬間に、性能が向上する。元々出ていた性能に加えて、Disk 追加したときの性能となっている

```
[root@lvm01 workdir]# sudo fio --filename=/dev/md/mdadm-vol01 --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1 --readonly
iops-test-job: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256
...
```



ここまでで、Disk を1本追加して、性能を向上する方法を確認しました。次に、追加した Disk を使って、容量を拡張します。



# ファイルシステムの拡張

ファイルシステムの容量は、Disk 追加前の容量となっているため、XFS ファイルシステムの拡張をしていきます

```
[root@lvm01 workdir]# 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.9M  158G   1% /run
tmpfs               tmpfs     158G     0  158G   0% /sys/fs/cgroup
/dev/sda3           xfs        39G  2.2G   36G   6% /
/dev/sda1           vfat      512M   12M  501M   3% /boot/efi
/dev/sdd            xfs       800G  5.1G  795G   1% /mnt/singlevol01
/dev/mapper/vg1-lv1 xfs       4.0T  5.1G  3.9T   1% /mnt/lvmvol01
tmpfs               tmpfs      32G     0   32G   0% /run/user/1000
/dev/md127          xfs       4.0T   33M  4.0T   1% /mnt/mdadmvol01    <============ ここ
```



以下コマンドで拡張します

```
xfs_growfs /mnt/mdadmvol01
```



実行結果

```
[root@lvm01 workdir]# xfs_growfs /mnt/mdadmvol01
meta-data=/dev/md127             isize=512    agcount=4, agsize=262102720 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=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               bsize=4096   blocks=511919, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 1048410880 to 1258093056
```



拡張されています

```
[root@lvm01 workdir]# 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.9M  158G   1% /run
tmpfs               tmpfs     158G     0  158G   0% /sys/fs/cgroup
/dev/sda3           xfs        39G  2.1G   36G   6% /
/dev/sda1           vfat      512M   12M  501M   3% /boot/efi
/dev/sdd            xfs       800G  5.1G  795G   1% /mnt/singlevol01
/dev/mapper/vg1-lv1 xfs       4.0T  5.1G  3.9T   1% /mnt/lvmvol01
tmpfs               tmpfs      32G     0   32G   0% /run/user/1000
/dev/md127          xfs       4.7T   33M  4.7T   1% /mnt/mdadmvol01
```



# 参考URL

Ubuntu mdadm その122 - RAID 0アレイの物理ボリューム数（スロット数）を増やすコマンドの例
https://kledgeb.blogspot.com/2014/04/ubuntu-mdadm-122-raid-0.html

Ubuntu mdadm その133 - アレイのチャンクサイズを変更する・アレイのチャンクサイズを変更するコマンドの説明
https://kledgeb.blogspot.com/2014/05/ubuntu-mdadm-133.html

Ubuntu mdadm その134 - RAID 0アレイのチャンクサイズを変更するコマンドの例
https://kledgeb.blogspot.com/2014/05/ubuntu-mdadm-134-raid-0.html