AWS 기술 블로그
Amazon EBS의 FSR을 이용해 설치형 DB 를 빠르게 스케일업 하기
부제: EBS 볼륨 초기화로 인한 성능 저하 극복
목차
- 신성통상의 온라인 쇼핑몰, 굿웨어몰
- 설치형 데이터베이스 스케일-업 성능 저하
- EBS 볼륨 초기화로 인한 성능 저하
- 빠른 스냅샷 복원 (Fast Snapshot Restore, FSR)의 활용
- 빠른 스냅샷 복원 과정
- 빠른 스냅샷 복원 사용시 고려사항
- 빠른 스냅샷 복원 모니터링 방법
- 빠른 스냅샷 복원 사용 후 성능 변화
- 나가면서
신성통상의 온라인 쇼핑몰, 굿웨어몰
신성통상의 굿웨어몰은 패션과 라이프스타일을 아우르는 커뮤니티 커머스 플랫폼으로, 탑텐, 올젠, 폴헴, 지오지아 등 대중들에게 사랑 받는 여러 브랜드를 만날 수 있습니다. 현대 사회의 다양한 스타일과 취향을 가진 사람들을 위한 완벽한 온라인 의류 쇼핑몰을 목표로 최신 패션 트렌드를 반영하는 제품 라인업을 보유하고 있으며, 합리적인 가격에 품질과 디자인에 높은 기준을 적용하여 고객들에게 만족스러운 경험을 제공합니다. 좋은 옷을 모든 사람들에게, 굿웨어몰은 고객들에게 조금 더 가까이, 즐거운 쇼핑을 위한 여정을 함께 합니다.
신성통상은 이벤트 대응을 위해 설치형 데이터베이스인 eXperDB(PostgreSQL기반)를 스케일-업을 하는 과정에서 성능 저하 문제에 직면하였고, 이를 해결하는 방안으로 빠른 스냅샷 복원(Fast Snapshot Restore) 기능을 활용하였습니다. 이번 블로그에서는 설치형 데이터베이스를 사용할 때, EBS의 빠른 스냅샷 복원(Fast Snapshot Restore) 기능을 사용하는 방법과, 사용시 주의사항에 대해 살펴보겠습니다.
설치형 데이터베이스 스케일-업 성능 저하
신성통상은 굿웨어몰의 운영 데이터베이스로 EC2 기반의 설치형 데이터베이스인 eXperDB(PostgreSQL기반)를 사용하고 있습니다. 정기적으로 진행하는 마케팅 이벤트에 대응하기 위해 기 운영 중인 데이터베이스는 유지하고, 스케일-업한 데이터베이스를 추가 생성하여 트래픽에 대응할 계획이었습니다. eXperDB에서 제공하는 AMI 이미지를 사용하여 EC2를 스케일-업해서 생성하고 데이터 영역은 EBS 스냅샷을 이용하여 복구하는 방식입니다. 사전 테스트 진행 중에 EBS 볼륨 초기화가 완료되지 않은 상태에서 데이터베이스에 접근하여 쿼리를 수행하자, 레이지로딩(lazy loading)으로 인해 성능 저하가 발생하였고 이벤트 대응이 불가능한 상황에 처했습니다.
EBS 볼륨 초기화로 인한 성능 저하
EBS 볼륨 초기화란, EBS 스냅샷을 이용하여 EBS 볼륨을 복원할 때, 백그라운드에서 기존에 S3에 저장된 스냅샷 데이터를 EBS 볼륨으로 전부 쓰기작업하는 것을 말합니다. EBS는 EBS 볼륨 초기화가 완료된 이후에 최고 성능을 발휘합니다. EBS 볼륨 초기화가 완료되지 않은 블록에 접근하면 그 때부터 해당 블록을 S3에서 다운로드하여 볼륨에 쓰기 작업을 시작합니다. 이를 레이지로딩(lazy loading)이라고 하며, 최초의 블록 접근이기 때문에 볼륨의 성능 저하를 경험하게 됩니다.
신성통상은 약 500GiB의 데이터로 테스트를 수행하였는데, EBS 볼륨 초기화를 완료하는데 5시간 이상 시간이 소요 되었고, 완료 전에 데이터베이스의 데이터에 접근하여 쿼리를 수행 시, 3,686만건의 테이블은 약 2.4초 정도, 11,058만건의 테이블은 약 10.9분정도 소요되었습니다. 실 운영 데이터는 500GiB보다 훨씬 클 뿐만 아니라, 마케팅 이벤트에 빠르게 대응하기 위해서는 5시간 이상의 EBS 볼륨 초기화 시간을 수용하기 어려웠습니다. 이에 EBS 볼륨 초기화 완료 시간을 줄일 수 있는 방안을 모색하였습니다.
빠른 스냅샷 복원 (Fast Snapshot Restore, FSR)의 활용
신성통상은 EBS 볼륨 복원 매커니즘인 레이지로딩(lazy loading)을 성능 저하의 원인으로 판단하고, EBS 볼륨 초기화가 완료된 상태로 데이터를 복구할 수 있는 빠른 스냅샷 복원(Fast Snapshot Restore) 기능을 활용하기로 했습니다. 빠른 스냅샷 복원(FSR)이란, 스냅샷으로부터 볼륨을 생성할 때 EBS 볼륨 초기화가 완료된 상태로 복원할 수 있는 기능입니다. 초기화가 완료된 볼륨은 데이터에 접근하는데 레이지로딩으로 인한 지연 시간이 발생하지 않고, 데이터를 즉시 사용할 수 있는 상태입니다.
신성통상에서 채택한 빠른 스냅샷 복원 과정과 빠른 스냅샷 복원 시 주의 사항을 살펴보겠습니다.
빠른 스냅샷 복원 과정
빠른 스냅샷 복원을 사용하기 위한 전제 조건은 아래와 같습니다.
- 빠른 스냅샷 복원은 16TiB 이하의 스냅샷에서 활성화할 수 있습니다.
- 최대 64,000 IOPS 및 1,000 MiB/s 처리량으로 프로비저닝된 볼륨의 경우, 빠른 스냅샷 복원의 성능 이점을 누릴 수 있습니다. 64,000 IOPS 또는 1,000 MiB/s 처리량을 초과하는 성능으로 프로비저닝된 볼륨의 경우는 볼륨초기화 방식을 활용하길 권고합니다.
EBS 스냅샷에서 빠른 스냅샷 복원은 기본적으로 비활성화되어 있습니다. 콘솔이나 AWS CLI를 통해 빠른 스냅샷복원을 활성화할 수 있습니다.
그럼 AWS 콘솔 상에서 빠른 스냅샷 복원 과정을 설정해 보겠습니다.
- Amazon EC2 콘솔을 열고, 탐색 창에서 스냅샷( Snapshots)을 선택합니다. 스냅샷 창에서 작업(Actions), 빠른 스냅샷 복원 관리(Manage fast snapshot restore)를 선택합니다.
- 빠른 스냅샷 복원 관리(Manage fast snapshot restore) 섹션에는 선택한 스냅샷에 대해 빠른 스냅샷 복원을 활성화할 수 있는 가용 영역이 모두 나열됩니다. 현재 상태(Current status)는 각 영역에 대해 빠른 스냅샷 복원이 현재 활성화되어 있는지 아니면 비활성화되어 있는지를 나타냅니다. 이번 예제에서는 ap-northesat-2a의 가용영역으로 선택합니다.
- 빠른 스냅샷 복원이 비활성화된 영역에서 빠른 스냅샷 복원을 사용하려면 가용 영역(Availability Zone)을 선택하고 활성화(Enable)를 선택합니다. 활성화 이후에는 활성화된 가용 영역당 최소 1시간 동안 분당 요금이 청구됩니다.
- 활성화가 완료되면 스냅샷(Snapshots) 상세 페이지에서 빠른 스냅샷 복원 정보를 확인할 수 있습니다. 활성화됨 상태(Enabled)로 표시되어야만 완전한 성능 이점을 누릴 수 있습니다. 최적화중 (Optimizing) 상태에서도 약간의 성능 이점을 누릴 수 있습니다. 활성화중(Enabling) > 최적화중(Optimizing > 활성화됨(Enabled) 상태로 활성화가 진행됩니다.
- 활성화된 스냅샷에서 볼륨을 복원합니다. 스냅샷(Snapshots)의 작업(Actions), 스냅샷에서 볼륨 생성(Create volume from snapshot)을 선택합니다.
- 볼륨 생성(Create volume) 화면에서 가용 영역(Availability Zone)은 빠른 스냅샷 복원 설정 (2번 과정)에서 활성화한 가용 영역으로 선택합니다. 빠른 스냅샷 복원(Fast snapshot restore)에서 선택한 스냅샷에 대해 활성화(Enabled for selected snapshot)됨을 확인합니다.
- 복원이 완료되면, 해당 볼륨에서 빠른 스냅샷 복원 기능을 사용하여 복원되었는지 살펴봅니다. 빠른 스냅샷 복원(Fast snapshot restored)이 예(Yes)임을 확인합니다. 이 값이 아니오(No)인 경우는 완전한 성능 이점을 누릴 수 없습니다.
- 빠른 스냅샷 복원을 더이상 사용하지 않을 경우, 비활성화(Disable)시킬 수 있습니다. 스냅샷(Snapshots) 메뉴로 돌아간 뒤, 빠른 스냅샷 복원 설정(Fast snapshot restore settings)에서 비활성화(Disable)을 선택합니다.
빠른 스냅샷 복원 사용시 고려사항
(1) 크레딧버킷(Credit bucket) 내 크레딧 확인
빠른 스냅샷 복원을 사용하기 위해서는 ‘크레딧버킷’ 내의 크레딧이 존재해야 합니다. 빠른 스냅샷 복원을 활성화할 때 가용 영역을 지정하는데, 이 가용 영역당 스냅샷 별로 하나의 ‘크레딧버킷’이 생성 되며, 복구 볼륨 당 하나의 크레딧을 사용합니다.
‘크레딧버킷’의 채우기 속도와 최대 크레딧 크기는 아래의 수식에 의해 산출됩니다.
- 버킷 당 크레딧 생성 속도
- MIN (10, (1024 ÷ 스냅샷 사이즈(GiB)))
- 버킷 당 최대 크레딧 크기
- MAX (1, MIN (10, (1024 ÷ 스냅샷 사이즈(GiB)))
스냅샷의 크기가 500GiB라고 가정하면, 지정된 가용 영역에서 ‘크레딧버킷’은 한시간 당 2개의 크레딧을 생성하고, 버킷의 최대 크레딧 크기는 2개입니다. 빠른 스냅샷 복원을 활성화 한 뒤 30분이 지나면 한개의 크레딧이 생성되므로, 30분 이후부터 스냅샷을 복원하면, EBS 볼륨 초기화 상태로 사용 가능합니다.
- 버킷 당 크레딧 생성 속도
- MIN(10, (1024÷ 500(GiB))) = MIN(10, 2) = 2 credits per hour : 한시간당 2 크레딧 생성
- 버킷 당 최대 크레딧 크기
- MAX(1, MIN(10, (1024÷ 500(GiB)))) = MAX(1,2) = 2 (최대 크레딧 크기 2개)
(2) 빠른 스냅샷 활성화 비용 확인
빠른 스냅샷 복원을 사용하면 스냅샷의 크기에 관계없이 기능이 활성화된 각 스냅샷(Snapshots) 및 각 가용영역(Availability Zone)에서 1 DSU (Data Service Unit) 시간당 $0.86 (아시아 태평양(서울) 리전 기준)로 청구됩니다. DSU 시간은 데이터 서비스 단위-시간으로 최소 1시간이고 분당 요금이 청구됩니다.
비용 분석을 위해 제공되는 툴인 AWS Cost Explorer에서 빠른 스냅샷 복원 기능을 확인할 수 있습니다. 서비스는 EC2-Others로, 사용량 유형은 (AZ명)-EBS:FastSnapshotRestore으로 필터 설정을 합니다. 하나의 가용 영역에 하나의 스냅샷에 대해 빠른 스냅샷 복원이 활성화되었다고 할 때, 일단위로 $20.52로 지출 되었습니다. 계산식은 아래와 같습니다.
- 일단위 비용 : 1 DSU 시간 당 $0.86 (0.855) X 24시간 = $20.52
빠른 스냅샷 복원 모니터링 방법
빠른 스냅샷 복원은 CloudWatch로 ‘크레딧버킷’ 채우기 속도와 크레딧 크기를 확인할 수 있습니다. CloudWatch 콘솔에서 지표(Metrics), 모든 지표(All metrics)를 선택합니다. EBS > 빠른 복원 지표(Fast Restore Metrics)를 선택하고 해당 스냅샷 정보를 찾습니다.
아래의 그래프는 8 GiB의 스냅샷을 대상으로 모니터링한 예시입니다. 빠른 스냅샷 복원을 활성화였기 때문에 크레딧버킷사이즈는 10개이고, 약 13분 경과 후(00:36→ 00:49)에 2개의 크레딧, 최대 10개의 크레딧까지 생성되는 것을 확인할 수 있습니다.
- 버킷 당 크레딧 생성 속도
- MIN(10, (1024÷ 0.008)) = MIN(10, 128,000) = 10 credits per hour
> 시간당 10 크레딧 생성
> 분당 0.1666 크레딧 생성
- MIN(10, (1024÷ 0.008)) = MIN(10, 128,000) = 10 credits per hour
- 버킷 당 최대 크레딧 크기
- MAX(1, MIN(10, (1024÷ 0.008))) = MAX(1,10) = 10
> 최대 10개의 크레딧
- MAX(1, MIN(10, (1024÷ 0.008))) = MAX(1,10) = 10
빠른 스냅샷 복원 사용 후 성능 변화
신성통상은 빠른 스냅샷 복원 적용 이후에 EBS 볼륨 초기화를 완료된 상태로 데이터베이스를 스케일-업할 수 있었고, 기존의 운영 데이터베이스와 비슷한 수준의 성능을 확인하였습니다. 이러한 테스트를 기반으로 빠른 스냅샷 복원을 활용하여 향후 마케팅 이벤트를 대응할 예정입니다.
나가면서
EBS의 빠른 스냅샷 복원은 2019년 11월에 소개된 기능입니다. 그 당시에는 빠른 부팅 시간을 필요로 하는 VDI 환경에 사용하거나 오토스케일 그룹을 온라인 상태로 유지하여 프로세싱 트래픽 대응을 용이하게 하기 위한 방법으로 안내되었습니다. 이번에 소개한 신성통상의 케이스는 EC2 기반의 설치형 데이터베이스를 운영 중일 때 이벤트 등에 대응하기 위해 빠르게 데이터베이스를 스케일-업하는 용도로 사용하였습니다. 빠른 스냅샷 복원 기능을 사용하는 대신에 블로그에서 소개한 대로 dd와 fio 유틸리티를 사용하여 EBS 볼륨 초기화가 가능하지만, 초기화작업이 완료되기 전까지는 프로비전된 성능을 제공하지 않을 뿐 아니라, EBS 볼륨 크기가 커질수록 초기화하는데 시간이 오래걸리는 단점이 있습니다. 그렇기 때문에 빠른 스냅샷 복원을 사용하여 즉각적으로 EBS 볼륨 초기화를 완료하는 방식이 보다 안정적이고 효율적일 것입니다.
참고 자료
- EBS 볼륨 초기화 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ebs-initialize.html#ebs-initialize-linux
- EBS 빠른 스냅샷 복원 기능 출시 : https://aws.amazon.com/ko/blogs/korea/new-amazon-ebs-fast-snapshot-restore-fsr/
- 빠른 스냅샷 복원 활성화 스냅샷에서 생성된 Amazon EBS 볼륨이 느린 이유는 무엇입니까? : https://repost.aws/ko/knowledge-center/ebs-slow-volume-fsr-snapshot
- 빠른 스냅샷 복원 비용 : https://aws.amazon.com/ko/ebs/pricing/
글쓴이
|