리눅스 LVM 디스크 관리를 Azure에서 해보자! Linux LVM on Azure

Azure
작성자
Roronoa
작성일
2019-05-10 10:48
조회
6585
현재 이 사용기는 수백번 이상의 테스트를 거쳐왔으며 실제 프로덕트에 많이 이용되고 있으며 많은 LVM 자료가 있으나 완성형 자료가 없어서 새로 만들게 되었으며 초보자도 이대로 따라하면 LVM을 만들수 있도록 만들어보았습니다.

 

LVM 의 히스토리는? 

LVM - Logical Volume Manager으로 이름 그대로 논리적 용량 관리를 위한 오픈소스입니다. IBM에서 만들어졌고 현재는 Sistina

회사에서 RedHat이 2003년에  366억(2020 환율)에 인수되어 유지가 되고 있습니다. 역시 잘만들어서 팔아먹는게 최고인듯 하지만

이정도 엄청난 것을 만들기는 쉽지 않으며 그만큼의 가치가 있습니다. LVM은 Linux 커널의 일부이며 임의의 물리적 스토리지를 가상

디스크 장치로 인식 할 수있는 서브 시스템입니다. 

 

LVM을 사용시  클라우드에서 조심할점 

일반적으로 클라우드에서는 OS 영역을 LVM으로 데이터 영역 디스크와 함께 묶는 것을 절대 하면 안됩니다.

우선 일반적 벤더 MS나 RedHat은 이 방법을 클라우드에서 권고 자체를 하지 않습니다.

왜냐하면 OS 영역 부분만 이미지를 만든다거나 붙였다 제부팅 했다 하는 작업들이 생기면 LVM이 깨져서 복구가 안되는 경우가 많습니다.

그러므로 절대 비 권고 대상입니다. 그러나 일반적 OnPrem에서는 속도를 올리기 위해 OS영역에 파일을 저장하는 경우나 디스크 효용성을

위해서 OS영역과 데이터영역을 한번에 같이 LVM으로 잡는경우가 있습니다. 이런 경우는 OS영역과 데이터 영역을 분리하고 클라우드로

옮기는 방법이 최선입니다. 

LVM은 매우 매력적이며 대부분 클라우의 IaaS 영역에서 디스크의 Performance를 위해 무조건 이방법을 사용해서 병렬로 작동하게 하면

IOPS가 높아 보이는 장점이 있으나 컨트롤하기 어려우며 복구시 가장 문제점이 있으므로 용도에 맞게 사용해야 합니다. 

쉽게 이야기 하면 체리피커 Performance 입니다. 수년간 이 테스트를 수십개의 변수를 가지고 테스트 해보았으며 이 변수 변경만으로

Performance를 극강으로 올릴수도 있으며 아 ! 이런 클라우드는 너무 느려서 못쓰겠구만 하는 결과도 나올수 있으며 그 편차는 매우 큽니다.

특히 온프레미스만 하시던 분은 클라우드의 특성을 잘 이해 하지 못하고 단순한 테스트를 한다면 클라우드에 따른 적대감을 극단으로 표출할수

있는 부분이 될수 있습니다. 다양한 클라우드 프로바이더들은 자신의 제품의 극강 퍼포먼스만 표시할뿐 실제 그 수치가 다양한 변수에 따라

변할수 있으며 이 Performance만 믿었으면 안되며 대부분 이 퍼포먼스 수치는 체리피커 - 즉 케이크에서 하나뿐인 체리를 빼먹는사람처럼

여러기능중에서 자신이 필요한 기능만 쓰고 맘대로 해석 하는 상태가 되어버립니다. 자 그럼 제 결론- 성급한 일반화의 결론을 말씀드리면

단순히 디스크 퍼포먼스는 가격대비 온프레미스가 약간 빠르며 최신의 클라우드 디스크들은 잘 조합된상태에서 클라우드화(Cloud Native)

시키면 비슷한 성능이 나올수 있으며 편차는 온프레미스가 더 적다가 제 생각입니다. 물론 같은 급의 스펙을 비교해야 하며 어처구니 없는

급을 비교해서는 안됩니다.

 

LVM을 사용하여 여러 물리적 디스크를 단일 스토리지 볼륨으로 합체를 할 수 있습니다. 기본적으로 LVM은 일반적으로 선형 논리 볼륨을

생성하므로 물리적 스토리지가 함께 연결됩니다. 이 경우 읽기 / 쓰기 작업은 일반적으로 단일 디스크로만 전송됩니다. 반대로, 읽기 및 쓰기가

볼륨 그룹에 포함 된 여러 디스크 (RAID0과 유사)에 분배되는 스트라이프 논리 볼륨을 작성할 수도 있습니다. 성능상의 이유로, 읽기 및 쓰기가

연결된 모든 데이터 디스크를 활용하도록 논리 볼륨을 스트라이핑 할 수 있습니다.

기본 용어를 알아보죠

 

LVM 기본용어 

사실 기본용어는 밑에 엑셀로 만든 그림만 이해하면 됩니다. 복잡한거처럼 보이지만 만드는 사람의 마음대로 밑에 구성은 바꿀수 있지만 밑에

그림이 가장 표준적으로 일반적인 구성이므로 설명해보겠습니다.

맨 왼쪽에 보라색 LVM부분은 파티션과 하드디스크는 제외한 부분이며 밑에서 부터 위로 올라가는 패턴으로 생성 순서이며 삭제 순서는

반대라고 생각하면 쉽습니다

파티션과 하드디스크부분은 실제 물리장치로 생각하시는게 가장 좋으며 그림 밑에 설명을 써놓았습니다. LELELE부분은 LV의 단위조각이며

PEPEPEPE느니PV의  단위조각입니다.

Azure NIC Flow


 

1.PP - Physical Partition (물리 파티션)
물리적인 분할 - 물리적 디스가 2GiB가 있다고 예를 들면 이 2GiB를 나누어서 사용하는 방법이며 각자 PP마다 OS도 다르게 설치할수도

있고 다른 용도로 사용할수 있습니다.그러나 각각 파티션이 독립적 존재하므로 다양한 단점과 잘 잘라야하는 어려움이 있으며 각 디스크의

퍼포먼스가 줄어들수 있습니다. 

2.PV - Physical Volume

물리적 볼륨으로 - dev/sda1 dev/sdb1 dev/sdc1로 나누어질수 있으며 Pvcreate로 생성할수 있다 

윈도우로 말하면 C:/ 드라이브가 dev/sda1이며 물리적 디스크 D:/가 한개의 디스크를 두개의 디스크로 나누면

dev/sda2이고 PP이다

dev/sda1 dev/sdb1이고 두개의 물리디스크이면 PV 이다. 물론 나누는것은 본인 맘입니다. 쉽게 말해 그냥 물리 리스크라고 생각하면됩니다.

3.VG - Volume Group

전체 볼륨을 그룹한것으로 한개의 그룹이 될수 있다.

4.PE- Physical Extent

pv의 작은 단위 쉽게 말해 물리적 pv의 작은단위입니다. LVM2에서는 4MB

5.LV - Logical Volume 

논리적 볼륨으로 VG를 필요에 따라 논리적으로 나눈 단위입니다.

6.LE

논리볼륨의 작은단위라고 생각하면됩니다.

FS- File System - 파일시스템 스타일 4MB

MP - Mount Point - 마운트 포인트 

7.LVM의 선형과 스트라이프 구성의 차이 

선형과 스트라이프 차이는 밑에 레드햇 문서에 잘나와 있으며 일반적으로 클라우드에서 LVM목적은 온프레미스와 다르므로

스트라이프구성을 대부분 사용합니다. 병렬로 각 디스크에 써야 속도가 빠른 이유입니다.

참고링크 Redhat LVM linear  https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/logical_volume_manager_administration/lv_overview#linear_volumes

참고링크 Redhat LVM stripe

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/logical_volume_manager_administration/lv_overview#striped_volumes

 

Azure 에서 LVM 한번 만들어봅시다

리눅스 우분투 18.04에서 해봅니다. 시나리오는 4개의 1TB 디스크를 단일 볼륨 그룹으로 결합한 후 스트라이프 논리 볼륨을 만들겠습니다.

LVM 부분은 밑에 그림의 HardDisk 부분에서부터 Partition -> PV -> VG -> LV -> File System 순서로 진행됩니다.

Azure NIC Flow


1번 : 먼저 포털에서 가상머신을 생성합니다. 가상머신을 생성하면 가상네트워크랑 모든 것들이 한번에 같이 생성해서 만듭니다.

일반적으로 LVM을 사용할 정도 면 최소 무조건 Vcore  가 4 cores로 사용하며 acceleration Networking을 무조건 사용해야 좋습니다.

물론 나중에 CLI로 바꿀수는 있지만 생성부터 꼭 Acceleration Networking을 사용하는 버릇을 들어야 합니다.

Azure NIC Flow
Azure NIC Flow
Azure NIC Flow
2번 : 가상머신을 멈추고 deallocated 시키고   OS 영역을 512GiB로 확장 시킵니다. 

포털에서 Virtual Machine을 들어가면 Stop을 누르면 호스트 할당이 취소 되며 Stopped (deallocated) 상태가 되면

OS 디스크의 크기를 변경할 수 있습니다.
Azure NIC Flow
Azure NIC Flow
3번 : 포털에서 붙일 데이터 디스크 4개 생성합니다 (P30 ITB 용 4개). 생성과 동시에 포털에서 가상머신에 붙입니다

데이터 디스크 datadisk000 datadisk001 datadisk002 datadisk003 로 이름을 만듭니다 . 당연하게 숫자는 0부터
Azure NIC Flow
4번 : 가상머신 다시 시작 시킵니다.
Azure NIC Flow

5번 : Ssh로 접속 합니다.

6번 : 4개의 디스크를 파티션을 만듭니다 ( 안해도됨)

7번 : LVM 설치 - LVM은 우분투에서 기본설치가 아니므로 밑에 명령어를 SSH에서 하나씩 쳐서 설치합니다.
Azure NIC Flow
sudo apt-get update

sudo apt-get install lvm2

8번 : 4개의 실제 볼륨을 만듭니다  Physical Volume 실제 볼륨을 명령어로 만듭니다. [cdef] 는 sdc  sdd sde sdf  디스크를 의미합니다.
Azure NIC Flow
sudo pvcreate /dev/sd[cdef]

9번 : data-volume-group01 라는 이름의 하나의 볼륨그룹을 만듭니다

sudo vgcreate data-volume-group01 /dev/sd[cdef]

10번 : data-logical-volume01라는 이름의  논리볼륨을 만듭니다.

sudo lvcreate --extents 100%FREE --stripes 4 --name data-logical-volume01 data-volume-group01

11번 : 논리 볼륨을 Ext4로 포멧합니다
Azure NIC Flow
 sudo mkfs -t ext4 /dev/data-volume-group01/data-logical-volume01

12번 : 파일시스템의 원하는 지점을 만듭니다 /datalvm 라는 디렉토리를 만듭니다.

sudo mkdir /datalvm

13번 : sudo nano /etc/fstab에 추가 시켜서 부팅시 세팅되도록  합니다 . 이 명령어를 복사해서 맨 밑에 붙여줍니다.
Azure NIC Flow
 /dev/data-volume-group01/data-logical-volume01 /datalvm  ext4 defaults  0 2

14번 : Mount -a 명령어에 오류가 없는지 확인

15번 : Mount라고 치면

/dev/mapper/data--volume--group01-data--logical--volume01 on /datalvm type ext4 (rw,relatime,stripe=48) 메세지가 나오면 됨

16번 : df -h 로 확인

 

잘 연결되었으며 위에 스크린샷을 그대로 따라하면 잘됩니다. 물론 원하는 취향대로 LVM의 볼륨과 디스크를 변경 시킬수 있으며 다양한

시나리오로 변경해 나갈 수 있습니다. 일반적으로 클라우드에서 기본 VM은 LVM 방식으로 만드는것은 비추천하며 LVM을 꼭 사용해야하는

필요성이 있을때 LVM을 사용해야 합니다.

 

스크린샷만으로 따라오기 힘든 라떼는 말이야 분들을 위해서 유투브에 따라하기도 Hand-On으로 올렸으므로 밑에 유튜브 클릭하시고

천천히 따라하시면 됩니다