안녕하세요 오늘은 AWS EBS에 대해서 알아보겠습니다.
AWS EBS는 Elastic Block Storage로 EC2 instance 에 직접 붙혀서 사용하는 볼륨형 스토리지 입니다.
2006년에 처음 만들어졌으며 그 이후로 Magnetic storage 부터 SSD, HDD 까지 다양한 타입이 개발되었습니다.
EBS type 으로는 SSD 형 스토리지로 Provisioned IOPS와, GP2(General Prupose SSD) 가 있고,
HDD 형 스토리지로 Troughput Optimized 와 Cold 형이 있습니다.
오늘은 SSD의 General Purpose SSD인 gp2에 대해 자세히 알아보겠습니다.
gp2는 GiB당 3 IOPS가 할당되며 최소 100 IOPS가 유지됩니다. 1:3 비율로 100GB 면 300IOPS의 성능을 낼 수 있겠죠.
이것이 EBS IOPS의 Base Line 입니다.
EBS 용량은 1GiB ~ 16TiB 를 할당할 수 있는데, 최대 16,000 IOPS 까지만 지원합니다. (최대 48,000IOPS가 아님)
* IOPS = 초당 입력/출력 (단위 : KiB)
여기서 EBS 최소용량 1GiB는 Root EBS볼륨에는 예외 입니다. Root EBS 볼륨은 OS가 포함되어있기 때문에 각 OS 마다 최소 용량이 정해져 있습니다. 일반적으로 Amazon linux는 8GB, Windows 는 20GB, Redhat 리눅스는 10GB 입니다.
gp2 타입은 위에서 설명드린 Base Line으로 제공되는 IOPS이상으로 성능을 낼 수가 있습니다.
이걸 가능하게 하는 것이 바로 버스트(Burst) IOPS 입니다.
버스트 IOPS는 최대 3,000IOPS 까지 가능합니다. 즉, 내가 100GiB의 gp2 타입 EBS를 생성했어도 Base line 인 300IOPS가 아닌
3000IOPS까지의 성능을 낼 수 있다는 것이죠. 물론 무제한은 아니고 제공되는 I/O크레딧이 소진되는 시간 동안만 가능합니다.
I/O크레딧은 EBS생성시 최초로 540만 I/O크레딧이 제공되며 그 이상을 넘을 순 없습니다.
Base line 이상의 IOPS를 소모할때 I/O크레딧이 차감되고, 동시에 Base line만큼 초당 IOPS의 I/O크레딧이 쌓이게 됩니다.
따라서, Base line 사이즈가 크면 크레딧이 금방 쌓이게 되겠죠, 버스트의 최대 성능이 3,000IOPS 이기 때문에
EBS용량 1,000GiB 이상이되면 버스트가 의미가 없어지므로 버스트 IOPS가 적용되는 구간은 그 미만의 용량에만 해당됩니다.
I/O크레딧이 모두 소진되었을때를 가정해보았을때 EBS가 100GB일 경우 300IOPS가 Base line이 되기 때문에
5,400,000크레딧 / 300IOPS = 18,000 초, 즉 5시간이 되는 것입니다.
향 후 지속적으로 Base line이상의 IOPS가 발생했을 경우 버스트 IPOS가 모두 소진이 되면 다시 쌓이는데 시간이 걸리므로 성능저하가 발생할 수 있습니다. 따라서 소모될 IOPS의 량과 소모하는 시간을 예상할 수 있으면 성능으로인한 서비스 장애를 피할 수 있겠죠.
하지만 아키텍팅을 할때 서비스 자체가 지속적인 IOPS가 발생하는 서비스라면 gp2 타입 보다는 io1 타입인 Provisioned IOPS SSD를 사용해야합니다.
사용하고자하는 용량에 따라 gp2의 볼륨 처리량(Throughput)을 아래와 같은 계산식으로 계산할 수 있습니다.
EBS의 최대 처리 한도는 250MiB/s 이며, 최대 256 KiB의 I/O크기를 지원합니다.
Throughput in MiB/s = ( 볼륨크기(Volume size in GiB) × I/O크기(I/O size in KiB)) × I/O속도(IOPS/ GiB)
( T = V * I * R )
[예시]
100GiB의 gp2 타입의 EBS를 사용할때
T(Mib/s) = (100)*(2^30)(Bytes) * (256)(2^10)(Bytes) * (300 IOP/s)/(100)(2^30)(Bytes) = 256 * 300 * 2^10 Bytes/s = 75 MiB/s
가 됩니다.
20GiB의 gp타입의 EBS를 사용할때
T(Mib/s) = (20)*(2^30)(Bytes) * (256)(2^10)(Bytes) * (100IOP/s)/(100)(2^30)(Bytes) = 20 * 256 * 1 * 2^10 Bytes/s = 5 MiB/s
여기까지가 Genernal Purpose SSD 타입에 대한 상세 설명이었습니다.
다음 지속적인 IOPS가 발생할때 적합한 Provisined IOPS SSD타입 io1 에 대해서알아보도록 하겠습니다.
io1은 원하는 IOPS를 설정하여 일정한 IOPS를 유지할 수 있습니다.
볼륨 크기는 4GiB ~ 16TiB 이며, Nitro 기반 인스턴스 에서는 최대 64,000IOPS, 다른 인스턴스에서는 32,000IOPS까지 프로비저닝할 수 있습니다.
설정하고자하는 볼륨 크기별로 최대로 설정할 수 있는 IOPS 비율이 1:50 으로 정해져있습니다.
io1 타입으로 100GiB으로 설정했다면 IOPS는 최대 5,000IOPS 까지 설정할 수 있겠죠.
처리량(throughput)에 대해 알아볼까요?
최대 32,000IOPS로 설정되어있다면 io1 볼륨은 최대 256KiB의 I/O크기를 지원하고, 최대 500MiB/s의 처리량을 제공합니다.
32,000IOPS 이상으로 프로비정된 볼륨은 최대 16KiB의 I/O크기를 지원하고, 최대 1,000MiB/s 의 처리량을 제공합니다.
그럼 처음에 EBS의 타입이 변경이 가능할까요?
네 가능합니다. 하지만 타입 변경을 포함한 EBS의 모든 변경은 수정이 완료된 6시간 이후에 다시 변경가능하므로 신중히 판단하셔야합니다. AWS콘솔에서 변경하려고하면 아래와 같은 메시지를 확인할 수 가 있을 것입니다.
오늘은 EBS의 SSD 타입인 gp2와 io1에 대해서 알아보았습니다.
gp2의 버스트 기능을 고려하고, 실제로 계산해보려할 때 쉽지 않을 것입니다.
일반적으로 속적인 IOPS에 대한 요구가 없다면 대부분 gp2로 커버가 가능할 것이므로 미리 계산해볼 필요는 없을 것 같습니다.
단, gp2의 Base line IOPS가 용량(GiB)에 3:1로 비례해서 설정된 다는 것 io1의 설정가능한 IOPS는 용량(GiB)에 50:1 까지만 설정가능하다는 것 정도는 꼭 염두해야겠습니다.
'IT > AWS' 카테고리의 다른 글
[AWS] Nitro system 이란?(AWS 5세대 인스턴스) (0) | 2019.10.16 |
---|---|
[AWS] AWS에서 네트워크 설계 하는 방법(VPC, Subnet) (1) | 2019.10.04 |
[AWS] ACM(AWS Certification Manager)란? (+ 운영이슈) (0) | 2019.09.28 |
[AWS] Amazon EBS용량 확장하기(windows 편) (0) | 2019.09.25 |
[AWS] Amazon EBS용량 확장하기(linux 편) (0) | 2019.09.23 |