728x90
고가용성과 수평 확장을 지원하는 Redis의 분산 시스템 기능
📌 1. 왜 Redis Cluster인가?
기존 Redis는 단일 노드 구조로, 다음과 같은 한계를 가짐:
- 메모리 한계: 한 노드에 모든 데이터를 담아야 함
- 장애 발생 시 전체 서비스 영향
- 수평 확장 불가
👉 Redis Cluster는 이러한 문제를 해결하며, 데이터 샤딩(sharding) 과 장애 자동 전환(failover) 을 지원함.
🧱 2. 구성 요소와 역할
Redis Cluster는 보통 다음 구성으로 운영됨:
역할 | 설명 |
마스터 노드 (Master) | 데이터를 직접 저장하고 클라이언트 요청 처리 |
슬레이브 노드 (Replica/Slave) | 특정 마스터의 복제본, 마스터 장애 시 자동 승격 |
클러스터 슬롯 (Slots) | 0 ~ 16383까지 총 16384개의 슬롯으로 분산 저장 |
🎯 3. 데이터 분산 방식
Redis Cluster는 슬롯 기반 샤딩(Slot-based Sharding) 방식을 사용:
- Redis는 key의 해시값을 기반으로 0~16383 슬롯 중 하나를 계산
- 전체 슬롯을 여러 마스터가 나누어 담당함
예:
- master-1: 슬롯 0 ~ 5460
- master-2: 슬롯 5461 ~ 10922
- master-3: 슬롯 10923 ~ 16383
슬레이브는 각 마스터에 대응되어 데이터 백업 및 장애 대응을 수행
🔄 4. 장애 복구와 자동 Failover
- 마스터가 다운되면, 해당 마스터의 슬레이브가 자동으로 승격
- 클러스터 내 다른 노드들이 gossip protocol로 상태를 주기적으로 확인
- 정족수(quorum)에 의해 장애 여부를 판단하고 조치
🕸 5. 노드 간 통신
Redis Cluster는 두 가지 포트를 사용:
포트 | 설명 |
Redis 포트 (예: 7001) | 클라이언트와의 기본 통신 |
클러스터 버스 포트 (예: 17001) | 노드 간 통신용 (클러스터 메타 정보 공유, failover 처리 등) |
🔗 6. 클라이언트 연결 방식
Redis Cluster는 일반 Redis와 달리 다음 특징이 있음:
- 클러스터 모드 지원 클라이언트를 사용해야 함 (redis-cli -c, Lettuce, Jedis 등)
- 키에 따라 자동으로 해당 마스터 노드로 redirection (MOVED 응답)
클러스터를 구성하지 않은 노드에서 cluster-enabled yes만 설정하면 오류가 발생할 수 있음.
✅ 7. 클러스터 장점 요약
기능 | 설명 |
샤딩 | 데이터를 자동 분산 저장 |
고가용성 | 마스터 장애 시 슬레이브 자동 승격 |
확장성 | 노드 추가로 쉽게 수평 확장 가능 |
자가 치유 | 노드 간 상태 확인 및 자동 회복 기능 |
🧩 8. 관계 구조 예시
[master-7001] ← replicates ← [slave-7005]
[master-7002] ← replicates ← [slave-7006]
[master-7003] ← replicates ← [slave-7004]
- 각 마스터는 약 5461개의 슬롯을 담당
- 각 슬레이브는 마스터의 복제본으로 백업 및 장애 전환 준비
- 클러스터 구성 시 --cluster-replicas 1 옵션으로 자동 매핑 가능
728x90
'DB' 카테고리의 다른 글
DB Function vs Procedure 차이와 활용법 (0) | 2025.08.03 |
---|---|
Redis Cluster 구성 방법 (3 Master + 3 Replica, Docker 기반) (0) | 2025.06.17 |
[MySQL] WITH RECURSIVE( 재귀 ) (0) | 2024.12.16 |
[ MySQL] WITH 절 (0) | 2024.12.16 |
[MySQL] 외래키 참조 무결 (0) | 2024.12.16 |