문제해결

이 페이지에서는 다양한 오류 시나리오를 설명하고 오류 해결을 위한 안내를 제공합니다.

복제 시나리오

이 섹션에서는 클러스터에서 발생할 수 있는 복제 문제를 설명합니다.

복제 지연을 어떻게 모니터링하나요?

Memorystore for Redis Cluster에는 /cluster/replication/maximum_offset_diff 측정항목이 있습니다. 이 측정항목은 기본 클러스터의 노드에 대한 최대 복제 오프셋 차이 (바이트)를 모니터링합니다.

복제 오프셋 차이를 낮게 유지하면 복제본이 전체 동기화 작업보다 더 낮은 비용으로 증분 동기화 작업을 더 자주 실행할 수 있습니다.

maximum_offset_diff 측정항목의 기준점을 설정하는 것이 좋습니다. 기준점을 초과하면 Memorystore for Redis Cluster에서 알림을 통해 알려줄 수 있습니다.

클러스터의 노드 유형 에 따라 다음과 같이 기준점을 설정하는 것이 좋습니다.

  • 노드 유형이 redis-shared-core-nano, redis-standard-small, redis-highmem-medium, redis-highcpu-medium 또는 redis-standard-large인 경우 기준점을 64MB 미만으로 설정합니다.

  • 노드 유형이 redis-highmem-xlarge 또는 redis-highmem-2xlarge인 경우 기준점을 1GB 미만으로 설정합니다.

연결 오류 시나리오

이 섹션에서는 클러스터에서 발생할 수 있는 연결 문제를 설명합니다.

방화벽 규칙으로 인한 연결 오류

방화벽 규칙은 Memorystore for Redis Cluster에서 사용하는 포트를 차단하여 연결 오류를 일으킬 수 있습니다. 클러스터의 Private Service Connect 엔드포인트 모두에 대해 TCP 포트 11000~13047을 허용합니다. 이러한 엔드포인트에 대한 자세한 내용은 예약된 네트워크 주소를 참조하세요.

조직 정책으로 인한 연결 오류

클러스터에 대한 Private Service Connect 연결을 차단하는 조직 정책이 있을 수 있습니다.

조직 정책에서 .restrictPrivateServiceConnectProducer 정책을 사용하는 경우 Memorystore for Redis Cluster 전용 폴더인 961333125034 폴더를 허용합니다. 예를 들면 다음과 같습니다.

name: organizations/Consumer-org-1/policies/compute.restrictPrivateServiceConnectProducer
spec:
    rules:
      - values:
          allowedValues:
          - under:folders/961333125034

조직 정책에서 .disablePrivateServiceConnectCreationForConsumers 정책을 사용하는 경우 SERVICE_PRODUCERS를 허용합니다. 예를 들면 다음과 같습니다.

name: organizations/Consumer-org-1/policies/compute.disablePrivateServiceConnectCreationForConsumers
spec:
    rules:
      - values:
          allowedValues:
          - SERVICE_PRODUCERS

응답하지 않는 연결로 인한 연결 오류

Memorystore for Redis Cluster에 대한 응답하지 않는 연결을 감지하도록 클라이언트 애플리케이션을 구성하는 것이 좋습니다. 응답하지 않는 연결이 감지되면 클라이언트가 연결을 재설정해야 합니다. 복원력이 우수한 애플리케이션을 빌드하려면 다음 클라이언트 구성을 사용하는 것이 좋습니다.

  • TCP 연결 유지 매개변수 구성: 연결이 유휴 상태일 때도 클라이언트가 응답하지 않는 연결을 사전에 감지하고 삭제하도록 TCP keepalive time, TCP keepalive interval, 및 TCP keepalive probes 매개변수를 설정합니다. 예를 들어 TCP keepalive time 매개변수를 30초, TCP keepalive interval을 10초, TCP keepalive probes를 3으로 설정하면 클라이언트가 1분 이내에 응답하지 않는 유휴 연결을 재설정합니다.
  • TCP 사용자 제한 시간 구성: 클라이언트에서 이 제한 시간을 설정하여 미해결 요청이 있고 응답을 중지한 연결을 재설정합니다. 예를 들어 제한 시간을 15초로 설정하면 클라이언트가 15초 후에 미해결 요청이 있는 응답하지 않는 연결을 재설정합니다.

CPU 사용량 시나리오

이 섹션에서는 클러스터에서 발생할 수 있는 CPU 사용량 문제를 설명합니다.

클러스터의 출력 버퍼 공간 부족

클러스터의 출력 버퍼 공간이 부족하면 다음을 수행합니다.

  • maxmemory 매개변수의 값을 더 작게 설정합니다.
  • allkeys-lru maxmemory 정책을 사용합니다.

클러스터의 메모리가 가득 차고 새 쓰기가 들어오면 Memorystore for Redis Cluster는 클러스터의 maxmemory 정책에 따라 키를 삭제하여 쓰기를 위한 공간을 확보합니다. allkeys-lru 정책은 전체 키 세트에서 가장 최근에 사용한 (LRU) 키를 삭제합니다.

클러스터의 maxmemory 및 사용된 메모리를 모니터링하는 것이 좋습니다. 이렇게 하면 클러스터가 프로비저닝된 클러스터 용량에 도달하는지 알 수 있습니다. 또한 maxmemory 매개변수의 값을 줄이면 오버헤드를 위한 공간이 늘어납니다.

클러스터의 외부 측정항목이 누락되는 이유는 무엇인가요?

클러스터의 CPU 사용률이 높거나 클러스터의 리소스가 소진된 경우 (예: 연결이 너무 많음) 클러스터가 잘못 작동하고 외부 측정항목이 누락될 수 있습니다.

클러스터 지연 시간의 소스 격리

발생하는 지연 시간이 클러스터에서 발생하는지 아니면 클라이언트 애플리케이션 및 네트워크 환경에서 발생하는지 확인하려면 redis-cli 도구를 사용하여 연속 지연 시간 테스트를 실행하면 됩니다.

클러스터 지연 시간의 소스를 격리하려면 다음을 수행합니다.

  1. 클러스터와 동일한 리전 및 VPC 네트워크에 있는 Compute Engine VM에 연결합니다.

  2. 아직 설치되지 않은 경우 VM에 redis-cli 도구를 설치합니다.

    • Debian 또는 Ubuntu 기반 VM의 경우 다음 명령어를 실행합니다.

      sudo apt-get install redis-tools
      
    • RHEL 또는 CentOS 기반 VM의 경우 다음 명령어를 실행합니다.

      sudo yum install redis
      
  3. 클러스터의 지연 시간을 밀리초 단위로 측정하려면 다음 명령어를 실행합니다.

    redis-cli --latency -h DISCOVERY_ENDPOINT_ADDRESS -p PORT
    

    클러스터에서 전송 중인 데이터 암호화를 사용하는 경우 연결하려면 --tls 플래그를 추가하고 인증 기관 (CA)을 지정해야 합니다.

    다음을 바꿉니다.

    • DISCOVERY_ENDPOINT_ADDRESS: 클러스터의 검색 엔드포인트 IP 주소입니다.
    • PORT: 클러스터의 검색 엔드포인트에 예약된 포트 번호입니다. 일반적으로 이 포트 번호는 6379입니다.
  4. 명령어가 몇 분 동안 실행되도록 합니다. 이 도구는 서버를 지속적으로 ping하고 최소, 최대, 평균 지연 시간 값을 계산합니다.

  5. 결과를 볼 수 있도록 명령어가 실행되지 않도록 하려면 Ctrl+C를 누릅니다.

명령어가 일관되게 낮은 평균 지연 시간 (일반적으로 1밀리초 이하)을 출력하면 클러스터가 정상이고 빠르게 응답하는 것입니다.

명령어에 일반적인 서버 성능이 표시되지만 클라이언트 애플리케이션에 여전히 지연이 발생하는 경우 다음 문제로 인해 지연 시간이 발생할 수 있습니다.

  • 네트워크: 클라이언트와 클러스터 간에 서로 다른 리전 또는 영역을 통해 라우팅되는 트래픽으로 인해 상당한 네트워크 지연이 발생할 수 있습니다.
  • 클라이언트: 클라이언트의 높은 CPU 또는 메모리 사용률, 소진된 연결 풀 또는 애플리케이션 로직 병목 현상으로 인해 클라이언트가 경험하는 총 왕복 시간 이 늘어날 수 있습니다.

지속성 시나리오

이 섹션에서는 클러스터에서 발생할 수 있는 지속성 문제를 설명합니다.

쓰기 트래픽이 AOF 재작성을 통해 공간을 압축하고 회수하는 Memorystore for Redis Cluster의 기능을 초과함

이 상황이 발생하면 추가 전용 파일 (AOF)이 재작성 프로세스에서 관리할 수 있는 것보다 빠르게 증가합니다. 이로 인해 디스크가 소진되고 쓰기 실패가 발생하며 복제본 생성 및 전체 동기화가 필요한 작업이 차단됩니다.

Memorystore for Redis Cluster는 쓰기 처리량을 규제하기 위해 가드레일을 구현했습니다. 이렇게 하면 AOF 재작성이 지속적인 고쓰기 워크로드를 따라갈 수 있습니다.