본문 바로가기

기술 이야기/Amazon AWS

EBS(Elastic Block Storage) Sizing

1. 아티클 개요

본 문서는 AWS(Amazon Web Service)의 EC2 인스턴스에 사용되는 각 스토리지의 비교와 용량 산정 및 스토리지 확장 방법에 대해 가이드한다. 


2. Storage

Amazon EC2에서는 Amazon Elastic Block Store(Amazon EBS), Amazon EC2 Instance Store, Amazon Simple Storage Service(S3)를 사용할 수 있다.


2.1 Amazon EBS(Elastic Block Store)
Amazon EBS는 Amazon EC2 인스턴스용 영구 스토리지로써 인스턴스의 중지나 종료에 상관없이 데이터가 유지된다.  또한 EBS는 두 가지 볼륨 유형, 즉 표준 볼륨과 Provisioned IOPS 볼륨을 제공하는데 표준 볼륨은 I/O 요구사항이 보통 수준이거나 가끔씩 집중적으로 발생하는 애플리케이션에 적합한 스토리지이며 Provisioned IOPS 볼륨은 I/O 집중적인 애플리케이션(예: 데이터베이스)에 적합한 스토리지로 예측 가능하고 우수한 성능을 제공한다.

2.2 Amazon EC2 Instance Store

각각의 아마존 EC2인스턴스는 호스트 스토리지에 접근할 수 있다. 이런 물리적인 스토리지를 Instance Store라고 부른다. 아마존 EC2 인스턴스 스토어는 아마존 EC2 인스턴스 사용할 때 임시 Block-Level 스토리지를 제공한다. 아마존 EC2 인스턴스 타입에 따라 사용할 수 있는 용량을 제공한다. 
EBS는 EC2 Instance 생성 후에라도 별도로 추가하여 Attach 할 수 있지만, Instance Store는 다음과 같이 EC2 인스턴스 생성 시 또는 AMI 생성 시 볼륨을 추가해야 한다. Instance Store 내에 저장된 데이터는 EC2 인스턴스가 유지되는 동안 저장되며 기존 인스턴스에서 분리하여 다른 인스턴스에 추가할 수 없다. 





아래 그림과 같이 호스트 컴퓨터 내에서만 공유되어 지며 다른 호스와의 공유되지 않는다



인스턴스 스토어에 저장된 데이터는 아마존 EC2 인스턴스 사용중에만 유지된다. 의도적이든 오류에 의한 재시작이든 인스턴스 스토어 내용을 유지된다. 하지만 다음과 같은 경우에는 데이터가 손실된다. 

1) 기본 드라이브 오류

2) Amazon EBS-backed instance 가 중지되었을 경우

3) 인스턴스 Terminating

중요하고 오래 보관되어야 하는 데이터는 인스턴스 스토어 볼륨에 저장을 하면 안되고 EBS나 아마존 S3와 같은 복제가 가능한 스토리지를 이용하여 데이터를 안전하게 저장한다.  


아마존 EC2 Instance Store사용 시나리오

1) 버퍼, 캐시, 크롤링 데이터, 임시데이터처럼  빈번하게 바뀌는 데이터를 저장

2) Load-balanced pool of web server같은 replicated across a fleet of instance.

 

2.3 S3

S3는 인터넷 스토리지 서비스로 EC2 인스턴스와는 별개로 사용할 수 있으며, 확장성과 신뢰성이 높다.

아마존 S3는 인터넷 스토리지 서비스 입니다. 안정적이고, 빠르고, 저렴한 스토리지이다. 

Amazon S3는 web-scale computing 쉽게 make 만들어졌다. 

데이터 양에 상관없이 언제든 저장하고 사용할 수 있다.


2.4 EC2 Storage 비교 

 

Instance Store

EBS

S3

Type

File system

File system

Object store

안정성

*

**

***

Performance

Very Fast

Fast

Fast*

 

 

 

 

용량

Depend On

Instance Type

1GiB~1TB

제한없음

단 개별파일이 (1byte~5TB)

사용처

Disk Drive

Disk Drive

Write Once

Read Only


3 용량 산정

EC2 인스턴스에 스토리지 추가 시 너무 적은 용량을 사용하게 되면 시스템 또는 애플리케이션의 동작에 심각한 영향을 미치며 너무 많은 용량을 사용하게 되면 불필요한 비용을 지불해야 하기 때문에 적절한 사이즈를 할당하는 것이 중요하다.


EC2 인스턴스의 Root 볼륨 사이즈를 10GB로 가정했을 때 CentOS 6.4를 기준으로 6GB 가량의 여유 공간이 존재한다. 이때 시스템 로그는 기본적으로 큰 용량을 차지하지 않을 뿐더러 rotate 되면서 적재되기 때문에 운영에 큰 이슈는 없다. 하지만 용량이 큰 다양한 애플리케이션의 설치 및 파일의 생성, 다량의 로그를Root 볼륨에 적재할 경우 Disk Full이 발생할 수 있기 때문에 Root 볼륨 사이즈를 늘려주거나 별도의 스토리지를 추가해야 한다.


용량 산정에 있어 가장 중요한 요소는 기간별(백업 주기별) 데이터 증가량을 예측하는 것으로 계산된 용량에 여유분을 두고 스토리지를 생성하는 것이 바람직하다. 


4 스토리지 확장

인스턴스 생성 시 EBS 볼륨의 크기를 변경하거나 파티션의 용량을 1TB 이상 필요로 할 경우가 있다. 

4.1 볼륨 크기 변경

EBS 볼륨은 동적으로 사이즈를 변경할 수 없으며, 인스턴스 생성 시 변경해야 한다.


인스턴스 생성 후 resize2fs를 실행하면 볼륨 사이즈가 증가된 것을 확인할 수 있다.


[ec2-user@ip-10-197-34-223 ~]$ sudo su -

[root@ip-10-197-34-223 ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/xvda1            7.9G  963M  6.9G  13% /

tmpfs                 829M     0  829M   0% /dev/shm

[root@ip-10-197-34-223 ~]# resize2fs /dev/xvda1

resize2fs 1.42.3 (14-May-2012)

Filesystem at /dev/xvda1 is mounted on /; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 2

The filesystem on /dev/xvda1 is now 7864320 blocks long.


[root@ip-10-197-34-223 ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/xvda1             30G  967M   29G   4% /

tmpfs                 829M     0  829M   0% /dev/shm

[root@ip-10-197-34-223 ~]#

 

이제 SWAP 영역을 기존의 항목에서 16G 항목으로 변경한다. 16G EBS 볼륨이 파티션에 보이게 되며, 이 볼륨을 SWAP 디스크로 포맷하도록 하는 명령의 순서를 아래에 기술하였다. 


[root@ip-10-197-34-223 ~]# cat /proc/partitions

major minor  #blocks  name


 202        1   31457280 xvda1

 202       16   16777216 xvdb

 202        3     917504 xvda3


[root@ip-10-197-34-223 ~]# fdisk /dev/xvdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0x3231cc2b.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won't be recoverable.


Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)


WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') and change display units to

         sectors (command 'u').


Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-2088, default 1):

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-2088, default 2088):

Using default value 2088


Command (m for help): t

Selected partition 1

Hex code (type L to list codes): 82

Changed system type of partition 1 to 82 (Linux swap / Solaris)


Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.

[root@ip-10-197-34-223 ~]# mkswap /dev/xvdb

mkswap: /dev/xvdb: warning: don't erase bootbits sectors

        on whole disk. Use -f to force.

Setting up swapspace version 1, size = 16777212 KiB

no label, UUID=f6e4090f-a4f6-4c39-b8b3-e9efa9f18d55

[root@ip-10-197-34-223 ~]#

[root@ip-10-197-34-223 ~]# ls -al /dev/sdb

lrwxrwxrwx 1 root root 4 May 28 09:03 /dev/sdb -> xvdb

[root@ip-10-197-34-223 ~]# vi /etc/fstab


위와 같이 SWAP 파티션이 구성되면 부팅시 해당 파티션을 마운트 하도록 파일 시스템 테이블에 등록하는 과정을 수행한다

이를 변경하는 /etc/fstab의 내용을 다음과 같이 편집하도록 한다.

#

LABEL=/     /           ext4    defaults,noatime  1   1

tmpfs       /dev/shm    tmpfs   defaults        0   0

devpts      /dev/pts    devpts  gid=5,mode=620  0   0

sysfs       /sys        sysfs   defaults        0   0

proc        /proc       proc    defaults        0   0

/dev/sdb        none    swap    sw,comment=cloudconfig  0       0

 


이제 변경된 SWAP을 적용하기 위해 swapoff, swapon 명령을 사용하여 swap영역을 reload하도록 합니다. 해당 swap이 로드된 것이 확인되면 free명령을 통하여 16G의 swap이 구성되었는지 확인한다.


[root@ip-10-197-34-223 ~]# swapoff -a

[root@ip-10-197-34-223 ~]# swapon -a

[root@ip-10-197-34-223 ~]# free

             total       used       free     shared    buffers     cached

Mem:       1696704     212704    1484000          0       8988     157416

-/+ buffers/cache:      46300    1650404

Swap:     16777212          0   16777212

[root@ip-10-197-34-223 ~]#

 


4.2 파티션 용량 확장
EBS는 1GiB ~ 1TiB 용량 제한이 있으며 1TB 이상의 파티션 용량이 필요할 경우 여러개의 물리 드라이브를 하나의 논리 드라이브로 묶을 수 있는 솔류션이 필요하다.
RAID 0, RAID 1
- RAID5와 RAID6은 최적의 성능을 없어서 추천하지 않는다

대표적인 솔루션으로 다음 두 가지를 고려할 수 있다.
LVM(Logical Volume Manager)
GlusterFS 

#별첨. AWS 인스턴스 타입 #


Instance Type

Instance Store Volumes

c1.medium

1 x 350 GB

c1.xlarge

4 x 420 GB (1680 GB)

c3.large

2 x 16 GB SSD (32 GB)

c3.xlarge

2 x 40 GB SSD (80 GB)

c3.2xlarge

2 x 80 GB SSD (160 GB)

c3.4xlarge

2 x 160 GB SSD (320 GB)

c3.8xlarge

2 x 320 GB SSD (640 GB)

cc2.8xlarge

4 x 840 GB (3360 GB)

cg1.4xlarge

2 x 840 GB (1680 GB)

cr1.8xlarge

2 x 120 GB SSD (240 GB)

hi1.4xlarge

2 x 1024 GB SSD (2048 GB)

hs1.8xlarge

24 x 2048 GB (49 TB)

i2.xlarge

1 x 800 GB SSD

i2.2xlarge

2 x 800 GB SSD (1600 GB)

i2.4xlarge

4 x 800 GB SSD (3200 GB)

i2.8xlarge

8 x 800 GB SSD (6400 GB)

m1.small

1 x 160 GB†

m1.medium

1 x 410 GB

m1.large

2 x 420 GB (840 GB)

m1.xlarge

4 x 420 GB (1680 GB)

m2.xlarge

1 x 420 GB

m2.2xlarge

1 x 850 GB

m2.4xlarge

2 x 840 GB (1680 GB)

m3.medium

1 x 4 GB SSD

m3.large

1 x 32 GB SSD

m3.xlarge

2 x 40 GB SSD (80 GB)

m3.2xlarge

2 x 80 GB SSD (160 GB)

t1.micro

None (use Amazon EBS volumes)