※Azureについては 2022年7月に 2021年頃の記憶を基に書いています。パブリッククラウドのサービスは改善されていくので最新情報にあたるようにして下さい。
Microsoftのパブリッククラウド Azureで VMを構築した際にストレージのスピードが問題になったことがあります。
Azureには高速ストレージとして PremiumSSDというものがあるのですが、これでも速度が足りませんでした。
私はミドルウェアのライセンスフィーを低く抑えるために CPU数が 2個や 4個の VMを良く選定していたのですが、このサイズの VMでは接続できるストレージ数や最大スループットや最大IOPSが制限されていて、PremiumSSD本来のパワーを享受できずヤキモキしていました。
もっとお金を払って大きな VMを使えよって事なんで、仕方がないんですけどね。
Ultra Diskはまだ Azure Backupに対応してなかったので運用上使うことが出来なかったです。
(今は対応しているだろうか)
そんな経験をしていた過程で PremiumSSDの速度アップの方法を調べていた時に Microsoftのサイトで見つけた方法は、複数の PremiumSSDで RAID0(ディスクストライピング)せよ、というものでした。
Premium SSD自体は RAIDになっていますが、それを OSの上で束ねてソフトRAIDを組めってことです。
その場でストライピングを使う際の稼働率低下に触れてないのはどうかなぁと思うところはありますが、他に方法もないですし、嫌なら RAID0+1にしてミラーリングもしとけよってことですね。
Ubuntuのディスク増設にて、LVM2による論理ボリューム作成をやってますので、その応用で RAID0の論理ボリュームを作ってみます。
環境は VMware Workstation Playerで作った仮想ハードウェアにインストールした Ubuntu Server 22.04、そこに仮想ハードディスクを 3つ増設しています。
まず増設前の Ubuntu Serverのディスクの状態です。
20GBの仮想ハードディスク(/dev/sda)が 1つだけです。
subro@UbuntuServer2204:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 61.9M 1 loop /snap/core20/1518
loop1 7:1 0 62M 1 loop /snap/core20/1581
loop2 7:2 0 79.9M 1 loop /snap/lxd/22923
loop3 7:3 0 44.7M 1 loop /snap/snapd/15534
loop4 7:4 0 47M 1 loop /snap/snapd/16292
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1.8G 0 part /boot
└─sda3 8:3 0 18.2G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 10G 0 lvm /
sr0 11:0 1 1024M 0 rom
こちらが 5GBの仮想ハードディスクを 3つ追加した後です。
subro@UbuntuServer2204:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 61.9M 1 loop /snap/core20/1518
loop1 7:1 0 62M 1 loop /snap/core20/1581
loop2 7:2 0 44.7M 1 loop /snap/snapd/15534
loop3 7:3 0 47M 1 loop /snap/snapd/16292
loop4 7:4 0 79.9M 1 loop /snap/lxd/22923
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1.8G 0 part /boot
└─sda3 8:3 0 18.2G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 10G 0 lvm /
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sdd 8:48 0 5G 0 disk
sr0 11:0 1 1024M 0 rom
ピンク色のディスクが増えています。
それぞれ Physical Volume(PV)として登録します。
subro@UbuntuServer2204:~$ sudo pvcreate /dev/sdb /dev/sdc /dev/sdd
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
subro@UbuntuServer2204:~$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sda3
VG Name ubuntu-vg
PV Size <118.23 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 4665
Free PE 2105
Allocated PE 2560
PV UUID iB5GZf-Oam8-MJX9-Nx3z-sLrd-3vm0-ZzXnlZ
"/dev/sdb" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID WkuR5d-AEGt-vb7N-ITci-j64c-zdnr-LYSlJJ
"/dev/sdc" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID Xo2PLD-Uirc-V62V-DZSv-51jV-6Dve-dGBXvn
"/dev/sdd" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID fGEu7E-HgPT-wLBF-CXMp-3dXj-zipo-KqyQA0
PVができました。
3つとも同じ Volume Group(VG)に所属させます。
subro@UbuntuServer2204:~$ sudo vgcreate -v raid-group /dev/sdb /dev/sdc /dev/sdd
Wiping signatures on new PV /dev/sdb.
Wiping signatures on new PV /dev/sdc.
Wiping signatures on new PV /dev/sdd.
Adding physical volume '/dev/sdb' to volume group 'raid-group'
Adding physical volume '/dev/sdc' to volume group 'raid-group'
Adding physical volume '/dev/sdd' to volume group 'raid-group'
Archiving volume group "raid-group" metadata (seqno 0).
Creating volume group backup "/etc/lvm/backup/raid-group" (seqno 1).
Volume group "raid-group" successfully created
subro@UbuntuServer2204:~$ sudo vgdisplay raid-group
--- Volume group ---
VG Name raid-group
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size <14.99 GiB
PE Size 4.00 MiB
Total PE 3837
Alloc PE / Size 1280 / 5.00 GiB
Free PE / Size 2557 / <9.99 GiB
VG UUID Yfqh6g-Yyxj-olCS-515a-D69C-ilTH-ce9a6v
「raid-group」という名前で VGができました。
次の Logical Volume作成の段で RAIDにします。
RAID0,RAID1,RAID4,RAID5,RAID6,RAID10を作ることができます。
サイズの指定は余り無くキッチリ使いたかったので、上の [Total PE]の数値を
「--extents PE数」で指定しています。
subro@UbuntuServer2204:~$ sudo lvcreate --type raid0 --stripes 3 --extents 3837 --name lv-raid0 -v raid-group
Using default stripesize 64.00 KiB.
Archiving volume group "raid-group" metadata (seqno 7).
Creating logical volume lv-raid0
Creating logical volume lv-raid0_rimage_0
Creating logical volume lv-raid0_rimage_1
Creating logical volume lv-raid0_rimage_2
Creating volume group backup "/etc/lvm/backup/raid-group" (seqno 8).
Activating logical volume raid-group/lv-raid0.
activation/volume_list configuration setting not defined: Checking only host tags for raid-group/lv-raid0.
Creating raid--group-lv--raid0_rimage_0
Loading table for raid--group-lv--raid0_rimage_0 (253:1).
Resuming raid--group-lv--raid0_rimage_0 (253:1).
Creating raid--group-lv--raid0_rimage_1
Loading table for raid--group-lv--raid0_rimage_1 (253:2).
Resuming raid--group-lv--raid0_rimage_1 (253:2).
Creating raid--group-lv--raid0_rimage_2
Loading table for raid--group-lv--raid0_rimage_2 (253:3).
Resuming raid--group-lv--raid0_rimage_2 (253:3).
Creating raid--group-lv--raid0
Loading table for raid--group-lv--raid0 (253:4).
Resuming raid--group-lv--raid0 (253:4).
Wiping known signatures on logical volume raid-group/lv-raid0.
Initializing 4.00 KiB of logical volume raid-group/lv-raid0 with value 0.
Logical volume "lv-raid0" created.
subro@UbuntuServer2204:~$ sudo lvdisplay /dev/raid-group/lv-raid0
--- Logical volume ---
LV Path /dev/raid-group/lv-raid0
LV Name lv-raid0
VG Name raid-group
LV UUID 65Of1h-GXLg-Ccm3-s7kp-3Ser-mGHJ-FFMPg0
LV Write Access read/write
LV Creation host, time UbuntuServer2204-2, 2022-07-26 09:56:02 +0900
LV Status available
# open 0
LV Size <14.99 GiB
Current LE 3837
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 768
Block device 253:4
「lv-raid0」という名前で LVができました。
3つ合わせて概ね 15GBのサイズになっています。
ディスクのできあがりを見てみましょう。
subro@UbuntuServer2204:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 61.9M 1 loop /snap/core20/1518
loop1 7:1 0 62M 1 loop /snap/core20/1581
loop2 7:2 0 44.7M 1 loop /snap/snapd/15534
loop3 7:3 0 47M 1 loop /snap/snapd/16292
loop4 7:4 0 79.9M 1 loop /snap/lxd/22923
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1.8G 0 part /boot
└─sda3 8:3 0 18.2G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 10G 0 lvm /
sdb 8:16 0 5G 0 disk
└─raid--group-lv--raid0_rimage_0 253:1 0 5G 0 lvm
└─raid--group-lv--raid0 253:4 0 15G 0 lvm
sdc 8:32 0 5G 0 disk
└─raid--group-lv--raid0_rimage_1 253:2 0 5G 0 lvm
└─raid--group-lv--raid0 253:4 0 15G 0 lvm
sdd 8:48 0 5G 0 disk
└─raid--group-lv--raid0_rimage_2 253:3 0 5G 0 lvm
└─raid--group-lv--raid0 253:4 0 15G 0 lvm
sr0 11:0 1 1024M 0 rom
このLV上に ext4のファイルシステムを作成します。
subro@UbuntuServer2204:~$ sudo mkfs.ext4 /dev/raid-group/lv-raid0
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 3929088 4k blocks and 983040 inodes
Filesystem UUID: 020aa7b7-15f5-40ea-a1d3-b38649db41dc
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
できました。
マウントポイントを作ります。
subro@UbuntuServer2204:~$ sudo mkdir /data1
/etc/fstabにマウント情報を記載するために、UUIDを確認します。
/dev/mapperディレクトリの下にデバイスマッパーによって作られたリンクがあるはず…。
subro@UbuntuServer2204:~$ ls /dev/mapper
合計 0
crw------- 1 root root 10, 236 7月 26 09:13 control
lrwxrwxrwx 1 root root 7 7月 26 10:03 raid--group-lv--raid0 -> ../dm-4
lrwxrwxrwx 1 root root 7 7月 26 09:56 raid--group-lv--raid0_rimage_0 -> ../dm-1
lrwxrwxrwx 1 root root 7 7月 26 09:56 raid--group-lv--raid0_rimage_1 -> ../dm-2
lrwxrwxrwx 1 root root 7 7月 26 09:56 raid--group-lv--raid0_rimage_2 -> ../dm-3
lrwxrwxrwx 1 root root 7 7月 26 09:13 ubuntu--vg-ubuntu--lv -> ../dm-0
/dev/dm-4を指している「raid--group-lv--raid0」が対象でしょう。
UUIDを確認します。
subro@UbuntuServer2204:~$ sudo blkid -p /dev/mapper/raid--group-lv--raid0
/dev/mapper/raid--group-lv--raid0: UUID="020aa7b7-15f5-40ea-a1d3-b38649db41dc" VERSION="1.0" BLOCK_SIZE="4096" TYPE="ext4" USAGE="filesystem"
UUIDが分かったので /etc/fstab を編集します。
一番下の行を追加しました。
subro@UbuntuServer2204:~$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-12lIizcyjCcyAF32oksfsr29gHTlOR3hUP0KZ9l3rlsdM0R8j05Yc9hVfA82VxTq / ext4 defaults 0 1
# /boot was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/bc1cfd06-4015-4d64-a94d-a5deb53905bc /boot ext4 defaults 0 1
/swap.img none swap sw 0 0
UUID=020aa7b7-15f5-40ea-a1d3-b38649db41dc /data1 ext4 defaults 0 1
マウントします。
subro@UbuntuServer2204:~$ sudo mount -a
動作確認します。
subro@UbuntuServer2204:~$ ls -ld /data1
drwxr-xr-x 3 root root 4096 7月 26 10:03 /data1
subro@UbuntuServer2204:~$ cd /data1
subro@UbuntuServer2204:/data1$ sudo touch aaa
subro@UbuntuServer2204:/data1$ ls -l
合計 16
-rw-r--r-- 1 root root 0 7月 26 10:25 aaa
drwx------ 2 root root 16384 7月 26 10:03 lost+found
良さげです。
LVM2でのソフトウェアRAID構築は以上になります。
昨今はオンプレなら RAIDになっているエンタープライズレベルの外部ストレージを使うし、クラウドならストレージは元々 RAIDになっているしで、ソフトウェア RAIDを作るなんて 10年以上前に安っすい RAIDになっていない外部ストレージを導入して以来でした。
でも考え方は当時のそれ(HP-UXだった)と全く同じでしたので、根っこの技術は同じものなのでしょう。
「もうソフト RAIDなど…」と思っていましたが、最新のパブリッククラウドで要件が復活するなんて思いもしませんでしたね。
Linux環境では、一旦 PV/VG/LV という観念を理解してしまえば、ソフト RAIDの構築は簡単でした。
あ、RAIDそのものの仕組みの理解は前提になっていますので、念の為。
しかし Linuxもフリーなのにここまで機能があるとは大したものと思いますね。