Amazon EBS 볼륨이 마이크로 버스팅 상태인지 식별하여 이러한 상황이 발생하지 않도록 하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Elastic Block Store(Amazon EBS) 볼륨이 Amazon CloudWatch의 처리량 또는 IOPS 한도를 위반하지 않습니다. 그러나 볼륨이 제한된 것으로 보이고 대기 시간과 대기열의 길이가 길어졌습니다.

간략한 설명

CloudWatch는 1분마다 샘플을 수집하여 모든 Amazon EBS 볼륨 유형의 IOPS(op/s) 및 처리량(바이트/초)을 모니터링합니다.

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

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

수집 기간이 60초이므로 CloudWatch는 볼륨이 IOPS 한도를 위반했다고 표시하지 않습니다. 5초 만에 1,000IOPS가 발생했습니다. 1분의 수집 기간 중 나머지 55초 동안은 볼륨이 유휴 상태로 유지됩니다. 즉, 1분 동안 VolumeReadOps+VolumeWriteOps의 수가 5,000회(1,000*5초)입니다. 이는 1분(5,000/60초) 동안 평균 83.33IOPS에 해당합니다. 이 평균은 보통 문제가 되지 않습니다.
이 경우 볼륨이 나머지 수집 기간 동안 유휴 상태가 되므로 동일한 샘플 시간의 VolumeIdleTime은 55초입니다. 즉, 해당 샘플 시간에 5,000개의 작업(VolumeReadOps+VolumeWriteOps)이 단 5초에 걸쳐 발생합니다. 5,000을 5로 나눠 평균 IOPS를 계산하면 1,000IOPS가 됩니다. 1,000IOPS가 볼륨 제한입니다.

볼륨에서 마이크로 버스트가 발생하는지 판단하려면 다음을 수행하세요.

  1. CloudWatch 지표를 사용하여 발생 가능한 마이크로 버스트를 식별합니다.
  2. CloudWatch를 사용하여 마이크로 버스트 이벤트를 가져옵니다.
  3. OS 수준 도구를 사용하여 마이크로 버스트를 확인합니다.
  4. 애플리케이션에 맞게 볼륨 크기 또는 유형을 변경하여 마이크로 버스트를 방지합니다.

해결 방법

CloudWatch 지표를 사용하여 발생 가능한 마이크로 버스트를 식별하세요.

  1. VolumeIdleTime 시간 지표를 확인하면 됩니다. 이 지표는 지정된 기간 동안 읽기 또는 쓰기 작업이 제출되지 않은 총시간(초)을 나타냅니다. VolumeIdleTime이 높으면 대부분의 수집 기간 동안 볼륨이 유휴 상태로 남아 있었던 것입니다. 동일한 샘플 시간에 IOPS 또는 처리량이 충분히 높으면 마이크로 버스트가 발생할 가능성이 있는 것입니다.
    처리량에 대한 VolumeIdleTime 지표 외에도 VolumeReadBytesVolumeWriteBytes 지표가 있습니다.
  2. 다음 공식을 사용하면 볼륨이 활성 상태일 때 도달한 평균 처리량을 계산할 수 있습니다.
    예상 평균 처리량(바이트/초) = (합계(VolumeReadBytes) + 합계(VolumeWriteBytes))/(기간 - 합계(VolumeIdleTime))
    IOPS에 대한 VolumeIdleTime 지표 외에도 VolumeReadOpsVolumeWriteOps 지표가 있습니다.
  3. 다음 공식을 사용하면 볼륨이 활성 상태일 때 도달한 평균 IOPS를 계산할 수 있습니다.
    예상 평균 IOPS(Ops/초) = (합계(VolumeReadOps) + 합계(VolumeWriteOps))/(기간 - 합계(VolumeIdleTime))

CloudWatch를 사용하여 마이크로 버스트 이벤트를 가져올 수 있습니다.

  1. CloudWatch 콘솔을 엽니다.
  2. 모든 지표를 선택합니다.
  3. 볼륨 ID를 사용하여 영향을 받는 볼륨을 검색합니다.
  4. 처리량 지표를 보려면 찾아보기를 선택한 다음 VolumeReadBytes, VolumeWriteBytesVolumeIdleTime을 추가합니다.
  5. 그래프로 표시된 지표를 선택합니다.
  6. 통계에서 합계를 선택하고 기간에서 1분을 선택합니다.
  7. 수학 추가에서 빈 표현식으로 시작을 선택합니다.
  8. 표현식세부 정보에서 예상 평균 처리량(바이트/초) 공식의 그래프 ID를 입력합니다. 예를 들어 (m1+m2)/(60-m3)과 같이 입력할 수 있습니다.

공식에서 해당 볼륨의 최대 처리량보다 큰 값이 계산된다면 마이크로 버스트가 발생한 것입니다. IOPS 지표를 확인하려면 이전 단계를 따른 다음 4단계에서 VolumeReadOps, VolumeWriteOpsVolumeIdleTime을 추가합니다.

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/swMB/s를 검토하여 처리량 한도에 도달했는지 판단합니다. rMB/s + wMB/s가 볼륨의 최대 처리량보다 큰 경우 마이크로 버스트가 발생한 것입니다.

출력의 r/sw/s를 검토하여 IOPS 한도에 도달했는지 판단합니다. r/s + w/s가 볼륨의 최대 IOPS보다 큰 경우 마이크로 버스트가 발생한 것입니다.

Windows

Windows 성능 모니터에서 perfmon 명령을 실행합니다. 자세한 내용을 알아보려면 IOPS 및 스루풋 요구 사항 결정을 참조하세요.

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

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

모범 사례는 워크로드에 대해 볼륨을 벤치마킹하여 테스트 환경에서 워크로드를 안전하게 수용할 수 있는 볼륨 유형을 검증하는 것입니다. 자세한 내용을 알아보려면 EBS 볼륨 벤치마크를 참고하세요.

AWS 공식
AWS 공식업데이트됨 일 년 전