ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS] ElastiCache로 Redis 클러스터 모드 생성 및 적용해보기
    AWS 2024. 8. 17. 09:39

     

    AWS ElastiCache

    Amazon Web Services(AWS)에서 제공하는 완전 관리형 인메모리 데이터베이스 서비스입니다.

    고속 데이터 캐싱을 통해 애플리케이션의 성능을 향상시키고, Redis와 Memached 두 가지 엔진을 지원하고 있습니다.

     

     

    적용하기 전에

    ElastiCache For Redis에서 클러스터를 구성할 때 아래와 같은 세가지 옵션이 존재합니다.

    • 싱글 클러스터 노드 (단일 노드)
    • 클러스터 모드 없이 Replication만 지원 (클러스터 모드 비활성화)
    • 클러스터 모드와 Replication 모두 지원 (클러스터 모드 활성화)

     

    https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/CacheNodes.NodeGroups.html

     

    위 사진에서 왼쪽이 클러스터 모드 비활성화된 옵션의 모습이고, 오른쪽이 클러스터 모드 활성화된 옵션의 모습입니다.

    클러스터 모드 비활성화(왼쪽)는 하나의 primary와 다섯 개의 복제본 노드가 있는 단일 샤드로 존재합니다.

    반면, 클러스터 모드 활성화(오른쪽)는 클러스터 모드 비활성화와 비슷한 구성으로 이루어져있는 샤드가 최대 500개가 존재할 수 있습니다.

     

    그러나 최대 500개까지 샤드를 나눌 수 있는 대신, 아래와 같은 제한되는 부분이 존재한다고 합니다.

    • 샤드가 500개인 경우, 복제본 노드는 하나도 생성할 수 없음
    • 샤드가 250개인 경우, 복제본 노드는 0 ~ 1개만 생성할 수 있음
    • 샤드가 166개인 경우, 복제본 노드는 0 ~ 2개만 생성할 수 있음
    • 샤드가 125개인 경우, 복제본 노드는 0 ~ 3개만 생성할 수 있음
    • 샤드가 100개인 경우, 복제본 노드는 0 ~ 4개만 생성할 수 있음
    • 샤드가 83개 이하인 경우, 복제본 노드는 0 ~ 5개를 자유롭게 생성할 수 있음

     

    더욱 자세한 내용은 위 사진에 첨부되어있는 Amazon ElastiCache의 사용자 가이드 링크를 참고해주세요!

     

     

    이번에 저는 클러스터 모드를 활성화하여 두개의 샤드를 구성하고, 복제본은 각 샤드당 한개씩만 추가해보려고 합니다.

    해당 내용을 아래와 같이 그림으로 그려보았습니다.

    Key 값이 "foo"인 경우, 해시 슬롯이 8192 ~ 16383 인 샤드에 저장되게 됩니다.

    • CRC16("foo") mod 16384 = 12182

     

     

    복제본이 한개만 있는게 아쉽긴하지만 AWS ElastiCache에서 요금을 측정할 때 노드당 측정이 되기 때문에

    t3.micro 노드로 위와 같이 두개의 샤드와 샤드 당 복제본을 하나씩으로 ElastiCache 클러스터를 생성하게 된다면

    t3.micro 요금 x 4로 측정이 되므로 주의해야합니다 ㅠㅠ (모르면 요금 폭탄 맞을 수 있음)

     

     

     

    Redis 클러스터 생성하기

    그렇다면 이제 AWS console에 접속하여 클러스터를 생성해보겠습니다.

     

     

    주황색 지금 시작 버튼에서 Redis OSS(Open Source Software) 클릭

     

     

     

    맨 처음에는 위 사진과 같이 나올겁니다.

     

     

    배포 옵션을 자체 캐시 설계로 선택해주고, 생성 방법은 클러스터 캐시로 선택해줍니다.

    그리고 클러스터 모드는 활성화됨으로 선택해줍니다.

     

     

    Redis 클러스터의 위치를 클라우드로 정하고 고가용성을 위해 다중 AZ를 체크해줍니다.

     

     

    이제 클러스터를 구성하기 위한 옵션을 설정해야합니다.

    저는 최신 버전의 엔진인 7.1을 선택하고 포트는 역시 레디스 기본 포트인 6379로 유지했습니다.

    파라미터 그룹은 기본으로 그대로 두었고, 노드 유형은 t3.micro로 설정하였습니다.

     

    여기서 복제본 개수 설정 부분이 유심히 보고 넘어갈 부분인데요,

    저는 위에서 말한 것과 같이 설정하기 위해서 복제본 개수를 1로 설정했습니다.

    그러면 프라이머리 1개와 복제본 1개가 생성되는 것입니다.

     

    만약에 복제본 개수를 0으로 설정한다면, 프라이머리 1개만 존재하게 됩니다.

     

     

    이제 서브넷 그룹과 연결해줘야 합니다. 저는 기존에 만들어 놓은게 있어서 위 사진처럼 뜨는데,

    없다면 오른쪽에 새 서브넷 그룹 생성을 통해 만들어서 적용해주면 됩니다.

     

     

    이 부분에서는 각 샤드들을 직접 원하는 가용 영역으로 배치할 수 있습니다.

    Redis 클러스터는 총 16,384개의 슬롯을 각 샤드에 분배해서 배치할 수 있는데

    이를 샤드의 개수로 나눠서 균등 배포를 할 수도 있고, 원하는 만큼의 슬롯을 원하는 샤드에 배치해 줄 수 있습니다.

    특별히 원하는 구성이 있다면 선택해 주고 아니라면 균등 배포, 가용 영역 지정으로 노드마다 어떤 AZ에 넣을지 선택해 주도록 합니다.

     

     

    이제 보안관련 설정을 해줘야합니다.

    보안 그룹 부분에서 저의 경우 인바운드 규칙으로

    6379 포트에 대해서 특정 Subnet에 위치한 보안 그룹들로부터 들어오는 트래픽만 허용해주는 형태로 미리 생성했었습니다.

     

     

    자동 백업도 지원을 해주고 있습니다.

    백업 기간을 별도로 설정을 할 수도 있습니다.

    이후 나머지 옵션을 설정하고 생성 버튼을 클릭해줍니다.

     

     

    위와 같이 성공적으로 생성 된 것을 확인할 수 있었습니다.

     

     

     

    위와 같이 샤드와 각 노드들이 잘 생성된 것을 확인할 수 있고,

    여기서 각 노드들의 엔드포인트들을 복사해서 스프링부트나 여러 애플리케이션 등에 연결이 가능합니다.

     

     

     

    Redis Cluster 접속 (redis-cli)

    redis-cli -h [ElastiCache 구성 엔드포인트] -p 6379

     

     

    Redis Cluster 접속 (SpringBoot)

    application.yml

    spring:
      data:
        redis:
          password:
          cluster:
            nodes:
              {각 노드에 해당하는 엔드포인트},
              {각 노드에 해당하는 엔드포인트},
              {각 노드에 해당하는 엔드포인트},
              {각 노드에 해당하는 엔드포인트}

     

    스프링부트 연동 관련해서는 아래를 참고해주세요.

     

    MacOS 로컬 환경에서 Docker Redis Cluster 설정 및 Springboot와 연동하기

    Docker ComposeDocker Desktop for Mac을 사용하며(M3 MacOS) Docker 환경을 구성하려 하기 때문에 arm64v8/redis 이미지를 사용하였습니다. docker-compose.ymlversion: '3'services: redis-master-1: container_name: redis-master-1 image:

    kjungw1025.tistory.com

     

     

     

     

     

    Reference

     

    How to work with Cluster Mode on Amazon ElastiCache for Redis | Amazon Web Services

    In this post, I will describe how you can leverage ElastiCache for Redis with cluster mode enabled to enhance reliability and availability with little change to your existing workload. Cluster Mode comes with the primary benefit of horizontal scaling up an

    aws.amazon.com

     

     

    [Redis] AWS ElastiCache의 클러스터 모드

    클러스터 특징 1개의 클러스터에는 16,384개의 해시 슬롯을 사용할 수 있다. 16,384개의 해시 슬롯은 샤드로 나눌 수 있다. 최대 500개까지 샤드를 나눌 수 있는데, 제한되는 부분들이 있다. 샤드가 50

    hyos-dev-log.tistory.com

     

     

    Redis OSS nodes and shards - Amazon ElastiCache (Redis OSS)

    Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

    docs.aws.amazon.com

     

     

Designed by Tistory.