Redis 클러스터는 데이터를 여러 Redis 노드에 자동으로 분산하는 수평 확장 솔루션이다. 16384개의 해시 슬롯으로 데이터를 파티셔닝하며, 자동 장애 조치를 지원한다.
클러스터 구조
해시 슬롯 분배 (3 마스터 예시):
Master A: 슬롯 0 ~ 5460
Master B: 슬롯 5461 ~ 10922
Master C: 슬롯 10923 ~ 16383
키 → CRC16(key) mod 16384 → 슬롯 → 담당 마스터
각 마스터에 슬레이브 복제:
Master A ←→ Slave A (자동 장애조치)
Master B ←→ Slave B
Master C ←→ Slave C
최소 구성: 마스터 3 + 슬레이브 3 = 6노드
Redis 클러스터 설정
bash
# redis.conf (클러스터 설정)
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
# 클러스터 생성 (Redis 5.0+)
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1 # 마스터당 슬레이브 수
# 클러스터 상태 확인
redis-cli --cluster check 127.0.0.1:7001
Python 클라이언트 (redis-py)
python
from redis.cluster import RedisCluster
rc = RedisCluster(
startup_nodes=[
{"host": "127.0.0.1", "port": 7001},
{"host": "127.0.0.1", "port": 7002},
],
decode_responses=True,
skip_full_coverage_check=True
)
# 일반 사용 (자동 라우팅)
rc.set("user:1001", "홍길동", ex=3600)
print(rc.get("user:1001"))
# 해시 태그: 관련 키를 같은 슬롯에 배치
rc.set("{user:1001}.profile", "...") # }
rc.set("{user:1001}.orders", "...") # 같은 슬롯
# MSET은 같은 슬롯 키만 가능
# 해시 태그로 해결:
pipe = rc.pipeline()
pipe.set("{tag}.key1", "v1")
pipe.set("{tag}.key2", "v2")
pipe.execute()
클러스터 vs Sentinel vs 단일 비교
| 항목 | 단일 | Sentinel | Cluster |
|---|
| 고가용성 | 없음 | HA (자동 장애조치) | HA + 확장 |
| 수평 확장 | 없음 | 없음 | 있음 |
| 다중 키 연산 | 가능 | 가능 | 제한적 |
| 복잡도 | 낮음 | 중간 | 높음 |
관련 문서