이 페이지에서는 Redis용 Memorystore를 최적으로 사용하는 방법을 안내합니다. 이 페이지에서는 방지할 수 있는 잠재적 문제도 다룹니다.
문제 해결 시나리오의 목록은 문제 해결을 참조하세요.
RDB 내보내기
RDB 백업을 내보내는 경우 다음 안내를 따르세요.
- 낮은 쓰기 기간 동안 내보내기.
- 쓰기 속도가 높은 기간 동안 내보내는 경우
maxmemory
구성을 인스턴스 용량의 50%로 일시적으로 낮춰 성공적인 작업을 위한 충분한 오버헤드를 제공합니다.
리소스 집약적인 작업
표준 등급 Redis 인스턴스의 경우 다음 작업에서는 작업 기간 동안 추가 메모리를 사용합니다.
버전 업그레이드, 확장, 수동 장애 조치는 복제로 인해 추가 메모리(표준 등급 인스턴스의 경우)를 사용합니다. 이러한 작업은 표준 등급 인스턴스 업그레이드 동작에 설명된 복제 프로세스를 따릅니다.
가져오기 및 내보내기 작업에는 포크된 Redis 프로세스 및 이러한 작업과 연결된 copy-on-write 데이터 관리로 인해 추가 메모리가 필요합니다.
리소스 집약적인 작업의 단점을 완화하려면 다음을 수행해야 합니다.
- maxmemory 구성을 작업 기간 동안 인스턴스 용량의 80%로 줄입니다. 이는 성공적인 작업을 위한 충분한 오버 헤드를 제공합니다.
- 시스템 메모리 사용량 비율 측정항목을 모니터링하고 이러한 작업 중 하나를 실행하기 전에 이 측정항목이 80% 미만인지 확인합니다.
- 인스턴스 트래픽이 적은 기간(예: 야간 또는 주말 등)에 이러한 작업을 실행합니다.
- 이러한 작업을 실행하기 전에 지수 백오프를 사용하여 재시도 로직을 수행하세요.
연결 재시도가 필요한 작업 및 시나리오
다음 작업과 시나리오에서는 네트워크와 Redis 인스턴스 간의 네트워크 연결이 끊깁니다.
이러한 작업은 인스턴스를 수정하므로 일시적인 연결 중단이 필요합니다. 애플리케이션이 자동으로 다시 연결되고 계속 정상적으로 작동하려면 이러한 작업을 실행하기 전에 지수 백오프를 사용한 재시도 로직이 있어야 합니다.
정기 유지보수
Redis용 Memorystore 인스턴스는 주기적으로 유지보수를 수행합니다. 자세한 내용은 Memorystore for Redis 유지보수 정책을 참조하세요.
정기 유지보수에 대비할 수 있도록 다음 권장사항을 구현합니다.
- 유지보수 업데이트가 발생할 수 있는 유지보수 기간을 설정합니다.
- 인스턴스 트래픽이 적고 메모리 오버헤드가 충분한 때에 유지보수 기간을 예약합니다. 자세한 내용은 유지보수 업데이트 영향을 참조하세요.
- 유지보수 기간 알림을 사용 설정하여 예정된 유지보수에 대한 알림을 받습니다.
- 지수 백오프를 사용하여 재시도 로직
- 표준 등급 인스턴스의 경우 수동 장애 조치를 사용해 유지보수 이벤트를 시뮬레이션하여 유지보수로 인한 장애 조치가 애플리케이션에 미치는 영향을 확인할 수 있습니다.
- 기본 등급 인스턴스의 경우 인스턴스를 더 큰 크기로 임시 확장하여 유지보수 업데이트 영향을 시뮬레이션할 수 있습니다. 영향을 관찰한 후에 원래 크기로 다시 축소할 수 있습니다.
메모리 관리
오픈소스 Redis에서 발생하는 잘 알려진 메모리 조각화로 인해 메모리 관리가 어려울 수 있습니다. 메모리가 부족할 경우 오버헤드를 확보하기 위해 인스턴스의 maxmemory
구성을 낮추는 것이 좋습니다.
Memorystore 인스턴스에서 메모리 부족을 모니터링하는 가장 좋은 방법은 시스템 메모리 사용량 비율 측정항목을 사용하는 것입니다. Redis용 Memorystore의 메모리 관리 방법에 대한 자세한 내용은 메모리 관리 권장사항을 참조하세요.
유휴 연결 관리
시간이 경과함에 따라 연결이 올바르게 종료되지 않으면 Memorystore 인스턴스의 연결 수가 증가할 수 있습니다. 특히 용량 등급에 따라 최대 연결 한도를 적용하는 전송 중인 암호화를 사용하면 성능이 저하될 수 있습니다. 이 문제를 완화하려면 유휴 클라이언트 연결이 자동으로 종료되기 전까지의 시간(초)을 설정할 수 있는 timeout
Redis 구성 매개변수를 활용하는 것이 좋습니다.
액세스 투명성 리소스 이름
민감한 정보는 Redis용 Memorystore 리소스 이름에 저장하면 안 됩니다. 리소스 이름이란 Redis용 Memorystore 인스턴스 이름과 태그와 같은 인스턴스 메타데이터를 의미합니다. 리소스 이름에 저장된 데이터는 Google Cloud 액세스 투명성으로 보호되지 않을 수 있으며 조직의 액세스 투명성 규정 준수 요구사항과 충돌할 수 있습니다.
일부 서버리스 환경에 필요한 서버리스 VPC 액세스 커넥터
일부 서버리스 환경에서 Redis용 Memorystore에 연결하려면 서버리스 VPC 액세스 커넥터가 필요합니다. 이러한 환경 중 하나를 사용하여 연결하려면 프로젝트의 서버리스 VPC 액세스 커넥터를 설정합니다.
네트워킹
비공개 서비스 액세스 연결 모드를 사용하는 것이 좋습니다. Redis용 Memorystore는 비공개 서비스 액세스와 다이렉트 피어링이라는 두 가지 연결 모드를 사용합니다. 비공개 서비스 액세스 연결 모드를 사용하면 IP 범위 관리가 더 쉬워지고 원하는 경우 공유 VPC를 사용할 수 있습니다.
인스턴스를 만든 후에는 연결 모드를 변경할 수 없습니다.
자세한 내용은 네트워킹을 참조하세요.
모니터링 및 알림
모니터링 및 알림은 Redis 인스턴스의 메모리 사용량에 대한 주요 신호를 제공하므로 사용하는 것이 좋습니다. 또한 Redis 인스턴스가 수신 캐시 요청에 얼마나 효율적으로 응답하는지도 파악할 수 있습니다.
다음과 같은 기본 알림을 설정해야 합니다.
CPU 사용량 권장사항
리소스를 많이 사용하는 Redis 명령어를 부적절하게 사용하면 지연 시간이 길어지거나 응답이 없거나 연결 문제가 발생합니다. 표준 등급 인스턴스는 재해 복구 중에 고가용성을 제공하며 기본 노드와 복제본 노드 간의 비동기 복제를 사용합니다. 노드 중 하나에 Redis 기본 스레드를 차단하는 비용이 많이 드는 명령어 처리가 있는 경우 복제에 영향을 줄 수 있습니다. 문제가 지속되고 위치 서비스 중단이 발생하면 서비스 중단이 발생한 위치에 작성된 최신 데이터를 다른 위치에서 사용하지 못할 수 있습니다.
Cloud Monitoring을 사용하여 기본 스레드 CPU 초(redis.googleapis.com/stats/cpu_utilization_main_thread
) 측정항목에 대한 알림을 설정함으로써 CPU 사용률이 기본 노드의 경우 0.9초, 각 복제본 노드의 경우 0.5초를 초과하지 않도록 유의하는 것이 좋습니다.
Redis 인스턴스가 권장 값을 초과하는 경우 인스턴스를 더 높은 용량 등급으로 확장하거나 문제 해결 안내에 따라 CPU 집약적인 작업을 피하는 것이 좋습니다.