문제해결

이 페이지에서는 다양한 오류 시나리오, 해당 시나리오의 오류 메시지, 오류 해결을 위한 문제해결 단계를 설명합니다.

연결 오류 시나리오

인스턴스에 연결 문제가 발생하는 경우 이 섹션의 시나리오 중 하나가 문제의 원인인지 확인합니다.

그렇지 않은 경우 Redis 노드 중 하나로 텔넷을 실행하고 몇 가지 간단한 Redis 명령어를 실행하여 인스턴스가 응답하는지 여부를 확인합니다.

다른 리전 또는 다른 VPC 네트워크에 프로비저닝된 리소스로 인해 발생한 연결 오류

Compute Engine VM과 같은 Google Cloud 리소스에서 Memorystore 인스턴스에 연결하려면 동일한 리전과 동일한 VPC 네트워크에 리소스를 프로비저닝해야 합니다.

다른 리전 또는 VPC 네트워크의 리소스에서 Memorystore 인스턴스로 텔넷에 연결하려고 하면 다음 오류 메시지가 표시됩니다.

telnet: Unable to connect to remote host: Connection timed out

삭제된 VPC 네트워크 피어링으로 인해 발생한 연결 오류

Memorystore for Redis 인스턴스를 만들면 VPC 네트워크와 Google 내부 VPC 네트워크 간에 VPC 피어링이 생성됩니다.

네트워크 피어링에는 다음 형식이 사용됩니다.

redis-peer-############

이 네트워크 피어링이 삭제되면 Redis 인스턴스로 텔넷에 연결하려고 하면 다음 오류 메시지가 표시됩니다.

telnet: Unable to connect to remote host: Connection timed out

삭제된 네트워크 피어링을 다시 설정하는 가장 쉬운 방법은 Memorystore for Redis 인스턴스를 만드는 것입니다. 새 Redis 인스턴스를 만들면 삭제된 네트워크 피어링이 다시 설정되므로 삭제할 수 있으며 원래의 Redis 인스턴스에 필요한 네트워크 피어링이 있습니다.

방화벽 규칙이 인스턴스 IP 주소 차단

Redis 포트(6379) 또는 인스턴스의 IP 주소를 차단하는 이그레스 방화벽 규칙을 만드는 경우 연결 문제가 발생할 수 있습니다.

Redis 인스턴스의 IP 범위를 차단하는 네트워크 방화벽 규칙을 만들지 않아야 합니다.

높은 CPU 사용량 오류 시나리오

리소스를 많이 사용하는 Redis 명령어의 부적절한 사용으로 인한 Redis 인스턴스 응답 없음

Redis 인스턴스에 높은 지연 시간, 응답 없음 또는 연결 문제가 발생하는 경우 다음과 같이 리소스를 많이 사용하는 Redis 명령어를 잘못 사용했기 때문일 수 있습니다.

이 명령어를 실행하면 인스턴스에 과도한 CPU 부담이 발생할 수 있습니다. 오픈소스 Redis는 프로덕션 환경에서 KEYS를 실행하지 않도록 권장합니다. LRANGE를 사용하여 키스페이스의 전체 또는 대규모 하위 집합을 쿼리하면 높은 CPU 리소스가 필요할 수 있습니다. 복잡한 Lua 스크립트를 EVAL과 함께 사용하면 CPU 사용량이 증가할 수 있습니다.

인스턴스의 지연 시간이나 응답 속도가 느리면 클라이언트 측 로그를 확인하여 비용이 많이 드는 명령어가 실행되었는지 확인합니다. 그렇다면 시간을 기록해 두세요. 다음으로 Cloud Monitoring을 사용하여 redis.googleapis.com/stats/cpu_utilization 측정항목을 확인합니다. 높은 CPU 사용률이 발생한 기간이 비싼 명령어를 실행한 기간과 일치하는지 확인합니다.

프로덕션 환경에서는 KEYS 명령어를 사용하지 않는 것이 좋습니다. EVAL에는 덜 복잡한 Lua 스크립트를 사용하세요. LRANGE의 경우 단일 작업에서 쿼리되는 키 세트의 키 수를 줄이는 게 좋습니다.

네트워킹 오류 시나리오

할당된 IP 범위가 소진됨

Memorystore for Redis를 사용하려면 비공개 서비스 액세스 연결과 해당 연결에 연결된 IP 주소 범위를 사용해야 합니다. Redis 인스턴스 및 기타 Google Cloud 리소스를 사용하여 해당 범위에서 사용 가능한 IP 주소를 소진할 수 있습니다.

IP 주소가 소진된 경우 인스턴스를 만들면 다음 오류 메시지가 반환됩니다.

The IP ranges for the connection do not have enough available IPs. Allocate a new range or expand existing range and try again.

추가 IP 주소를 할당하여 이 문제를 해결할 수 있습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 IP 주소 범위 소진을 참조하세요.

네트워크에 비공개 서비스 액세스 연결이 설정되어 있지 않음

Redis 인스턴스가 비공개 서비스 액세스 연결 모드를 사용하고 네트워크에 비공개 서비스 액세스 연결이 없는 경우 다음 오류가 발생할 수 있습니다.

Google private service access is not enabled. Enable private service access and try again

이 문제를 해결하려면 비공개 서비스 액세스 연결을 설정합니다.

비공개 서비스 액세스를 위한 네트워크 피어링이 삭제됨

비공개 서비스 액세스 연결을 설정하면 프로젝트의 VPC 네트워크 피어링 페이지에 표시되는 servicenetworking-googleapis-com이라는 네트워크 피어링 연결이 생성됩니다.

네트워크 피어링을 삭제하면 기존 Redis 인스턴스에 대해 다음과 같은 오류가 발생합니다.

  • telnet: Unable to connect to remote host: Connection timed out

네트워크 피어링을 삭제하면 Redis 인스턴스를 만들 때 다음 오류가 발생합니다.

  • Private services access is not configured correctly. For steps on how to verify the connection, check the documentation.

이 문제를 해결하려면 비공개 서비스 액세스 연결 설정에서 gcloud 안내의 마지막 단계를 따르세요.

Redis 인스턴스 생성 중 네트워킹 플래그 충돌

--reserved-ip-range 매개변수와 --connect-mode=private-service-access 매개변수를 모두 사용하면 다음과 같은 오류가 발생합니다.

Reserved IP range is not supported for --connect-mode private services access

이 문제를 해결하려면 --reserved-ip-range--connect-mode=direct-peering과 함께 사용하거나 --connect-mode=PRIVATE_SERVICE_ACCESS를 사용하세요.

비공개 서비스 액세스 연결 모드에서는 --reserved-ip-range 매개변수가 지원되지 않으므로 둘 다 동시에 사용할 수 없습니다.

프로젝트의 서브네트워크 할당량 초과

프로젝트 내에서 만들 수 있는 서브네트워크의 수에 제한이 있습니다. 이 할당량을 초과하면 다음과 같은 오류 메시지가 표시됩니다.

Internal network quota exceeded. Please request higher limit here: https://forms.gle/ZfVduUGq2iSYcYGm8

이 문제를 해결하려면 오류 메시지에 있는 양식을 작성하거나 Google Cloud 지원팀에 문의하세요.

호스트 프로젝트에 서비스 프로젝트가 연결되지 않음

공유 VPC를 사용하는 경우 다음 오류가 발생하면 서비스 프로젝트가 호스트 프로젝트에 연결되지 않은 것입니다.

Invalid network name <network-name>. Project <project-name> referenced is not the host project for <service-project-name>.

이 문제를 해결하려면 호스트 프로젝트에 서비스 프로젝트를 연결합니다.

인스턴스 생성 중에 다이렉트 피어링 연결 모드 및 공유 VPC 네트워크를 사용할 수 없음

인스턴스의 호스트 프로젝트에서 공유 VPC 네트워크를 지정하는 동안 다이렉트 피어링 연결 모드로 서비스 프로젝트에 Redis 인스턴스를 만들 수 없습니다.

--connection-mode 값을 설정하지 않으면 연결 모드가 기본적으로 direct-peering으로 설정됩니다. 인스턴스를 만드는 동안 다이렉트 피어링 연결 모드를 사용하려고 시도하고 호스트 프로젝트에서 공유 VPC 네트워크를 --authorized-network 값으로 선택하면 다음과 같은 오류가 발생합니다.

Authorized_network must exist in the same project as redis instance

이 문제를 해결하려면 Redis 인스턴스 생성 명령어에 --connect-mode=PRIVATE_SERVICE_ACCESS를 지정하거나 Redis 인스턴스와 동일한 프로젝트에서 일반 VPC 네트워크를 선택해야 합니다.

지원되지 않는 Compute Engine IP 주소 범위

172.17.0.0/16 범위 내에 IP 주소가 있는 Compute Engine VM에서 Memorystore for Redis에 액세스할 수 없습니다.이 범위는 내부 구성요소용으로 예약되어 있기 때문입니다.

다른 GCP 리소스에서 Redis 인스턴스에 연결하는 중 오류 발생

서버리스 VPC 액세스 커넥터가 필요한 서버리스 환경에서 인스턴스에 연결하는 중 오류 발생

서버리스 VPC 액세스 커넥터가 필요한 서버리스 환경 중 하나를 사용하여 Redis 인스턴스에 연결할 수 없는 경우 환경을 위한 서버리스 VPC 액세스 커넥터를 설정하지 않았을 수 있습니다.

자세한 내용은 서버리스 VPC 액세스 커넥터 요구사항을 참조하세요.

Google Kubernetes Engine 클러스터를 사용하여 인스턴스에 연결할 때 오류 발생

클러스터에서 VPC 기반/IP 별칭을 사용 설정하지 않으면 GKE 클러스터에서 Memorystore for Redis 인스턴스에 연결할 수 없습니다. GKE 클러스터를 만드는 동안 VPC 기반/IP 별칭을 사용 설정하는 것이 가장 쉽습니다. 클러스터를 만들 때 고급 옵션에서 VPC 기반을 선택하세요. 자세한 내용은 VPC 기반 클러스터 만들기를 참조하세요.

Identity and Access Management(IAM) 오류 시나리오

서비스 계정의 삭제된 정책 바인딩 복원

Memorystore for Redis는 다음 서비스 계정을 사용하여 Redis 인스턴스를 관리합니다.

  • service-project-number@service-networking.iam.gserviceaccount.com
  • service-project-number@cloud-redis.iam.gserviceaccount.com

이러한 서비스 계정의 정책 바인딩을 삭제하면 새 인스턴스를 만들 수 없습니다.

이 시나리오에서 gcloud를 사용하여 Redis 인스턴스를 만들려고 하면 다음 오류 메시지가 표시될 수 있습니다.

(gcloud.redis.instances.create) FAILED_PRECONDITION: A required IAM policy might be missing. Please run this command:"gcloud projects add-iam-policy-binding <YOUR-PROJECT-ID> --member='serviceAccount:service-<YOUR-PROJECT-NUMBER>@cloud-redis.iam.gserviceaccount.com' --role='roles/redis.serviceAgent'" and try again. com.google.apps.framework.request.StatusException: <eye3 title='FAILED_PRECONDITION'/> generic::FAILED_PRECONDITION: A required IAM policy might be missing. Please run this command:"gcloud projects add-iam-policy-binding <YOUR-PROJECT-ID> --member='serviceAccount:service-<YOUR-PROJECT-NUMBER>@cloud-redis.iam.gserviceaccount.com' --role='roles/redis.serviceAgent'" and try again.

이러한 서비스 계정에 대한 정책 결합을 다시 설정하려면 다음 명령어 중 하나를 실행하고 variables을 적절한 값으로 바꿉니다. 삭제된 서비스 계정과 관련된 명령어를 실행합니다.

gcloud projects add-iam-policy-binding project-id --member='serviceAccount:service-project-number@service-networking.iam.gserviceaccount.com' --role='roles/servicenetworking.serviceAgent'
gcloud projects add-iam-policy-binding project-id --member='serviceAccount:service-project-number@cloud-redis.iam.gserviceaccount.com' --role='roles/redis.serviceAgent'

작업 제한 시간 오류

다음과 같은 오류 시나리오로 인해 응답하지 않는 Redis 인스턴스 또는 인스턴스/노드 작업 제한 시간 오류가 발생합니다.

네트워크 파티션 오류

Google Cloud 서버의 네트워크 파티션 오류로 인해 Google Cloud 리소스가 한 리전 내의 영역 간에 통신할 수 없는 경우가 있습니다. 이로 인해 인스턴스 연결이 끊어져 제한 시간 오류가 생길 수 있습니다.

Google Cloud가 인스턴스가 프로비저닝된 리전 또는 영역의 네트워크 파티션 오류를 해결하면 연결이 정상적으로 재개됩니다.

이 시나리오에서는 다음과 같은 연결 오류 메시지가 표시될 수 있습니다.

telnet: Unable to connect to remote host: Connection timed out

제한 시간 오류의 원인을 확인할 수 없는 경우 Google Cloud 지원팀에 문의하세요.

서비스 프로젝트와 호스트 프로젝트가 동일한 VPC 서비스 제어 경계에 없음

공유 VPCVPC 서비스 제어 경계를 사용 중이며 Redis 인스턴스 생성 작업이 시간 초과되면 서비스 프로젝트 및 호스트 프로젝트가 동일한 서비스 경계에 있지 않습니다. Redis 인스턴스가 공유 VPC 네트워크를 통해 연결 클라이언트와 통신하려면 서비스 프로젝트와 호스트 프로젝트가 동일한 경계에 있어야 합니다.

이 문제가 있는지 확인하려면 Redis 인스턴스의 감사 로그를 확인하여 다음 오류가 있는지 확인하세요.

violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

이 문제를 해결하려면 호스트 네트워크와 서비스 네트워크를 동일한 서비스 경계에 배치합니다.

가져오기 및 내보내기 문제해결

이 섹션에서는 Memorystore for Redis에 가져오기 및 내보내기를 사용할 때 발생할 수 있는 몇 가지 일반적인 문제를 설명합니다.

Cloud Console에서 가져오기 및 내보내기 버튼이 사용 중지됨

문제: 콘솔에 로그인한 사용자에게 RDB 파일을 가져오거나 내보내는 데 필요한 redis.instances.import 또는 redis.instances.export 권한이 없습니다.

해결책: 사용자에게 권한을 부여하고 인스턴스 세부정보 페이지를 새로고침합니다.

가져오기 작업이 완료되었지만 데이터가 복원되지 않았습니다.

가져오기 작업이 완료되었지만 데이터가 복원되지 않은 경우 먼저 Cloud Console 또는 명령줄에서 오류 메시지를 확인하고 오류 메시지에 설명된 문제를 해결합니다.

가져오기 프로세스 중에 오류가 발생하면 빈 RDB 파일을 사용하여 인스턴스가 복구됩니다. 동일한 RDB 파일을 다시 가져오거나 다른 RDB 파일을 사용하여 데이터를 복원할 수 있습니다.

RDB 파일이 너무 커서 가져오기에 실패했습니다.

"가져오기 RDB 파일 gs://bucket/object.rdb 크기가 최대 메모리 10GB 초과" 오류 메시지가 표시되면 인스턴스를 확장하고 가져오기를 다시 시도해야 합니다. 더 작은 RDB 파일을 인스턴스로 가져올 수도 있습니다.

gcloud 명령줄 도구 문제해결

gcloud 도구 명령어를 사용할 수 없거나 명령어가 문서화된 방식과 다르게 작동하는 경우 gcloud SDK를 업데이트해 보세요.

gcloud components update