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)를 사용할 수 있다.
아래 그림과 같이 호스트 컴퓨터 내에서만 공유되어 지며 다른 호스와의 공유되지 않는다.
인스턴스 스토어에 저장된 데이터는 아마존 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 만들어졌다.
데이터 양에 상관없이 언제든 저장하고 사용할 수 있다.
|
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
|
[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 ~]#
|
#별첨. 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) |