[AWS] ElastiCache for Redis 이슈 사항

Jiyeon's TechNote·2022년 4월 12일
0
post-custom-banner

AWS의 ElastiCache for Redis를 사용하면서 발생하는 문제점과 해결 방안

  1. AWS ElastiCache for Redis란?
    AWS 에서 분산된 인 메모리 데이터 스토어 또는 캐시 환경을 손쉽게 설정, 관리 및 확장할 수 있는 웹 서비스입니다.

  2. 개용 및 기능

- 캐시 노드 실패에서 자동 감지 및 복구를 합니다.

- 복제를 지원하는 Redis 클러스터에 있는 읽기 전용 복제본으로 실패한 기본 클러스터를 조치하는 다중 AZ입니다.

- Redis(클러스터 모드 활성화됨)는 최대 500개 샤드로의 데이터 분할을 지원합니다.

- Redis 버전 3.2 이상에서는 모든 버전이 전송 중 데이터 암호화와 인증으로 저장된 데이터 암호화를 지원합니다. 이 지원을 통해 HIPAA 규정 준수 애플리케이션을 구축할 수 있습니다.

- 내결함성 향상을 위한 노드 및 클러스터의 유연한 가용 영역 배치.

- Amazon EC2, Amazon CloudWatch, AWS CloudTrail 및 Amazon SNS 같은 다른 AWS 서비스와의 통합. 이러한 통합을 통해 고성능과 높은 보안성을 갖춘 관리되는 인메모리 캐싱 솔루션을 제공합니다.

- ElastiCache for Redis는 백업, 소프트웨어 패치, 자동 장애 감지 및 복구를 관리합니다.

- 필요할 때 자동화된 백업을 수행하거나 고유한 백업 스냅샷을 수동으로 만들 수 있습니다. 이러한 백업을 사용하여 클러스터를 복원할 수 있습니다. ElastiCache for Redis 복원 프로세스는 안정적이고 효율적입니다.

- 기본 인스턴스 및 문제 발생 시 장애 조치를 수행할 수 있는 동기식 보조 인스턴스에서 가용성을 높일 수 있습니다. 읽기 전용 복제본을 사용하여 읽기 조정을 높일 수도 있습니다.

- AWS Identity and Access Management를 사용하여 사용자 및 권한을 정의하여 ElastiCache for Redis 클러스터에 대한 액세스를 제어할 수 있습니다. 클러스터를 Virtual Private Cloud(VPC)에 넣어 클러스터를 보호할 수도 있습니다.

- Redisdyd 글로벌 데이터 스토어 기능을 사용하면 AWS 리전 간에 빠르고 안정적이며 안전한 완전 관리형 복제를 수행할 수 있습니다. 이 기능을 사용하면 ElastiCache for Redis에 대한 리전 간 읽기 전용 복제본 클러스터를 생성하여 AWS 리전 간에 지연 시간이 짧은 읽기 및 재해 복구를 수행할 수 있습니다.

- 데이터 계층화는 데이터를 메모리에 저장하는 것 외에도 각 클러스터 노드에서 저렴한 SSD(solid state drives)를 활용하여 Redis 워크로드에 대한 가격 대비 성능 옵션을 제공합니다. 데이터 계층화는 전체 데이터 세트의 최대 20%까지 정기적으로 액세스하는 워크로드와 SSD에서 데이터에 액세스할 때 추가 지연 시간을 허용할 수 있는 애플리케이션에 이상적입니다. 자세한 내용은 섹션을 참조하세요데이터 계층화
  1. 최근 Redis를 사용하면서 발생한 문제
    클러스터모드가 활성화된 redis에 아래와 같이 접근해서 명령어 수행하면 간혹 readonly 오류가 발생하는 경우가 있음
redis-cli -h [구성엔드포인트] -c 

여러번 접근을 하면 어떨때는 정상적으로 명령어가 수행되고 어떨때는 오류가 발생하는 경우가 있음

(error) READONLY You can‘t write against a read only replica.

AWS 기술팀에 확인 해보면 접근 명령어(redis-cli -h [redis 구성 엔드포인트] -c)의 경우 클러스터의 모든 노드(레플리카 포함)에서 실행되어 레플리카 노드에서 ReadOnly 오류가 수신되는 것으로 확인되며, 명령어는 각 샤드의 마스터 노드에서만 실행해야 정상적인 동작이 가능한것을 확인

해결 방안으로는 cluster nodes 또는 cluster slots 명령어로 마스터노드의 정보를 획득&접근하여 개별적으로 명령어를 실행하는 것!!

profile
바쁘다 바빠 현대사회 엔지니어🙋‍♀️
post-custom-banner

0개의 댓글