[Redis] 08. 복제, Sentinel, Cluster (고가용성)
Redis의 복제(Replication), Sentinel(자동 페일오버), Cluster(수평 확장)를 정리합니다.
복제 (Replication)
Master-Replica 구조로 데이터를 복제하여 읽기 분산과 고가용성을 제공합니다.
구조
Master (읽기/쓰기) ──→ Replica 1 (읽기 전용)
└──→ Replica 2 (읽기 전용)
설정
Replica 측 설정 (redis.conf)
# Master 지정
replicaof 192.168.1.100 6379
# Master 비밀번호 (있는 경우)
masterauth "MasterPass123!"
# Replica 읽기 전용 (기본값)
replica-read-only yes
동적 설정
# Replica에서 실행
REPLICAOF 192.168.1.100 6379
# 복제 해제 (독립 Master로 승격)
REPLICAOF NO ONE
복제 상태 확인
# Master에서
INFO replication
# role:master
# connected_slaves:2
# slave0:ip=192.168.1.101,port=6379,state=online,offset=12345
# Replica에서
INFO replication
# role:slave
# master_host:192.168.1.100
# master_link_status:up
복제 특징
| 항목 | 설명 |
|---|---|
| 비동기 | 기본적으로 비동기 복제 (Master는 Replica 확인 안 기다림) |
| 전체 동기화 | 최초 연결 시 RDB 전송 후 이후 명령 스트리밍 |
| 부분 동기화 | 일시적 연결 끊김 후 재연결 시 차이분만 전송 |
| 체이닝 | Replica의 Replica 가능 (Master → R1 → R2) |
Sentinel (자동 페일오버)
Sentinel은 Master-Replica 구조를 모니터링하고, Master 장애 시 자동으로 Replica를 Master로 승격합니다.
구조
Sentinel 1 ──┐
Sentinel 2 ──┼── 모니터링 ──→ Master ──→ Replica 1
Sentinel 3 ──┘ └──→ Replica 2
Sentinel 설정 (sentinel.conf)
# 모니터링할 Master 지정 (이름, IP, 포트, 쿼럼)
sentinel monitor mymaster 192.168.1.100 6379 2
# Master 비밀번호
sentinel auth-pass mymaster "MasterPass123!"
# Master 다운 판단 시간 (밀리초)
sentinel down-after-milliseconds mymaster 5000
# 페일오버 타임아웃
sentinel failover-timeout mymaster 60000
# 동시 동기화 Replica 수
sentinel parallel-syncs mymaster 1
Sentinel 실행
redis-sentinel /etc/redis/sentinel.conf
# 또는
redis-server /etc/redis/sentinel.conf --sentinel
Sentinel 명령어
redis-cli -p 26379
SENTINEL masters # 모니터링 중인 Master 목록
SENTINEL master mymaster # Master 상세 정보
SENTINEL replicas mymaster # Replica 목록
SENTINEL get-master-addr-by-name mymaster # 현재 Master IP/포트
SENTINEL failover mymaster # 수동 페일오버
페일오버 과정
- Sentinel이 Master 다운 감지 (SDOWN)
- 다른 Sentinel들과 합의 (ODOWN, 쿼럼 충족)
- Sentinel 리더 선출
- 최적의 Replica를 새 Master로 승격
- 나머지 Replica를 새 Master에 연결
- 클라이언트에 새 Master 정보 전달
Cluster (수평 확장)
Redis Cluster는 데이터를 여러 노드에 자동으로 분산(샤딩)하여 수평 확장을 제공합니다.
구조
Slot 0~5460: Master A ←→ Replica A'
Slot 5461~10922: Master B ←→ Replica B'
Slot 10923~16383: Master C ←→ Replica C'
핵심 개념
| 개념 | 설명 |
|---|---|
| Hash Slot | 16384개 슬롯으로 키를 분배 |
| 키 분배 | CRC16(key) % 16384 → 슬롯 번호 |
| Hash Tag | {user}:1, {user}:2 → 같은 슬롯에 배치 |
| 최소 구성 | Master 3대 + Replica 3대 (총 6대) |
Cluster 생성
# 6개 노드 시작 (포트 7000~7005)
redis-server --port 7000 --cluster-enabled yes --cluster-config-file nodes-7000.conf
redis-server --port 7001 --cluster-enabled yes --cluster-config-file nodes-7001.conf
# ... (7002~7005)
# 클러스터 생성
redis-cli --cluster create \
127.0.0.1:7000 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 \
--cluster-replicas 1
Cluster 명령어
# 클러스터 접속 (-c 옵션 필수)
redis-cli -c -p 7000
# 클러스터 정보
CLUSTER INFO
CLUSTER NODES
# 슬롯 확인
CLUSTER SLOTS
CLUSTER KEYSLOT mykey # 키의 슬롯 번호 확인
# 노드 추가/제거
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
redis-cli --cluster del-node 127.0.0.1:7000 <node-id>
# 슬롯 리밸런싱
redis-cli --cluster rebalance 127.0.0.1:7000
Hash Tag (같은 슬롯 강제 배치)
# {user:1} 부분이 해시 계산에 사용됨
SET {user:1}:name "홍길동"
SET {user:1}:email "hong@test.com"
SET {user:1}:age 30
# 모두 같은 슬롯 → MGET, 트랜잭션 가능
아키텍처 선택 가이드
| 요구사항 | 권장 구성 |
|---|---|
| 단순 캐시 (소규모) | 단일 인스턴스 |
| 읽기 분산 | Master + Replica |
| 자동 페일오버 | Master + Replica + Sentinel |
| 대용량 데이터 + 수평 확장 | Redis Cluster |
| 최고 수준 가용성 | Redis Cluster (각 Master에 Replica) |
- [Redis] 11. 모니터링과 Troubleshooting
- [Redis] 10. 실전 설계 패턴
- [Redis] 09. 메모리 관리와 설정
- [Redis] 08. 복제, Sentinel, Cluster (고가용성)
- [Redis] 07. 영속성 (RDB, AOF)
- [Redis] 06. Pub/Sub, 트랜잭션, Lua 스크립팅
- [Redis] 05. 고급 자료구조 (Stream, HyperLogLog, Bitmap, Geo)
- [Redis] 04. Hash와 Sorted Set
- [Redis] 03. List와 Set
- [Redis] 02. String과 숫자 (기본 자료구조)
- [Redis] 01. Redis 소개 및 설치