반응형
AWS에서 SAP 구성시 디스크 성능 향상을 위해서 LVM을 많이 구성하여 사용함
AWS의 EBS 볼륨을 Stripe로 구성하여 성능 향상을 기대할 수 있음
AWS EBS의 경우 gp3 type는 3000 IOPS 와 125MB/S 에 가까운 처리량을 제공하기에 2개의 EBS 볼륨을 Stripe LVM으로 구성 할 경우 최대 6000 IOPS / 250 MB/s에 가까운 처리량을 기대 할 수 있음
- LVM의 단점은 마운트하면 Mapper Driver를 통해 진행하는데 이런 방식은 I/O가 처리될 때 거치게되는 커널 path에 오버헤드가 생긴다.
(radi0 mdadm 사용에 비해서)
- 인스턴스 타입에 따라 IOPS Limit이 존재한다. = 스트라이프로 성능을 무제한으로 올릴 순 없다.
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ebs-optimized.html#current
- 블럭단위로 LVM 을 구성하기 때문에, 블럭이 끊기는 지점에서 성능이 저하되고 이에따라 IOPS가 들쭉날쭉 할 수 있다.
최적화를 잘하면 스트라이프를 통해 50%정도의 성능향상까진 기대할 수 있다고한다.
## lvm을 구성하기 위한 작업 순서
1. lvm 파티션을 생성 (gdisk) : 8e00
2. pvcreate로 physical disk 생성
3. Vgcreate로 VG 생성
4. 용도에 맞게 lvcreate로 볼륨 생성 (Striped | linear | mirror)
5. 파일시스템 생성후 마운트 진행 (mkfs.xfs, mkfs.ex4, mkfs.btrfs) : df -hT로 확인한 기존 파일시스템과 동일한 타입으로 새성해줌
1. gdisk를 사용하여 lvm 파티션 Create
usage : gdisk /dev/[Device_Name]
gdisk /dev/sdb
output :
GPT fdisk (gdisk) version 1.0.8
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries in memory.
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8e00 > Hex code or GUID(16진수 코드 또는 GUID) 변수에 8e00 Linux LVM code 입력
Changed type of partition to 'Linux LVM'
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
2. lsblk 명령어로 파티션 정보확인
# 파티션 정보 확인
lsblk
Output :
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 8M 0 part
├─sda2 8:2 0 18G 0 part /opt
│ /usr/local
│ /srv
│ /var
│ /tmp
│ /home
│ /boot/grub2/x86_64-efi
│ /boot/grub2/i386-pc
│ /
└─sda3 8:3 0 2G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 20G 0 part
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 20G 0 part
sdd 8:48 0 20G 0 disk
└─sdd1 8:49 0 20G 0 part
sde 8:64 0 20G 0 disk
└─sde1 8:65 0 20G 0 part
sdf 8:80 0 20G 0 disk
└─sdf1 8:81 0 20G 0 part
sdg 8:96 0 20G 0 disk
└─sdg1 8:97 0 20G 0 part
sr0 11:0 1 15.3G 0 rom
lsblk -f
Output :
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1
├─sda2 btrfs e8c3f6f1-7f65-42c7-aedc-151405b402f0 14.6G 17% /opt
│ /usr/local
│ /srv
│ /var
│ /tmp
│ /home
│ /boot/grub2/x86_64-efi
│ /boot/grub2/i386-pc
│ /
└─sda3 swap 1 34f0faf9-3d74-4b23-8093-cd1632085585 [SWAP]
sdb
└─sdb1 LVM2_member LVM2 001 ff3f6b-cW0R-5sDr-jcFT-Xhd1-0hrl-qsEGpD
└─vg01-data_vol01
sdc
└─sdc1 LVM2_member LVM2 001 eKtxUn-u8Md-kMdx-J4jf-o6AL-4CZn-fd3DYh
└─vg01-data_vol01
sdd
└─sdd1 LVM2_member LVM2 001 aYUkXP-6q6d-snmw-jUJP-MIcN-FOf4-9THV5w
└─vg01-data_vol01
sde
└─sde1 LVM2_member LVM2 001 PrEPrC-Xy8K-5Yz2-5w53-eCv2-aQNZ-FuVysl
sdf
└─sdf1 LVM2_member LVM2 001 wrXlHO-mxys-fESZ-ATsy-owU0-TqWU-dNGKw1
sdg
└─sdg1 LVM2_member LVM2 001 2NVGij-W0wl-IkpJ-Kpe4-eifK-mwoa-d9SlFE
sr0 iso9660 Joliet Ex SLE-15-SP6-Full-x86_6493.51.001 2024-06-13-19-56-33-00
3. pvcreate로 명령을 실행하여 pv 생성
# PV 물리볼륨 생성
usage : pvcreate /dev/[Volume_Name]
pvcreate /dev/sdb1
Output :
Physical volume "/dev/sdb1" successfully created.
# PV 물리볼륨 생성 확인
# pvs
pvs
Output :
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 20.00g 20.00g
/dev/sdc1 lvm2 --- 20.00g 20.00g
/dev/sdd1 lvm2 --- 20.00g 20.00g
/dev/sde1 lvm2 --- 20.00g 20.00g
/dev/sdf1 lvm2 --- 20.00g 20.00g
/dev/sdg1 lvm2 --- 20.00g 20.00g
# pvdisplay
pvdisplay
Output :
--- Physical volume ---
PV Name /dev/sde1
VG Name vg02
PV Size 20.00 GiB / not usable 2.98 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 5119
Free PE 5119
Allocated PE 0
PV UUID PrEPrC-Xy8K-5Yz2-5w53-eCv2-aQNZ-FuVysl
--- Physical volume ---
PV Name /dev/sdf1
VG Name vg02
PV Size 20.00 GiB / not usable 2.98 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 5119
Free PE 5119
Allocated PE 0
PV UUID wrXlHO-mxys-fESZ-ATsy-owU0-TqWU-dNGKw1
--- Physical volume ---
PV Name /dev/sdg1
VG Name vg02
PV Size 20.00 GiB / not usable 2.98 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 5119
Free PE 5119
Allocated PE 0
PV UUID 2NVGij-W0wl-IkpJ-Kpe4-eifK-mwoa-d9SlFE
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg01
PV Size 20.00 GiB / not usable 2.98 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 5119
Free PE 0
Allocated PE 5119
PV UUID ff3f6b-cW0R-5sDr-jcFT-Xhd1-0hrl-qsEGpD
--- Physical volume ---
PV Name /dev/sdc1
VG Name vg01
PV Size 20.00 GiB / not usable 2.98 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 5119
Free PE 0
Allocated PE 5119
PV UUID eKtxUn-u8Md-kMdx-J4jf-o6AL-4CZn-fd3DYh
--- Physical volume ---
PV Name /dev/sdd1
VG Name vg01
PV Size 20.00 GiB / not usable 2.98 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 5119
Free PE 0
Allocated PE 5119
PV UUID aYUkXP-6q6d-snmw-jUJP-MIcN-FOf4-9THV5w
4. 볼륨 그룹을 생성하고 볼륨 그룹에 PV추가
# vgcreate 명령을 실행하여 VG 생성 (vg01 생성)
usage : vgcreate [VG이름] [PV이름]
vgcreate vg01 /dev/sdb1 /dev/sdc1 /dev/sdd1
vgcreate vg02 /dev/sde1 /dev/sdf1 /dev/sdg1
# 기존 vg01 에 추가시
vgextend vg02 /dev/sdh1
# VG 생성확인
# vgs
vgs
Output :
VG #PV #LV #SN Attr VSize VFree
vg01 3 1 0 wz--n- 59.99g 0
vg02 3 0 0 wz--n- 59.99g 59.99g
# vgdisplay
vgdisplay
Output:
--- Volume group ---
VG Name vg02
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size 59.99 GiB
PE Size 4.00 MiB
Total PE 15357
Alloc PE / Size 0 / 0
Free PE / Size 15357 / 59.99 GiB
VG UUID d2v81s-1hc6-qaKv-qQFw-faLP-S3l5-SeUGG9
--- Volume group ---
VG Name vg01
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 59.99 GiB
PE Size 4.00 MiB
Total PE 15357
Alloc PE / Size 15357 / 59.99 GiB
Free PE / Size 0 / 0
VG UUID zKeKCp-YBpg-8Iex-pqPt-WGXY-7IoG-k2mGmH
5. LV 생성
#lvcreate 명령으로 LV 생성
# LVM : lvm구성으로 디스크 관리하기
: vg01 에 있는 공간을 모두 할당한 data_vol01 이름의 LV 생성
lvcreate -n data_vol01 -l +100%FREE vg01
: 9G의 용량을 가진 data_vol01 이름의 LV 생성
lvcreate -n data_vol01 -L 9G vg01
Output:
Logical volume "data_vol01" created.
#LVM : Stripe 구성으로 성능향상
#Stripe LV 생성
lvcreate -L [볼륨 용량] -i[스트라이프 개수] -I[스트라이프 사이즈] --name [LV 이름] [VG 이름]
-L : 논리적으로 생성할 볼륨 사이즈
-i : 스트라이프 개수, VG에 포함된 PV 개수를 초과할 수 없다. (볼륨 2개로 stripe 3개 불가능)
-I : 스트라이프 사이즈로 LVM과 실제 볼륨간의 I/O의 단위라고 생각하면 될 것 같다. 최대 256KB
--name : [생성할 LV 이름] [대상 VG 이름]
lvcreate -L 10G -i3 -I256 --name stripe_vol01 vg02
lvcreate -L 10G -i3 -I256 -n stripe_vol01 vg02
Output :
Rounding size 10.00 GiB (2560 extents) up to stripe boundary size 10.01 GiB (2562 extents).
Logical volume "stripe_vol01" created.
lvs
Output :
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data_vol01 vg01 -wi-a----- 59.99g
stripe_vol01 vg02 -wi-a----- 10.01g
lvs --segment
Output :
LV VG Attr #Str Type SSize
LV VG Attr #Str Type SSize
data_vol01 vg01 -wi-a----- 1 linear 20.00g
data_vol01 vg01 -wi-a----- 1 linear 20.00g
data_vol01 vg01 -wi-a----- 1 linear 20.00g
stripe_vol01 vg02 -wi-a----- 3 striped 10.01g
Segment Type
linear : 여러개의 디스크를 하나의 볼륨으로 구성하는것 이상의 의미가 없음
striped : Stripe LVM으로 구성하면 두개의 물리적인 디스크의 처리량을 합한것 만큼의 성능을 기대할 수 있다.
6. 볼륨 마운트
ls -l /dev/[VG이름]
ls -l /dev/vg02
Output :
total 0
lrwxrwxrwx 1 root root 7 Apr 5 08:57 stripe_vol01 -> ../dm-1
## df -hT로 현재 사용중인 파일시스템 타입 확인 후 동일 타입으로 생성
mkfs.xfs /dev/vg02/stripe_vol01
mkfs.ext4 /dev/vg02/stripe_vol01
mkfs.btrfs /dev/vg02/stripe_vol01
7. lv용량 관리 (spripe_vol01)
> Stripe 볼륨의 경우 볼륨 증성시 stripe 수량과 동일한 device가 있어야만 증설이 가능
lvs > lv에서 사용공간 및 vg 확인
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data_vol01 vg01 -wi-a----- 59.99g
stripe_vol01 vg02 -wi-a----- 10.01g
pvs > 위에서확인한 vg에 공간 확인
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 20.00g 0
/dev/sdc1 vg01 lvm2 a-- 20.00g 0
/dev/sdd1 vg01 lvm2 a-- 20.00g 0
/dev/sde1 vg02 lvm2 a-- 20.00g 16.66g
/dev/sdf1 vg02 lvm2 a-- 20.00g 16.66g
/dev/sdg1 vg02 lvm2 a-- 20.00g 16.66g
# VG에 여유공간이 있어 논리공간을 확장
lvextend -L +5G /dev/vg02/stripe_vol01
# VG에 있는 모든 논리공간 할당
lvextend -l +100%FREE /dev/vg02/stripe_vol01
# 파일시스템 확장
resize2fs /dev/vg_name/lv_name # ext4의 경우
xfs_growfs /dev/vg_name/lv_name # XFS의 경우
btrfs filesystem resize max /vg02 # btrfs의 경우
## 물리디스크 추가시
## 구성시 사용한 Stripe 갯수와 동일하게 구성해서 증설해야함
gdisk > pvcreate > vgextend > lvextend
8. lvm 제거
# 순서 LV 마운트해제 → LV 제거 → VG 제거 → PV 제거
# 이름이 생각이 안 날때에는 pvscan, vgscan, lvscan 명령어를 활용
# LV 마운트 해제
umount [경로]
# LV 제거
lvremove /dev/[VG 이름]/[LV 이름]
# VG 제거
vgremove [VG 이름]
# PV 제거
pvremove [볼륨 이름]반응형
'Cloud > AWS' 카테고리의 다른 글
| EC2 인스턴스에 볼륨 추가하기 (0) | 2024.01.18 |
|---|---|
| AWS 계정간 Route53 공유하기 (하위도메인 생성) (0) | 2021.08.13 |
| EC2 인스턴스 TimeZone 변경하기 (KST) (0) | 2021.07.13 |