Amazon Elastic Block Store(Amazon EBS) 볼륨이 Amazon CloudWatch의 스루풋 IOPS 제한을 위반하지 않고 있습니다. 그런데 볼륨 제한 현상이 발생하고 대기 시간 및 대기열 길이가 길어집니다.
간략한 설명
CloudWatch는 모든 Amazon EBS 볼륨 유형에 대해 1분마다 샘플을 수집하여 IOPS(op/초) 및 스루풋(바이트/초)을 모니터링합니다.
마이크로버스트는 EBS 볼륨이 수집 기간보다 훨씬 짧은 기간 동안 높은 IOPS 또는 처리량을 버스트할 때 발생합니다. 수집 기간보다 짧은 시간 동안 볼륨이 높은 IOPS 또는 처리량을 버스트하므로 CloudWatch는 버스트를 반영하지 않습니다.
예: 950으로 프로비저닝된 IOPS 볼륨(1분의 수집 기간)에 5초 동안 1,000 IOPS를 푸시하는 애플리케이션이 있습니다. Amazon EBS는 볼륨의 IOPS 한도에 도달하면 애플리케이션을 제한합니다. 이때 볼륨이 워크로드를 처리할 수 없으므로 대기열과 지연 시간이 길어집니다.
수집 기간이 60초이기 때문에 CloudWatch는 볼륨이 IOPS 제한을 위반했다는 것을 표시하지 않습니다. 1,000 IOPS는 5초 동안만 발생했습니다. 1분 수집 기간의 나머지 55초 동안 볼륨은 유휴 상태로 유지됩니다. 즉 1분 전체에 걸친 VolumeReadOps+VolumeWriteOps 작업 수는 5000개(1000 * 5초)입니다. 이는 1분(5000/60초) 동안 평균 83.33 IOPS가 발생하는 것과 동일합니다. 이 평균은 보통 문제가 되지 않습니다.
이 경우 볼륨이 수집 기간의 나머지 기간 동안 유휴 상태이므로 동일한 샘플 시간에 VolumeIdleTime은 55초입니다. 즉, 해당 샘플 시간의 5초 동안에만 5,000개 작업(VolumeReadOps+VolumeWriteOps)이 발생한 것입니다. 평균 IOPS를 계산하기 위해 5,000을 5로 나누면 1,000 IOPS가 됩니다. 1,000 IOPS는 볼륨 한도입니다.
볼륨에서 마이크로버스트가 발생하는지 확인하려면 다음을 수행합니다.
- CloudWatch 지표를 사용하여 잠재적인 마이크로버스트를 식별합니다.
- CloudWatch를 사용하여 마이크로 버스팅 이벤트를 받으십시오.
- OS 수준 도구를 사용하여 마이크로버스트를 확인합니다.
- 애플리케이션에 맞게 볼륨 크기 또는 유형을 변경하여 마이크로버스트가 발생하지 않도록 합니다.
해결 방법
CloudWatch 지표를 사용하여 잠재적인 마이크로버스트를 식별
1. VolumeIdleTime 지표를 확인합니다. 이 지표는 지정된 기간 동안 읽기 또는 쓰기 작업이 제출되지 않은 총 시간(초)을 나타냅니다. VolumeIdleTime이 높으면 볼륨은 대부분의 수집 기간 동안 유휴 상태로 유지됩니다. 동일한 샘플 시간에 IOPS 또는 스루풋이 충분히 높은 경우 마이크로버스트가 발생했을 수 있습니다.
스루풋에 대한 VolumeIdleTime 지표에는 VolumeReadBytes 및 VolumeWriteBytes 지표가 있습니다.
2. 다음 공식을 사용하여 볼륨이 활성 상태일 때 도달하는 평균 스루풋을 계산합니다.
실제 평균 스루풋(바이트/초) = (합계(VolumeReadBytes) + 합계(VolumeWriteBytes) ) / (기간 - 합계(VolumeIdleTime))
IOPS에 대한 VolumeIdleTime 지표에는 VolumeReadOps 및 VolumeWriteOps 지표가 있습니다.
3. 다음 공식을 사용하여 볼륨이 활성 상태일 때 도달하는 평균 IOPS를 계산합니다.
실제 평균 IOPS(단위: Ops/초) = (합계(VolumeReadOps) + 합계(VolumeWriteOps))/(기간 - 합계(VolumeIdleTime))
CloudWatch를 사용하여 마이크로 버스팅 이벤트 가져오기
- CloudWatch 콘솔을 엽니다.
- 그런 다음 모든 지표를 선택합니다.
- 볼륨 ID를 사용하여 영향을 받는 볼륨을 검색합니다.
- 처리량 지표를 보려면 탐색을 선택한 다음 VolumeReadBytes, VolumeWriteBytes 및 VolumeIdleTime을 추가합니다.
- 그래프로 표시된 지표를 선택합니다.
- 통계계에 대해 합계를 선택하고 기간에 대해 1분을 선택합니다.
- 수학 추가에 빈 표현식으로 시작을 선택합니다.
- 세부 정보(표현식의) 실제 평균 스루풋(바이트/초 단위) 공식에 대한 그래프 ID를 입력합니다. 예를 들면 (m1+m2)/(60-m3)이 있습니다.
해당 공식으로 볼륨에 대한 최대 처리량보다 큰 값이 도출되는 경우 마이크로버스트가 발생했음을 의미합니다. IOPS 지표를 확인하려면 이전 단계를 따르고 4단계에서 VolumeReadOps, VolumeWriteOps 및 VolumeIdleTime을 추가합니다.
OS 수준 도구를 사용하여 마이크로버스트 확인
위의 공식은 마이크로버스트를 항상 실시간으로 식별하지는 않습니다. 이는 VolumeIdleTime이 낮은 경우에도 볼륨이 마이크로 버스트될 수 있기 때문입니다.
예: 볼륨이 볼륨 제한을 위반하는 수준으로 급증합니다. 그러면 볼륨이 나머지 수집 기간 동안 완전히 유휴 상태가 되지 않고 매우 낮은 수준의 활동으로 줄어듭니다. 마이크로버스트가 발생하더라도 VolumeIdleTime 지표는 낮은 활동을 반영하지 않습니다.
마이크로버스트를 확인하려면 CloudWatch보다 세분화된 OS 수준 도구를 사용하세요.
Linux
iostat 명령을 사용합니다. 자세한 내용은 Linux 매뉴얼 페이지의 iostat(1)을 참조하십시오.
1. 다음 명령을 실행하면 탑재된 모든 볼륨의 I/O 통계를 1초 단위로 보고합니다.
iostat -xdmzt 1
참고: iostat 도구는 sysstat 패키지의 일부입니다. iostat 명령을 찾을 수 없으면 다음 명령을 실행하여 Amazon Linux AMI에 sysstat를 설치합니다.
$ sudo yum install sysstat -y
2. 처리량 제한에 도달하는지 확인하려면 출력에서 rMB/초 및 wMB/초를 검토하세요. rMB/초 + wMB/초가 볼륨의 최대 처리량보다 크면 마이크로버스트가 발생하고 있는 것입니다.
IOPS 한계에 도달하는지 확인하려면 출력에서 r/초 및 w/초를 검토합니다. r/초 + w/초가 볼륨의 최대 IOPS보다 크면 마이크로 버스트가 발생하고 있는 것입니다.
Windows
Windows Performance Monitor에서 perfmon 명령을 실행합니다. 자세한 내용은 IOPS 및 스루풋 요구 사항 결정을 참조하십시오.
애플리케이션에 맞게 볼륨 크기 또는 유형을 변경하여 마이크로버스트 방지
필요한 IOPS 및 처리량을 수용할 수 있는 유형 및 크기로 볼륨을 변경합니다. 볼륨 유형 및 해당 IOPS 및 처리량 제한에 대한 자세한 내용은 Amazon EBS 볼륨 유형을 참조하세요. 인스턴스가 연결된 모든 EBS 볼륨으로 푸시할 수 있는 IOPS/처리량에는 제한이 있습니다.
워크로드에 대해 볼륨을 벤치마크하여 테스트 환경에서 워크로드를 안전하게 처리할 수 있는 볼륨 유형이 무엇인지 확인하는 것이 가장 좋습니다. 자세한 내용은 EBS 볼륨 벤치마크를 참조하세요.