Redis

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

DevHyo 2022. 1. 29. 15:54

클러스터 특징

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

    • 샤드가 500개인 경우, 복제본 노드는 하나도 생성할 수 없음
    • 샤드가 250개인 경우, 복제본 노드는 0 ~ 1개만 생성할 수 있음
    • 샤드가 166개인 경우, 복제본 노드는 0 ~ 2개만 생성할 수 있음
    • 샤드가 125개인 경우, 복제본 노드는 0 ~ 3개만 생성할 수 있음
    • 샤드가 100개인 경우, 복제본 노드는 0 ~ 4개만 생성할 수 있음
    • 샤드가 83개 이하인 경우, 복제본 노드는 0 ~ 5개를 자유롭게 생성할 수 있음
  • 노드는 Primary와 Replica로 구분된다.
  • 해시 함수는 CRC-16 함수를 사용한다.

    • CRC-16/XMODEM을 사용하며, ZMODEM 또는 CRC-16/ARCON이라고 불리기도 한다.
  • 클러스터 안에 샤드가 있고, 샤드 안에 1개의 Primary 노드와 0 ~ 5개의 Replica 노드가 존재한다.
샤드를 3개로 나눈 예시

  • 클러스터 모드로 구축했을 경우, 엔드 포인트는 하나이며, Redis 클러스터 서버 내부에서 로드를 분산한다.

    • 참고로 클라이언트 측에서 분산하는 방식인 Consistent Hashing 알고리즘을 사용하여 분산하는 경우도 있다.
  • Key 값이 "foo"인 경우, 해시 슬롯이 10923 ~ 16383 인 샤드에 저장된다.

    • CRC16("foo") mod 16384 = 12182
  • 나눠진 여러 샤드에 데이터들이 고르게 분산되려면, Key를 잘 정의하는 것이 중요하고, 내가 정의한 Key가 어떤 해시 슬롯에 할당되는지 미리 체크해 볼 필요도 있다.

    • 어떤 해시 슬롯에 저장되는지 알아야 할 필요가 있지 않을까?
    • 해시 슬롯에 Key 값들이 고르게 분산되는지?

클러스터 제한 사항

  • DB 0번만 사용할 수 있다.
  • 기본적으로 멀티 키 명령을 사용할 수 없다. (MSET, MGET, Node에서 사용하는 ioredis 클라이언트의 pipeline)
  • 같은 해시 슬롯인 경우에는 멀티 키 명령을 사용할 수 있는데, 보통 hash tag를 활용해서 같은 해시 슬롯에 데이터들을 저장하고, 이를 통해 멀티 키 명령을 사용할 수 있다.

    • hash tag는 key의 일부를 {}로 감싸는 것이다.
    • {user001}:1234, {user001}:22346에 해당되는 key는 같은 해시 슬롯에 저장된다.

참고

https://m.blog.naver.com/sehyunfa/222114663016

 

[AWS] ElastiCache for Redis 클러스터 모드(cluster mode) 실습

ElastiCache는 알려진 대로 데이터베이스 캐싱을 위해 사용한다. ElastiCache for Redis를 구축할 때 ...

blog.naver.com

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

 

Redis 노드 및 샤드 - Amazon ElastiCache for Redis

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

http://redisgate.kr/redis/cluster/cluster_introduction.php

 

CLUSTER Introduction Redis

redis_cluster_intro Redis CLUSTER Introduction Redis CLUSTER   Background 레디스 클러스터(cluster)에 들어가기 전에 Scale up, Scale out, Data Partitioning, Data Sharding, Topology에 대해 살펴봅니다. 성능 향상 방법 - How to impro

redisgate.kr