全国のLVM愛好家の皆様、こんにちは。
技術4課 岩本です。
さて、とある案件でLVMを扱う機会がありましたので、そのまとめです。
LVMとは?
まず、LVM(Logical Volume Manager)とは、複数のハードディスクの記憶領域を、
1つの論理ディスクとして扱うことのできるLinux/UnixOSのディスク管理機能です。
AWSでのユースケース
EBSではディスクの拡張が容易に行えるため、オンプレミス環境でLVMを用いたディスクの拡張などの恩恵がありません。
ただし、EBSのI/Oには限界値があり、EBSで提供可能なI/O以上の性能を求められた際に、
LVMを用いた”ストライピング”を用いることで、EBS単体以上のディスクI/Oを提供可能です。
ストレージ 汎用SSD (gp2) ボリュームタイプでは、ボリュームあたり最大160MB/sのスループットを実現できます。
TDIモデルの要件である最大400MB/sのスループットを達成するためには、SAP HANAのデータとログファイル用に3つのボリュームをストライピングする必要があります。
プロビジョンドIOPS SSD (io1) ボリュームでは、ボリュームあたり最大320MB/sのスループットを提供し、スループット要件を満たすには少なくとも2つのボリュームをストライピングする必要があります。
スループット最適化HDD (st1) ボリュームでは、大きなブロックサイズでのシーケンシャルな読み書きで最大500MB/sのスループットを実現できます。そのため、st1はSAP HANAバックアップの保存先に理想的な候補となります。
LVM環境の構築
では、実際にEC2上にLVMを構築していきます。
/dev/xvda
(rootデバイス)/dev/xvdb
(LVM対象ディスク1)/dev/xvdc
(LVM対象ディスク2)
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvdc 202:32 0 10G 0 disk
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 10G 0 disk
EBSのフォーマット
- fdiskを用いて
/dev/xvdc
/dev/xvdb
をLVM形式にフォーマット
# fdisk /dev/xvdc
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x01ee2930.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 1
WARNING: If you have created or modified any DOS 6.xpartitions, please see the fdisk manual page for additionalinformation.
Changed type of partition 'Linux' to 'FAT12'
Command (m for help): L
---snip---
8e Linux LVM
---snip---
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
/dev/xvdc
/dev/xvdb
をPV(Physical volume)として登録
- PVの登録
# pvcreate /dev/xvdc1 /dev/xvdb1
Physical volume "/dev/xvdc1" successfully created.
Physical volume "/dev/xvdb1" successfully created.
- PVの確認
# pvdisplay
"/dev/sdb1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 8ekQDa-vBa4-H0vp-WCHc-HGaC-jUN7-tOB5M1
"/dev/sdc1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID hDdkFp-Xjet-tVQs-48uq-YmK0-CjmO-30ENlq
Volume Group(VG)の作成
- VGの作成
# vgcreate lvg-data /dev/sdc1 /dev/sdb1
Volume group "lvg-data" successfully created
- VGの確認
# vgdisplay
--- Volume group ---
VG Name lvg-data
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 19.99 GiB
PE Size 4.00 MiB
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
VG UUID VTrVX0-a7FU-pIYz-EBGY-Q0T4-qceS-FF9J11
Logical Volume(LV)の作成
- LVの作成
# lvcreate --name userdata --size 19GB lvg-data
Logical volume "userdata" created.
- LVの表示
# lvdisplay
--- Logical volume ---
LV Path /dev/lvg-data/userdata
LV Name userdata
VG Name lvg-data
LV UUID VRZqdY-d1Es-tjNw-CXVK-UXq5-61ap-VX5HKF
LV Write Access read/write
LV Creation host, time ip-172-31-47-173, 2018-04-02 12:23:30 +0000
LV Status available
# open 0
LV Size 19.00 GiB
Current LE 4864
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
LV上にファイルシステムを作成
- ファイルシステムの作成
# mkfs -t ext4 /dev/lvg-data/userdata
- OS上からディスク確認
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 992M 80K 992M 1% /dev
tmpfs 1001M 0 1001M 0% /dev/shm
/dev/xvda1 7.8G 1.1G 6.7G 14% /
/dev/mapper/lvg--data-userdata 19G 44M 18G 1% /mnt/lvmdata
まとめ
上記のような手順で、LVMの作成が可能です。
AWSでは、それぞれのEBSボリュームがAWSのアベイラビリティゾーン内で自動的に複製されることで、障害から保護され、高い可用性と耐久性を提供されます。
EBSの特性とLVMの特性をうまく組み合わせることで、高いI/Oを求められるシステムなどでは有効な構成となるかと思います。