EBS 볼륨이 마이크로버스트 중인지 어떻게 확인할 수 있으며 이 문제를 방지하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2020년 12월 17일

Amazon Elastic Block Store(Amazon EBS) 볼륨이 Amazon CloudWatch의 처리량(바이트/초) 또는 IOPS(ops/초) 제한을 위반하지 않는데도 제한 상태로 나타나며 지연 시간 및 대기가 길어졌습니다. 마이크로버스트로 인해 이런 문제가 발생하는지 어떻게 확인할 수 있으며 이를 어떻게 방지할 수 있나요?

간략한 설명

CloudWatch는 5분마다 대부분의 볼륨에 대해 샘플을 수집하여 EBS 볼륨의 IOPS(op/초) 및 처리량(바이트/초)을 모니터링합니다. IO1 및 IO2 볼륨은 1분마다 샘플을 수집하는 세부 모니터링을 지원합니다.

마이크로버스트는 EBS 볼륨이 수집 기간보다 훨씬 짧은 기간 동안 높은 IOPS 또는 처리량을 “버스트”할 때 발생합니다. 수집 기간보다 짧은 시간 동안 볼륨이 높은 IOPS 또는 처리량을 버스트하므로 CloudWatch는 버스트를 반영하지 않습니다.

예: 950 IOPS로 프로비저닝된 IO1 볼륨(1분의 수집 기간)에 5초 동안 1000 IOPS를 푸시하는 애플리케이션이 있습니다. Amazon EBS는 볼륨의 IOPS 한도에 도달하면 애플리케이션을 제한합니다. 이때 볼륨이 워크로드를 처리할 수 없으므로 대기열과 지연 시간이 길어집니다.

수집 기간이 60초이기 때문에 CloudWatch는 볼륨이 IOPS 제한을 위반했다는 것을 표시하지 않습니다. 1000 IOPS는 5초 동안만 발생했습니다. 1분 수집 기간의 나머지 55초 동안 볼륨은 유휴 상태로 유지되었습니다. 따라서 1분 전체에 걸친 VolumeReadOps+VolumeWriteOps 작업 수는 5000개(1000 * 5초)입니다. 이는 1분 동안 평균 83.33 IOPS(5000/60초)와 같으며 일반적으로 문제가 되지 않습니다.

이 경우 볼륨이 수집 기간의 나머지 기간 동안 유휴 상태이므로 동일한 샘플 시간에 VolumeIdleTime은 55초입니다. 즉, 해당 샘플 시간에 5초 동안에만 5000개 작업(VolumeReadOps+VolumeWriteOps)이 발생한 것입니다. 5000을 5로 나누어 평균 IOPS를 계산합니다. 이는 볼륨에 대한 제한인 1000 IOPS와 같습니다.

볼륨에서 마이크로버스트가 발생하는지 확인하려면 다음을 수행합니다.

  1. CloudWatch 지표를 사용하여 잠재적인 마이크로버스트를 식별합니다.
  2. iostat와 같은 OS 수준 도구를 사용하여 마이크로버스트를 확인합니다.
  3. 애플리케이션에 맞게 볼륨 크기 또는 유형을 변경하여 마이크로버스트가 발생하지 않도록 합니다.

해결 방법

CloudWatch를 사용하여 잠재적인 마이크로버스트 식별

IOPS(op/초)를 사용하여 마이크로버스트를 식별하려면 CloudWatch에서 다음을 수행합니다.

1.    VolumeIdleTime 지표를 확인합니다.

VolumeIdleTime이 높으면 볼륨은 대부분의 수집 기간 동안 유휴 상태로 유지됩니다. 동일한 샘플 시간에 IOPS가 충분히 높은 경우 마이크로버스트가 발생했을 수 있습니다.

2.    평균 IOPS를 계산합니다.

VolumeReadOpsVolumeWriteOps는 수집 기간 내에 수행된 I/O 작업 수만 표시합니다. 볼륨이 활성 상태일 때 도달한 평균 IOPS를 계산하려면 다음 수식에 표시된 것처럼 합계(VolumeReadOps)+합계(VolumeWriteOps)를 볼륨의 활성 시간으로 나눕니다.

실제 평균 IOPS(단위: Ops/초) = (합계(VolumeReadOps) + 합계(VolumeWriteOps))/(기간 - 합계(VolumeIdleTime))

참고: 위의 공식에 사용된 기간은 CloudWatch에서 지정된 시간에 샘플을 사용합니다. CloudWatch 그래프의 지정된 기간은 볼륨의 수집 기간과 같습니다.

해당 공식으로 볼륨에서 지원하는 최대 IOPS보다 큰 값이 도출되는 경우 마이크로버스트가 발생했음을 의미합니다.

처리량(바이트/초)을 사용하여 마이크로버스트를 식별하려면 CloudWatch에서 다음을 수행합니다.

1.    VolumeIdleTime 지표를 확인합니다.

2.    다음 공식을 사용하여 평균 처리량을 계산합니다.

실제 평균 처리량(바이트/초) = (합계(VolumeReadBytes) + 합계(VolumeWriteBytes) )/(기간 - 합계(VolumeIdleTime))

참고: 위의 공식에 사용된 기간은 CloudWatch에서 지정된 시간에 샘플을 사용합니다. CloudWatch 그래프의 지정된 기간은 볼륨의 수집 기간과 같습니다.

해당 공식으로 볼륨에서 지원하는 최대 처리량보다 큰 값이 도출되는 경우 마이크로버스트가 발생했음을 의미합니다.

iostat와 같은 OS 수준 도구를 사용하여 마이크로버스트 확인

위의 공식은 마이크로버스트를 항상 실시간으로 식별하지는 않습니다. 이는 VolumeIdleTime이 낮은 경우에도 볼륨이 마이크로 버스트될 수 있기 때문입니다.

예: 볼륨이 볼륨 제한을 위반하는 수준으로 급증합니다. 그러면 볼륨이 나머지 수집 기간 동안 완전히 유휴 상태가 되지 않고 매우 낮은 수준의 활동으로 줄어듭니다. 마이크로버스트가 발생하더라도 VolumeIdleTime 지표는 낮은 활동을 반영하지 않습니다.

마이크로버스트를 확인하려면 iostat과 같이 CloudWatch보다 세분화된 OS 수준 도구를 사용하세요. iostat에 대한 자세한 내용은 Linux 매뉴얼 페이지의 iostat (1)을 참조하세요.

1.    iostat를 사용해 다음 명령을 실행하면 탑재된 모든 볼륨의 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보다 크면 마이크로 버스트가 발생하고 있는 것입니다.

애플리케이션에 맞게 볼륨 크기 또는 유형을 변경하여 마이크로버스트 방지

필요한 IOPS 및 처리량을 수용할 수 있는 유형/크기로 볼륨을 변경합니다. 볼륨 유형 및 해당 IOPS/처리량 제한에 대한 자세한 내용은 Amazon EBS 볼륨 유형을 참조하세요. 인스턴스가 연결된 모든 EBS 볼륨으로 푸시할 수 있는 IOPS/처리량에는 제한이 있습니다.

워크로드에 대해 볼륨을 벤치마크하여 테스트 환경에서 워크로드를 안전하게 처리할 수 있는 볼륨 유형이 무엇인지 확인하는 것이 가장 좋습니다. 자세한 내용은 EBS 볼륨 벤치마크를 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?