고가용성 및 복제본

이 페이지에서는 Redis용 Memorystore 클러스터 아키텍처가 고가용성 (HA)을 지원하고 제공하는 방법을 설명합니다. 이 페이지에서는 인스턴스 성능과 안정성을 개선하는 데 도움이 되는 권장 구성에 대해서도 설명합니다.

리전별 고려사항에 대한 자세한 내용은 지역 및 리전을 참조하세요.

고가용성

Memorystore for Redis Cluster는 클라이언트가 관리형 Memorystore for Redis Cluster VM에 직접 액세스하는 고가용성 아키텍처를 기반으로 합니다. 클라이언트는 Redis용 Memorystore 클러스터 인스턴스에 연결에 설명된 대로 개별 샤드 네트워크 주소에 연결하여 이를 수행합니다.

샤드에 직접 연결하면 다음과 같은 이점이 있습니다.

  • 직접 연결은 각 샤드가 독립적으로 실패하도록 설계되어 있으므로 단일 장애 지점을 방지합니다. 예를 들어 여러 클라이언트의 트래픽이 슬롯(키스페이스 청크)에 과부하를 일으키는 경우 샤드 오류는 해당 슬롯 제공을 담당하는 샤드로 영향을 제한합니다.

  • 직접 연결은 중간 홉을 방지하여 클라이언트와 Redis VM 간의 왕복 시간 (클라이언트 지연 시간)을 최소화합니다.

단일 영역 인스턴스와 달리 고가용성 멀티 영역 인스턴스를 만들면 안정성이 더 우수하므로 이를 만드는 것이 좋습니다. 하지만 복제본 없이 인스턴스를 프로비저닝하는 경우 단일 영역 인스턴스를 선택하는 것이 좋습니다. 자세한 내용은 인스턴스에서 복제본을 사용하지 않는 경우 단일 영역 인스턴스 선택을 참고하세요.

인스턴스의 고가용성을 사용 설정하려면 샤드당 복제본 노드를 1개 이상 프로비저닝해야 합니다. 인스턴스를 만들 때 이 작업을 실행하거나 복제본 수를 샤드당 복제본 1개 이상으로 확장할 수 있습니다. 복제본은 계획된 유지보수 및 예기치 않은 샤드 오류 발생 중에 자동 장애 조치를 제공합니다.

Redis 클라이언트 권장사항의 안내에 따라 클라이언트를 구성해야 합니다. 권장사항을 사용하면 OSS Redis 클라이언트가 다운타임 없이 클러스터의 역할 (자동 장애 조치)과 슬롯 할당 변경 (노드 교체, 소비자 수평 확장/축소)을 자동으로 원활하게 처리할 수 있습니다.

복제본

가용성이 높은 Memorystore for Redis 클러스터 인스턴스는 리전 리소스입니다. 즉, 샤드의 기본 VM과 복제본 VM이 영역 서비스 중단을 방지하기 위해 여러 영역에 분산됩니다. Redis용 Memorystore 클러스터는 노드당 복제본이 0개, 1개 또는 2개인 인스턴스를 지원합니다.

복제본을 사용하여 읽기를 확장하여 읽기 처리량을 늘릴 수 있습니다. 이렇게 하려면 READONLY 명령어를 사용하여 클라이언트가 복제본에서 읽을 수 있는 연결을 설정해야 합니다. 복제본에서 읽기에 관한 자세한 내용은 Redis 클러스터로 확장을 참고하세요.

노드당 복제본이 0개인 클러스터 형태

노드가 3개 영역에 균등하게 분할된 복제본이 없는 Redis용 Memorystore 클러스터 인스턴스

노드당 복제본이 1개인 클러스터 형태

노드당 복제본이 1개 있고 노드가 3개 영역에 균일하게 분산되는 Redis용 Memorystore 클러스터 인스턴스입니다.

노드당 복제본이 2개인 클러스터 형태

노드당 복제본이 2개 있고 노드가 3개 영역에 균일하게 분산되는 Redis용 Memorystore 클러스터 인스턴스입니다.

자동 장애 조치

샤드 내 자동 장애 조치는 유지보수 또는 기본 노드의 예기치 않은 장애로 인해 발생할 수 있습니다. 장애 조치 중에 복제본이 기본으로 승격됩니다. 복제본을 명시적으로 구성할 수 있습니다. 또한 다운타임을 방지하기 위해 이 서비스는 내부 유지보수 중에 추가 복제본을 임시로 프로비저닝할 수 있습니다.

자동 장애 조치를 통해 유지보수 업데이트 중에 데이터 손실을 방지할 수 있습니다. 유지보수 중 자동 장애 조치 동작에 대한 자세한 내용은 유지보수 중 자동 장애 조치 동작을 참고하세요.

장애 조치 및 노드 복구 기간

기본 노드 프로세스 비정상 종료 또는 하드웨어 장애와 같은 계획되지 않은 이벤트의 경우 자동 장애 조치에 수십 초가 걸릴 수 있습니다. 이 기간 동안 시스템은 장애를 감지하고 복제본을 새 기본 인스턴스로 선택합니다.

서비스가 실패한 노드를 교체하는 데 몇 분 정도 걸릴 수 있습니다. 이는 모든 기본 노드와 복제본 노드에 적용됩니다. 가용성이 높지 않은 인스턴스(복제본 프로비저닝되지 않음)의 경우 오류가 발생한 기본 노드를 복구하는 데 몇 분 정도 걸립니다.

계획되지 않은 장애 조치 중 클라이언트 동작

장애 특성에 따라 클라이언트 연결이 재설정될 수 있습니다. 자동 복구 후에는 기본 및 복제본 노드의 과부하가 발생하지 않도록 지수 백오프로 연결을 재시도해야 합니다.

읽기 처리량을 위해 복제본을 사용하는 클라이언트는 실패한 노드가 자동으로 교체될 때까지 용량이 일시적으로 저하될 수 있음을 고려해야 합니다.

손실된 쓰기

예기치 않은 오류로 인한 장애 조치 중에 Redis 복제 프로토콜의 비동기적 특성으로 인해 확인된 쓰기가 손실될 수 있습니다.

클라이언트 애플리케이션은 Redis WAIT 명령어를 활용하여 실제 데이터 안전성을 개선할 수 있습니다. Redis WAIT 명령어 문서에 설명된 대로 절충안이 있는 최선의 노력 접근 방식입니다.

단일 영역 서비스 중단의 키스페이스 영향

이 섹션에서는 단일 영역 중단이 Memorystore for Redis Cluster 인스턴스에 미치는 영향을 설명합니다.

멀티 영역 인스턴스

  • HA 인스턴스: 영역에 서비스 중단이 발생하면 전체 키 스페이스를 읽고 쓸 수 있지만 일부 읽기 복제본을 사용할 수 없으므로 읽기 용량이 줄어듭니다. 단일 영역 서비스 중단이 드물게 발생하는 경우 인스턴스에 충분한 읽기 용량이 있도록 클러스터 용량을 오버프로비저닝하는 것이 좋습니다. 서비스 중단이 끝나면 영향을 받은 영역의 복제본이 복원되고 클러스터의 읽기 용량이 구성된 값으로 돌아갑니다. 자세한 내용은 확장 가능하고 안정적인 앱 패턴을 참고하세요.

  • HA가 아닌 인스턴스 (복제본 없음): 영역에 서비스 중단이 발생하면 영향을 받는 영역에 프로비저닝된 키스페이스 부분이 데이터 플러시를 거치며 서비스 중단 기간 동안 쓰기 또는 읽기를 사용할 수 없습니다. 장애가 끝나면 영향을 받은 영역의 기본 항목이 복원되고 클러스터의 용량이 구성된 값으로 돌아갑니다.

단일 영역 인스턴스

  • HA 및 비 HA 인스턴스: 인스턴스가 프로비저닝된 영역에 서비스 중단이 발생하면 클러스터를 사용할 수 없게 되고 데이터가 플러시됩니다. 다른 영역에 서비스 중단이 발생하면 클러스터는 읽기 및 쓰기 요청을 계속 처리합니다. 서비스 중단이 끝나면 클러스터의 구성된 용량이 복원됩니다.

권장사항

이 섹션에서는 고가용성 및 복제본에 관한 권장사항을 설명합니다.

복제본 추가

복제본을 추가하려면 RDB 스냅샷이 필요합니다. RDB 스냅샷은 프로세스 포크 및 'copy-on-write' 메커니즘을 사용하여 노드 데이터 스냅샷을 작성합니다. 노드에 대한 쓰기 패턴에 따라 쓰기의 영향을 받는 페이지가 복사될 때 노드의 사용된 메모리가 증가합니다. 메모리 공간이 노드에 있는 데이터 크기의 두 배로 증가할 수 있습니다.

스냅샷을 완료하는 데 충분한 메모리가 노드에 포함되도록 하려면 maxmemory를 노드 용량의 80% 로 유지하거나 설정하여 20% 가 오버헤드를 위해 예약되도록 해야 합니다. 스냅샷 모니터링 외에도 이러한 메모리 오버헤드는 스냅샷 성공을 위해 워크로드를 관리하는 데 도움이 됩니다. 또한 복제본을 추가할 때는 쓰기 트래픽을 최대한 낮추세요. 자세한 내용은 쓰기 부하가 높은 클러스터 모니터링을 참고하세요.