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
https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/CacheNodes.NodeGroups.html
http://redisgate.kr/redis/cluster/cluster_introduction.php