ElastiCache for Redis에서 지연 시간이 길어지는 문제를 해결하려면 어떻게 해야 하나요?

5분 분량
0

Amazon ElastiCache for Redis에서 지연 시간이 길어지는 문제를 해결하고 싶습니다.

간략한 설명

ElastiCache for Redis에서 지연 시간이 길어지는 문제의 일반적인 원인은 다음과 같습니다.

  • 슬로우 커맨드
  • 높은 메모리 사용량으로 인한 스왑 활동 증가
  • 네트워크 문제
  • 클라이언트측 지연 문제
  • Redis 동기화
  • ElastiCache 클러스터 이벤트

해결 방법

지연 시간이 긴 문제는 다음과 같은 원인에 따라 해결하세요.

슬로우 커맨드

Redis는 단일 스레드입니다. 따라서 요청 처리 속도가 느리면 다른 클라이언트가 처리될 때까지 기다려야 합니다. 이러한 속도 저하로 인해 요청이 처리되는 총 시간이 늘어납니다. 여러 명령 클래스의 평균 지연 시간을 모니터링하려면 Amazon CloudWatch의 Redis용 지표를 사용합니다. 또한 일반적인 Redis 작업은 마이크로초 지연 시간으로 계산됩니다. CloudWatch 지표는 1분마다 샘플링되며 지연 시간 지표는 여러 명령의 집계로 표시됩니다. 지표 그래프에 나타나는 중요한 변경 없이 단일 명령으로 인해 시간 초과와 같은 예상치 못한 결과가 발생할 수 있습니다. 완료하는 데 시간이 오래 걸리는 명령 목록을 검색하려면 SLOWLOG GET을 사용합니다. 또한 redis-cli에서 slowlog get 128 명령을 실행합니다. 자세한 내용은 Redis 웹사이트의 SLOWLOG GET을 참조하세요. 또한 ElastiCache for Redis 캐시 클러스터에서 Redis Slow 로그를 활성화하려면 어떻게 해야 하나요?를 참조하세요.

EngineCPUUtilization 지표가 증가하면 ElastiCache for Redis의 자체 설계 클러스터에서 CPU 사용량 증가 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

다음은 복잡한 명령의 예입니다.

  • 대규모 데이터세트에 대한 프로덕션 환경에 있는 KEYS. KEYS는 전체 키스페이스를 스윕하고 지정된 패턴을 검색합니다. 자세한 내용은 Redis 웹사이트에서 KEYS를 참조하세요.
  • 실행하는 데 시간이 오래 걸리는 Lua 스크립트. 자세한 내용은 Redis 웹사이트에서 Lua를 사용한 스크립팅을 참조하세요.

높은 메모리 사용량으로 인한 스왑 활동 증가

Redis는 클러스터의 메모리 부하가 증가할 때 메모리 페이지를 교체합니다. 따라서 스왑 영역과 주고받는 메모리 페이지로 인해 지연 시간이 늘어나고 시간 초과가 발생할 수 있습니다. 다음은 CloudWatch 지표의 스왑 활동이 증가했음을 나타냅니다.

  • SwapUsage 증가
  • FreeableMemory 매우 낮음
  • 높은 BytesUsedForCacheDatabaseMemoryUsagePercentage 지표

늘어난 스왑 활동 문제를 해결하려면 다음 리소스를 참조하세요.

네트워크 문제

네트워크 문제로 인한 긴 지연 시간 문제를 해결하려면 다음 시나리오를 참조하세요.

클라이언트와 ElastiCache 클러스터 간의 네트워크 지원
클라이언트와 클러스터 노드 간의 네트워크 지연 시간을 분리하려면 VPC의 EC2 Linux 또는 Windows 인스턴스와 인터넷 게이트웨이를 통한 온프레미스 호스트 간의 네트워크 성능 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

클러스터가 네트워크 제한에 도달
ElastiCache 노드는 관련 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스와 동일한 네트워크 제한을 공유합니다. 예를 들어 cache.m6g.large의 노드 유형에는 m6g.large Amazon EC2 인스턴스와 동일한 네트워크 제한이 있습니다. ElastiCache 노드 네트워크 제한 문제 해결에 대한 자세한 내용은 네트워크 관련 제한을 참조하세요. 또한 Amazon EC2 인스턴스의 네트워크 성능을 모니터링하고 대역폭 용량, PPS(Packet-per-Second) 성능, 추적된 연결을 확인하는 것이 좋습니다.

TCP/SSL 핸드셰이크 지연 시간

클라이언트는 TCP 연결을 사용하여 Redis 클러스터에 연결합니다. TCP 연결을 생성하는 데 몇 밀리초가 걸릴 수 있습니다. 이러한 지연으로 인해 애플리케이션의 Redis 작업에 추가 오버헤드가 발생할 수 있습니다. 또한 ElastiCache 노드는 CPU에 추가적인 압력을 가합니다. 특히 클러스터에서 ElastiCache 전송 중 암호화(TLS) 기능을 사용하는 경우 새 연결의 볼륨을 제어해야 합니다. 열려 있는 연결(NewConnections) 및 닫힌 대량의 연결은 노드 성능에 영향을 줄 수 있습니다. 연결 수가 많은 경우 연결 풀링을 사용하여 설정된 TCP 연결을 풀에 캐시합니다. 연결 풀링을 구현하려면 Redis 클라이언트 라이브러리(지원되는 경우)를 사용하거나 연결 풀을 수동으로 빌드합니다. MSET/MGET 또는 Redis 파이프라인과 같은 집계 명령을 최적화 기법으로 사용할 수도 있습니다. 자세한 내용은 Redis 웹사이트에서 Redis 파이프라이닝을 참조하세요.

ElastiCache 노드에 많은 연결 존재

CurrConnectionsNewConnections CloudWatch 지표를 추적하는 것이 좋습니다. 이러한 메트릭은 Redis에서 허용하는 TCP 연결 수를 모니터링합니다. TCP 연결 수가 많으면 65,000개의 maxclients 제한이 소진될 수 있습니다. 이 제한은 노드당 가질 수 있는 최대 동시 연결입니다. 자세한 내용은 Redis 웹사이트에서 최대 동시 연결 클라이언트 수를 참조하세요. 65,000개 한도에 도달하면 ERR 최대 클라이언트 수 도달 오류가 나타납니다. Linux 서버 제한 또는 추적된 최대 연결 수를 초과하여 연결이 더 추가되면 연결 시간 초과가 발생합니다. 대량의 연결을 방지하는 방법에 대한 자세한 내용은 Redis 클라이언트 모범 사례를 참조하세요.

클라이언트측 지연 문제

클라이언트측 리소스로 인해 지연 문제가 발생하는지 확인하려면 클라이언트측의 메모리, CPU 및 네트워크 사용률을 확인합니다. 이러한 리소스가 한도에 근접하지 않았는지 확인합니다. 애플리케이션이 Amazon EC2 인스턴스에서 실행되는 경우 CloudWatch 지표를 사용하여 문제를 식별하세요. 또한 atop 또는 CloudWatch 에이전트와 같은 Amazon EC2 인스턴스 내의 모니터링 도구를 사용합니다.

애플리케이션에 설정된 제한 시간 구성 값이 너무 작으면 불필요한 제한 시간 오류가 발생할 수 있습니다. 이러한 오류를 해결하려면 서버에서 요청을 처리하고 응답을 생성할 수 있는 충분한 시간을 허용하도록 클라이언트측 제한 시간을 구성합니다. 자세한 내용은 Redis 클라이언트 모범 사례를 참조하세요. 또한 시간 초과 오류는 추가 정보를 보여줍니다. 시간 초과 오류 세부 정보를 검토하여 지연 시간의 원인을 파악해야 합니다. 다음 패턴을 확인하여 지연 시간이 클라이언트 측, ElastiCache 노드 또는 네트워크로 인해 발생하는지 확인합니다.

  • 시간 초과가 자주 발생하는지 또는 하루 중 특정 시간에 발생하는지 확인합니다.
  • 시간 초과가 특정 클라이언트에서 발생하는지 또는 여러 클라이언트에서 발생하는지 확인합니다.
  • 시간 초과가 특정 Redis 노드에서 발생하는지 또는 여러 노드에서 발생하는지 확인합니다.
  • 시간 초과가 특정 클러스터에서 발생하는지 또는 여러 클러스터에서 발생하는지 확인합니다.

Redis 동기화

Redis 동기화는 백업, 노드 교체, 확장 이벤트 시 시작됩니다. 이는 지연 시간을 유발할 수 있는 컴퓨팅 집약적인 워크로드입니다. 동기화가 진행 중인지 확인하려면 SaveInProgress CloudWatch 지표를 사용합니다. 자세한 내용은 동기화 및 백업 구현 방법을 참조하세요.

ElastiCache 클러스터 이벤트

지연 시간이 발생한 기간을 확인하려면 ElastiCache 콘솔이벤트 섹션을 참조하세요. ElastiCache 관리형 유지 관리 및 서비스 업데이트로 인해 발생할 수 있는 노드 교체 또는 장애 조치 이벤트와 같은 백그라운드 활동을 확인합니다. 또한 예기치 않은 하드웨어 장애가 있는지 확인합니다. 예정된 이벤트 알림은 AWS Health Dashboard 및 이메일을 통해 수신됩니다.

이벤트 로그 예시:

Finished recovery for cache nodes 0001Recovering cache nodes 0001
Failover from master node <cluster_node> to replica node <cluster_node> completed

관련 정보

Amazon CloudWatch를 사용하여 Amazon ElastiCache for Redis의 모범 사례 모니터링

추가 문제 해결 단계 https://kcs.support.aws.dev/article/elasticache-redis-correct-high-latency/2

AWS 공식
AWS 공식업데이트됨 9달 전