EC2インスタンスで利用するLVMの基本

記事タイトルとURLをコピーする

全国の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を求められるシステムなどでは有効な構成となるかと思います。