새소식

300x250
6. DevOps/AWS 기초편

[AWS] 7. EBS란?(with EC2에 EBS Volume 추가하기)

  • -
728x90

안녕하세요. 갓대희 입니다. 이번 포스팅은 [ AWS - EBS란?(with EC2에 EBS Volume 추가하기)  입니다. : )

0. 들어가기 앞서

 - 예전에 생성하였던 EC2에 MySql을 설치하여 사용하다보니 EC2 EBS 용량 이 부족한 상황이 발생 하였다.

 - 간단하게 EBS Volume을 추가해보며   이참에 EBS란 어떤 것인지도 함께 알아보자. 

 

1. EBS (Elastic Block Storage) 정의 및 특징

 - EBS는 클라우드에서 사용하는 가상 하드디스크(HDD or SSD)라고 할 수 있다.

 

EC2 인스턴스

 - EC2 인스턴스에 사용할 대규모 고성능 블록 스토리지 볼륨을 제공한다.

    EC2 인스턴스가 실행 중인 동안 연결 가능한 네트워크 드라이브. 즉 인스턴스와 저장소간 실제 물리적 연결은 없으며 네트워크를 통해 연결된다.

 

 - 비휘발성 드라이브이다. EC2 인스턴스를 제거해도 EBS는 독립적이기 때문에 데이터가 유지된다.

   (독립형 Storage가 아니기 때문에 항상 EC2와 함께 사용된다.)


 - 하나의 인스턴스에 여러가지 EBS를 붙일 수 있다. 하나의 컴퓨터에 HDD, SSD를 여러개 부착할수 있는 것과 같은 원리이다.

 

 - 반대로 EBS를 여러 EC2에 장착(EBS Multi Attach) 가능하다.

 

리전

 - EBS 볼륨을 생성할때는 특정 가용영역만 생성이 가능하다. 한번 생성된 EBS 볼륨은 다른 region으로 옮길 수 없다.

   (다른 가용영역으로 볼륨을 옮기기 위해서는 스냅샷을 사용해야 한다.)

 - 각 EBS 볼륨은 가용 영역 내에 자동으로 복제되어 구성요소 장애로부터 보호해주고 고가용성 및 내구성을 제공한다.

 

확장, 축소, 비용

 - 필요한 용량에 맞게 구매가 가능하다. 필요에 따라서 즉시 생성 및 제거할수 있다. (Root Device가 아닌 경우)

 - 볼륨이기 때문에 용량을 미리 결정해야 하며, 원하는 용량(GB) 및 IOPS, 즉 단위 초당 Disk I/O 수를 미리 지정해야 한다.

   ( IOPS : 디스크에 접근하여 데이터 탐색시 초당 몇 번의 INPUT/OUTPUT이 발생하는지를 의미.)

 - 단 몇 분 내에 사용량을 많게 또는 적게 확장할 수 있으며, 프로비저닝한 부분에 대해서만 저렴한 비용을 지불한다.

 - 프리티어에서는 30G까지 무료 이다.

 

Block Storage?

 - EBS의 BS(Block Storage)를 Object Storage와 비교하여 살펴보자.

 - 이전에 사용해 보았던 S3와 같은 Object Storage는 프로그램 등을 설치할수 없이 파일만 저장되는 저장소이다.

   반면 Block Store는 프로그램 등을 설치가 가능한 저장소를 의미한다.

 

2. EBS의 스냅샷

 - EBS를 저장하는 효율적인 방법. 특정 시간의 EBS 볼륨 상태 저장본을 뜻한다.

   (스냅샷을 이용하여 특정시간의 저장 데이터에 대한 EBS의 복구가 가능하다.)

 - 스냅샷은 OS와 별개로 데이터만 백업시키고 싶거나, 생성된 스냅샷을 기반으로 여러 종류의 AMI를 생성할 때 사용된다.

 - 스냅샷의 큰 특징은 변화된 부분만 저장하기 때문에 용량을 효율적으로 사용할 수 있다.

   ex) EBS가 10GB인 경우 스냅샷을 찍을 때마다 10GB가 생성되는 것이 아니다.

   ex) 변화된 부분이 10MB라고 하면 변화된 부분인 10MB에 대한 부분만 저장하기 때문에 효율적으로 스냅샷을 저장할 수 있다.

 - 스냅샷은 기본적으로 S3에 저장된다.

 

3. EC2에 EBS Volume 추가하기

 -  EC2 대시보드로 이동 > "Elastic Block Store" > "볼륨" 클릭

 - "볼륨 생성" 클릭.

 

3.1 볼륨 설정

 

1) 볼륨 유형 : 기본인 gp2를 사용할 것 이다. 

( 볼륨 유형에 대해선 하기 aws 가이드 문서에 나와 있긴 하지만 볼륨, 볼륨유형이 먼지 간략하게만 알고 넘어가자)

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html?icmpid=docs_ec2_console

 

더보기
EBS 볼륨(Volume) 이란?

1) 정의 : EBS로 생성한 디스크 하나하나 저장 단위. 즉, EBS의 기본 형태로 OS에서 바로 사용 가능한 단위를 말한다.

2) 유형 (간단하게 큰 특징만 살펴 보자)

 - 범용 SSD 볼륨

① gp2 : 개발/테스트 환경, 짧은 지연 시간의 대화형 애플리케이션 및 부트 볼륨을 비롯한 광범위한 트랜잭션 워크로드에 적합.

② gp3 : 가상 데스크탑, 중간 크기 단일 인스턴스 데이터베이스,  개발 및 테스트 등에 적합.

 

 - 프로비저닝 된 IOPS SSD 볼륨

①  io1 : I/O가 많이 발생하는 NoSql 및 관계형 데이터베이스에 적합.(HBase, Vertica, Cassandra 등)

②  io2 : io1과 비교하여 내구성이 100배 높다.
      io2는 높은 내구성을 요구하면서 I/O가 많이 발생하는 데이터 베이스에 적합.(Oracle, Microsoft SQL 서버, IBM DB2)

 

 - 처리량 최적화된 HDD : st1

대규모 스트리밍 워크로드에 이상이다.(처리량 최적화 HDD)
대규모 데이터 세트와 큰 I/O가 있으면서 액세스 횟수가 많고 처리량 집약적인 워크로드에 적합.(빅 데이터, 데이터 웨어하우스, 로그 처리)

 

 - 콜드 HDD 볼륨(최저 비용) : sc1

콜드 데이터 세트가 있고 액세스 빈도가 낮은 워크로드에 적합. 덜 액세스 되고 빠르게 액세스 할 필요가 없는 데이터를 보관하기 위한 용도.

 

 - 마그네틱(Standard)

데이터에 자주 액세스하지 않는 워크로드에 가장 적합.

 

※ 참고(성능)

 - 각 하드의 성능은 용량과 MAX IOPS 수치를 보면 된다.(IOPS 수치가 높을수록 데이터 통신이 빠르다)

 - 일반적으로 범용타입을 선택하면 되지만, 자신은 요금을 극도로 아끼겠다 하면 마그네틱을 사용하면 된다.


※ 참고(IOPS, Throughput(처리량))

 - IOPS(Input/Output Operations Per Second, IOPS)는 초당 처리되는 IO의 개수(IO/s)를 의미한다.

 - Throughput(처리량)은 초당 처리되는 바이트의 량을 의미한다. ex) B/s, KB/s, MB/s

 

 

2) 볼륨 크기 : 본인이 필요한 용량을 추가

3) 가용 영역  : EC2에 연결할 것이며, 해당 EC2와 동일한 AZ에 위치해야 한다.

 - 정상적으로 볼륨이 생성된 것을 볼 수 있다.

 

 

3.2 EBS 볼륨을 EC2에 추가 하기

 - 생성된 볼륨 체크 > "작업" 클릭 > "볼륨 연결" 클릭

 - 연결할 인스턴스 선택 > 디바이스 이름은 default로 설정 하였다.

※ /dev/sdf 로 지정했어도, Linux 커널로 인해 내부적으로 xvdf로 바뀌게 된다.

 

※ 참고

 - 루트 볼륨의 이름은 /dev/sda1 이므로 /dev/sdb 부터 사용할 수 있다. (루트볼륨의 이름은 AMI에 따라 다릅니다)

   (기존 ec2에 장착되어 있는 볼륨 확인시 이름은 /dev/sda1)

 

 - 연결 완료 후 "볼륨 상태" 및 "연결된 인스턴스"를 확인 해 본다. 정상적으로 연결 되었다.

 

3.3 볼륨 연결 확인하기

 - 연결을 완료했던 ec에 접속 후 다음 2가지 명령어를 입력 해 보자.

$ ls -asl /dev/xvd* # 연결된 디렉토리 조회
$ lsblk # 파일 시스템 조회

※ /dev/sdf 로 지정했어도, Linux 커널로 인해 내부적으로 xvdf로 바뀌게 된다.  

ex) 방법1

ex) 방법2

 

 - 내가 새로 추가한 볼륨을 확인할 수 있다.

 

3.4 파일시스템 확인 및 포맷하기

 - /dev : 단순히 외부 디바이스, 하드를 모아둔 곳이다. 하드(EBS 볼륨)를 리눅스에 연결했다고 해서 바로 바로 사용할 순 없다.
 - 이를 파일시스템으로 포맷해줘야 사용할 수 있게 된다.

 

1) 파일 시스템 이란?

 - 저장장치에 파일을 어떻게 쓰고, 관리하고, 찾고, 읽을 것인지에 대한 규칙.

 

2) 파일 시스템의 종류

  • Linux : ext, ext2, ext3, ext4, xfs
  • Windows : FAT12, FAT16, FAT32, exFAT, NTFS
  • Mac : HFS, HFS+

3) 파일 시스템 존재여부 확인 및 루트볼륨 파일시스템 확인

3.1) 파일시스템 존재 여부 확인

file -s <장치명>

 - data라고 나타난다면 파일시스템이 존재하지 않는 것이다.

 

3.2) 루트볼륨 파일시스템 확인

df -hT

 - 우분투를 설치 했기 떄문에 당연한 얘기지만, Linux, ext4 임을 확인할 수 있다.

 

 

3.3) 포맷하기

mkfs -t <볼륨타입> <볼륨장치명>

 - 나의 경우 root 볼륨타입인 ext4로 포맷

 - 정상적으로 포맷 되었는지 확인 해보자. 파일시스템이 생성되어있음을 확인할 수 있다.

 

3.5 마운트 하기

 - 마운트란 보조기억장치(하드디스크, usb 등)을 디렉터리로서 사용할 수 있게 해주는 행위 이다.

 

1) 마운트 지점 디렉토리 생성

 - window의 D:\ 과 유사하게

   신규 디바이스(EBS)를 OS(EC2)에서 사용자가 직접 이용할수 있게, 연결시켜줄 디렉터리를 만든다.

 - 나의 경우 "xvdf"로 생성하였다.

mkdir /xvdf

 

2) 마운트 하기

 - blkid 명령어를 통해 UUID와 TYPE을 확인하여 마운트 할 수 있지만, 조금더 가시적인 방법으로 마운트 해보자.

 

 - 내가 추가한 디바이스와 내가 생성한 디렉토리를 통해 마운트. 이후 확인하면 정상적으로 볼륨이 확인 된다.

mount /dev/xvdf /xvdf

 

3) 영구 마운트 

 - 여기까지만 해서는 재시작 시 다시 마운트를 해줘야 한다.

 - /etc/fstab에 등록하면 부팅 시 자동으로 마운트 된다. 해당 작업까지 진행해 주자.

 - 하기 명령어를 입력하여 전체 마운트

mount -a

 

3.6 EBS 볼륨 확장 하기

 - 예전 EC2를 생성 해 보았을때 용량을 늘릴순 있어도, 줄이는것은 안되는거을 보았었다. 

 - 볼륨 확장은 가능하니 해당 방법도 알아보자.

 - "볼륨" > "확장할 볼륨 체크" > "볼륨 수정"

 - 원하는 크기로 변경

 - 어느정도 시간이 걸린 후에 "사용 중"으로 뜬다.

 

※ AWS 콘솔에서 크기를 수정했다고 해서, EC2 인스턴스에서 자동으로 볼륨 크기가 확장되지 않는다.

 - 나의 경우 EX4 볼륨 유형이었기 때문에 다음 명령어를 입력 한다.

resize2fs {장치명}

 

 - 혹시  xf4의 볼륨 유형을 선택한 경우 다음 명령어를 수행 한다.

$ sudo xfs_growfs -d {마운트 위치}

 

 - df -hT 를 통해 정상적으로 크기가 확장된 것을 확인할 수 있다.

 - 최종적으로 동잃나 EC2 인스턴스에 2개의 볼륨이 장착 되어있는 것을 볼 수 있다.

 - 실습은 다 끝났지만 마지막으로 한가지만 정리 하도록 하자.

 

4. EBS와 Instance Storage

 - EC2 인스턴스의 저장 타입은 대표적으로 두가지가 있다.


1) EBS 기반

 - 앞서 계속 설명한 EBS이며, EC2와 네트워크로 연결된다. (그렇기 때문에 상대적으로 느리다.)


2) 인스턴스 저장 기반 (Instance Storage)

 - EC2안에 storage가 들어 있다. (네트워크 연결되는 형식이 아니기 때문에 상대적으로 빠름.)

 - EC2안에 들어있기 때문에, 인스턴스가 삭제되면 storage도 같이 삭제 된다.

 

300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.