Redis Cluster
- Redis Cluster는 Redis 서버에 데이터를 자동으로 Sharding 해주는 기술
- Fully Connected Mesh Topology 구조를 사용함
- Redis 3.0 버전부터 가능
Mesh Topology
- 모든 master 노드와 replica 노드는 서로 연결되어 있으며, gossip protocol을 이용해 서로 통신
- 모든 노드가 클러스터 구성 정보(슬롯 할당 정보)를 가짐
- Client는 어느 노드든지 접속하여 클러스터 구성 정보를 가져오고 입력 key에 따라 해당 노드에 접속하여 처리
- 일부 노드가 다운되어도 다른 노드에 영향을 주지 않음
- 과반수 이상의 노드가 다운되면 Redis Cluster는 멈춤
- 데이터를 처리하는 Master 노드는 1개 이상의 Replica 노드를 가질 수 있음
- Cluster 사용을 위해 최소 3개의 Master 노드 필요
- 단일 장애점(SPOF: Single Point of Failure)이 없음
- 단일 장애점: 시스템 구성 요소 중, 동작하지 않으면 전체 시스템이 중단되는 요소
- 단일 장애점이 있는 topology : Star, Tree
Sharding
- Sharding
- 대량의 데이터를 처리하기 위해 여러 개의 DBMS에 분할하는 기술
- c.f.) DBMS 안에서 데이터를 나누는 것은 Data Partitioning
- Shard 수에 따라 여러 대의 DBMS 설치 필요
- Redis Cluster는 Sharding을 위해 Hash Slot이라는 개념을 사용
- 총 16384개의 Slot을 가지며, Master 노드들은 Slot을 나누어 저장
- ex) Master 노드 3개에 나누어 저장하는 경우 :
0~5500
, 5501~11000
, 110011~16383
- 새로운 노드를 추가하거나 기존 노드를 삭제하는 경우에는 hash slot을 이동시키기만 하면 되어 중단 없이 확장 가능
Failover
- Master 노드가 다운되면 연결된 Replica 노드를 Master로 승격시키는 Failover 발생
- Sentinel 구조에서는 Sentinel이 노드들을 감시하지만, Cluster 구조에서는 모든 노드가 서로 감시
- Failover 과정은 사용자의 개입 없이 Cluster 내부 통신으로 자동 진행됨
- 최소 3개의 Master 노드 필요
참고
http://redisgate.kr/redis/cluster/cluster_introduction.php
https://sup2is.github.io/2020/07/22/redis-cluster.html
http://redisgate.kr/redis/cluster/cluster_failover.php