
🟥 1.1단계 - Redis 구조별 RedisShake 차이 이해하기
| Redis 구조 | RedisShake 난이도 | 핵심 포인트 |
| Standalone | ⭐ | Redis 1대에 직접 연결 |
| Master/Replica | ⭐⭐ | 보통 Master 또는 Replica 선택 |
| Sentinel | ⭐⭐⭐ | Sentinel이 Master를 관리하므로 연결 대상 주의 |
| Cluster | ⭐⭐⭐⭐ | 여러 Master Shard를 RedisShake가 찾아서 각각 동기화 |
1. Standalone Redis
가장 단순한 구조입니다.
Application
│
▼
┌──────────────┐
│ Redis │
│ Standalone │
│ redis-0 │
└──────────────┘
Redis 서버가 사실상 하나입니다.
RedisShake도 그냥 그 Redis에 연결하면 됩니다.
Source Redis
│
│ PSync
▼
RedisShake
│
▼
Target Redis
예를 들면:
[sync_reader]
cluster = false
address = "redis-source:6379"
[redis_writer]
cluster = false
address = "redis-target:6379"
cluster=false가 핵심입니다. 공식 문서에서도 일반 Redis에서는 sync_reader가 Master에 Replica처럼 붙어 전체 RDB와 이후 증분 AOF 스트림을 가져오는 구조입니다. Tair Open Source
장점
구성이 아주 쉽습니다.
단점
Redis 하나가 죽으면 서비스 자체가 영향을 받을 수 있습니다.
따라서 운영환경에서는 Standalone만 단독으로 사용하는 경우가 상대적으로 적습니다.
2. Master / Replica
이제 Redis가 두 대 이상입니다.
예:
┌──────────────┐
Application →│ Redis Master │
└──────┬───────┘
│
│ Replication
▼
┌──────────────┐
│Redis Replica │
└──────────────┘
Master 역할은:
쓰기
읽기
Replication 송신
Replica 역할은:
Master 데이터 복제
읽기 용도 가능
장애 대비
입니다.
RedisShake는 어디에 연결할까?
가장 쉽게 생각하면:
Redis Master
│
▼
RedisShake
│
▼
Target
입니다.
하지만 운영 환경에서는 Source Master에 부담을 줄이고 싶을 수 있습니다.
그래서 경우에 따라:
Master
│
Redis Replication
▼
Replica
│
│ RedisShake
▼
RedisShake
처럼 Replica를 Source로 사용하는 방식도 고려합니다.
즉 RedisShake 입장에서 중요한 것은:
"이 Redis에서 Full + Incremental 데이터를 정상적으로 받을 수 있느냐?"
입니다.
3. Sentinel
여기서부터 처음 보면 조금 헷갈립니다.
Sentinel은 Redis 데이터를 저장하는 Redis가 아닙니다.
Master/Replica 상태를 감시하고 장애 시 Master를 자동 전환하는 관리자입니다.
구조가:
Sentinel
/ | \
/ | \
▼ ▼ ▼
Master Replica Replica
│
└──── Replication ────┐
예를 들어 Master가 죽으면:
기존
redis-0 = Master
redis-1 = Replica
redis-2 = Replica
Sentinel이 감지하고:
변경
redis-0 = 장애
redis-1 = 새로운 Master
redis-2 = Replica
로 바꿉니다.
RedisShake에서는 무엇이 달라질까?
두 가지 방식이 있습니다.
방법 A — Redis에 직접 연결
RedisShake
│
▼
Redis Replica 또는 Master
RedisShake 공식 문서에서도 일반적으로 Sentinel 자체를 무시하고 Redis 노드 정보를 직접 지정하는 방식이 가능합니다. Tair Open Source
예:
[sync_reader]
cluster = false
address = "redis-replica-0:6379"
방법 B — Sentinel을 통해 Master 주소 확인
RedisShake
│
▼
Sentinel
│
│ "현재 Master는 redis-1"
▼
Redis Master
설정도 가능합니다.
[sync_reader]
cluster = false
address = ""
[sync_reader.sentinel]
master_name = "mymaster"
address = "redis-sentinel:26379"
RedisShake가 Sentinel에게:
"mymaster의 현재 Master가 어디야?"
라고 물어서 연결하게 됩니다. Tair Open Source
⚠️ Sentinel에서 아주 중요한 점
RedisShake의 sync_reader가 Sentinel 관리하의 Master에 직접 PSync로 붙으면, Sentinel이 RedisShake를 Replica처럼 인식할 수 있습니다.
공식 문서에서도 이 때문에 예상하지 못한 문제가 생길 수 있어 가능한 경우 Source Replica를 사용하는 것을 권장합니다. Tair Open Source
그래서 운영에서는 이런 형태가 더 깔끔할 수 있습니다.
Redis Master
│
│ Native Replication
▼
Redis Replica
│
│ PSync
▼
RedisShake
│
▼
Target Redis
4. Redis Cluster ⭐ 현재 환경
이게 가장 중요합니다.
Redis Cluster는 단순히 Redis 여러 대를 복제한 것이 아닙니다.
데이터 자체를 여러 Master에 나눠 저장합니다.
예를 들어:
Redis Cluster
Master 1
Slot 0 ~ 5460
Master 2
Slot 5461 ~ 10922
Master 3
Slot 10923 ~ 16383
Redis 전체에는 총 16,384개 Hash Slot이 있습니다.
쉽게 보면:
Key A
↓ hash
Slot 100
↓
Master 1
Key B
↓ hash
Slot 7000
↓
Master 2
Key C
↓ hash
Slot 15000
↓
Master 3
즉 데이터가 한 Master에 모두 들어있는 것이 아닙니다.
5. 실제 Redis Cluster는 Replica도 붙는다
운영환경에서는 보통 이런 형태가 됩니다.
Redis Cluster
Shard 1
┌───────────┐
│ Master 1 │
└─────┬─────┘
│
▼
┌───────────┐
│ Replica 1 │
└───────────┘
Shard 2
┌───────────┐
│ Master 2 │
└─────┬─────┘
│
▼
┌───────────┐
│ Replica 2 │
└───────────┘
Shard 3
┌───────────┐
│ Master 3 │
└─────┬─────┘
│
▼
┌───────────┐
│ Replica 3 │
└───────────┘
그래서 보통:
3 Master
+
3 Replica
= Redis Pod 6개
같은 구성이 나옵니다.
6. Cluster에서는 RedisShake가 어떻게 동작하나?
여기가 핵심입니다.
Standalone에서는:
RedisShake
│
▼
Redis 1대
면 됐습니다.
Cluster에서는:
Redis Cluster
┌── Master 1
│
RedisShake ──┼── Master 2
│
└── Master 3
가 되어야 합니다.
RedisShake는 Source 설정에서:
[sync_reader]
cluster = true
address = "redis-cluster-node:6379"
처럼 설정할 수 있습니다.
여기서 질문이 생깁니다.
"Master가 3개인데 왜 address는 하나만 넣어요?"
좋은 포인트입니다.
RedisShake가 첫 번째 Redis 노드에 접속한 다음:
CLUSTER NODES
를 실행해서 Cluster topology를 알아냅니다.
그리고:
Master 1
Master 2
Master 3
를 자동으로 찾아 연결합니다. Tair Open Source
7. 내부적으로는 Shard별 Reader가 만들어진다
RedisShake의 Cluster 동작을 쉽게 그리면:
Source Redis Cluster
Master1 Master2 Master3
│ │ │
▼ ▼ ▼
Reader1 Reader2 Reader3
\ | /
\ | /
└── RedisShake ─┘
│
▼
Target Cluster
RedisShake 공식 아키텍처에서도 Source Cluster의 Shard 수에 맞게 Standalone Reader를 생성하고 각각 병렬로 데이터를 읽는 구조로 설명합니다. Tair Open Source
따라서 Cluster에서는 사실상:
Shard 1 → Sync
Shard 2 → Sync
Shard 3 → Sync
가 동시에 이루어진다고 보면 됩니다.
8. Target도 Cluster라면?
예를 들어 Source와 Target이 둘 다:
3 Master + 3 Replica
라고 하겠습니다.
전체 그림은:
Source Redis Cluster
M1 M2 M3
│ │ │
└────┬────┴────┬────┘
│
▼
┌───────────┐
│RedisShake │
└─────┬─────┘
│
▼
Target Redis Cluster
M1 M2 M3
설정 개념은:
[sync_reader]
cluster = true
address = "source-node:6379"
[redis_writer]
cluster = true
address = "target-node:6379"
Source뿐 아니라 Target도 Cluster이므로 **writer도 cluster=true**가 됩니다. Tair Open Source
9. K8s에서는 조금 더 주의해야 한다 ⚠️
온프레미스 K8s + Redis Cluster 중요합니다.
예를 들어 Source:
redis-0
redis-1
redis-2
redis-3
redis-4
redis-5
가 Pod로 떠 있다고 합시다.
RedisShake
│
▼
redis-cluster Service
│
▼
redis-0
여기까지 접속은 성공할 수 있습니다.
하지만 RedisShake가 CLUSTER NODES를 실행해서 다음 주소를 받았다고 가정해보겠습니다.
redis-0 → 10.244.1.10:6379
redis-1 → 10.244.2.15:6379
redis-2 → 10.244.3.20:6379
그 다음 RedisShake가 이 주소들에도 직접 연결할 수 있어야 합니다.
즉 Cluster에서는:
Service 한 개만 접근 가능
이라고 끝나는 게 아닙니다.
반드시:
RedisShake
│
├─ redis-0 접근 가능
├─ redis-1 접근 가능
├─ redis-2 접근 가능
├─ redis-3 접근 가능
├─ redis-4 접근 가능
└─ redis-5 접근 가능
이어야 합니다.
이게 앞으로 Headless Service / Pod DNS / announce IP / NetworkPolicy를 공부해야 하는 이유입니다.
10. 네 가지 구조를 한눈에 비교
Standalone
RedisShake
│
▼
Redis
설정:
cluster = false
Master / Replica
Master
│
▼
Replica
│
▼
RedisShake
또는:
Master → RedisShake
설정:
cluster = false
Sentinel
Sentinel
│
▼
Master
│
Replica
│
▼
RedisShake
RedisShake가 Sentinel을 이용해 현재 Master 주소를 찾는 구성도 가능합니다. 다만 sync_reader를 Sentinel 관리 Master에 직접 붙이는 경우 RedisShake가 Replica처럼 보일 수 있어서 주의해야 합니다. Tair Open Source
설정:
cluster = false
+
sentinel 설정 가능
Redis Cluster ⭐ 현재 환경
RedisShake
/ | \
/ | \
▼ ▼ ▼
Master1 Master2 Master3
설정:
cluster = true
RedisShake가 CLUSTER NODES를 통해 전체 Shard를 확인합니다. Tair Open Source
11. 가장 중요한 차이: Replica와 Cluster는 완전히 다른 개념
이걸 반드시 구분하셔야 합니다.
Master/Replica
Master
│
├─ Key A
├─ Key B
└─ Key C
│
│ 복제
▼
Replica
│
├─ Key A
├─ Key B
└─ Key C
같은 데이터를 복제합니다.
반면 Cluster:
Master 1
Key A
Key B
Master 2
Key C
Key D
Master 3
Key E
Key F
데이터를 나눠서 저장합니다.
그래서 Redis Cluster에는 보통 두 개념이 동시에 존재합니다.
Redis Cluster
Shard 1 Shard 2 Shard 3
Master1 Master2 Master3
│ │ │
▼ ▼ ▼
Replica1 Replica2 Replica3
즉:
Cluster = 데이터 분산
Replica = 같은 데이터 복제
입니다.
12. 지금 환경에서 RedisShake 구성은 이렇게 생각하면 됩니다
현재 조건:
온프레미스
+
Kubernetes
+
Redis Cluster
라면 가장 기본적인 목표 구조는:
Source K8s
Redis Cluster
M1 M2 M3
│ │ │
R1 R2 R3
\ | /
\ | /
▼ ▼ ▼
RedisShake Pod
│
│
▼
Target K8s
Redis Cluster
M1 M2 M3
│ │ │
R1 R2 R3
그리고 개념적인 RedisShake 설정은:
[sync_reader]
cluster = true
address = "source-redis:6379"
[redis_writer]
cluster = true
address = "target-redis:6379"
입니다.
하지만 실제 K8s 환경에서는 이것만 써서 끝나는 것이 아니라:
Source Cluster 노드 DNS
Target Cluster 노드 DNS
Headless Service
Redis Cluster announce 주소
NetworkPolicy
Password / ACL
TLS
PVC
RedisShake 임시 Disk
까지 확인해야 합니다.
🎯 1.1단계에서 가장 중요한 결론
현재 환경에서는 이렇게 기억하시면 됩니다.
Standalone
Redis 1대
→ RedisShake도 1대에 연결
Master/Replica
같은 데이터 복제
→ Master 또는 Replica에 RedisShake 연결
Sentinel
Master/Replica + 자동 Failover 관리
→ Sentinel 또는 실제 Redis 노드에 연결
Redis Cluster ⭐
데이터가 여러 Master에 분산
→ RedisShake가 여러 Shard를 찾아 각각 읽음
그리고 Redis Cluster라면 RedisShake 설정에서 가장 중요한 출발점은:
[sync_reader]
cluster = true
입니다. RedisShake가 초기 노드 하나를 통해 CLUSTER NODES 정보를 가져오고 각 Source Shard에 Reader를 만들어 병렬로 동기화합니다. Tair Open Source
따라서 일반 Redis 기준이 아니라 K8s + Redis Cluster → Redis Cluster를 기본 시나리오
다음 1.2단계에서는 2단계로 바로 넘어가기 전에 Redis Cluster의 Master / Replica / Shard / Slot 16384 / Cluster Bus가 실제로 어떻게 연결되는지를 그림으로 설명하는 게 좋습니다. 이걸 먼저 이해하면 이후 RedisShake가 “왜 Master마다 연결해야 하는지”가 아주 명확해집니다.
'J-H-T > Redis' 카테고리의 다른 글
| [REDIS-4단계] sync_reader / scan_reader / rdb_reader 차이! (0) | 2026.08.16 |
|---|---|
| [REDIS-3단계] Full Sync와 Incremental Sync 원리! (0) | 2026.08.15 |
| [REDIS-2단계] Source / Target / RedisShake 구성 이해! (0) | 2026.08.15 |
| [REDIS-1.4단계] K8s Redis Cluster 네트워크 흐름 이해하기! (0) | 2026.08.15 |
| [REDIS-1.3단계] K8s Redis Cluster 구성 이해하기! (0) | 2026.08.15 |
| [REDIS-1.2단계] Redis Cluster 구조 이해하기! (0) | 2026.08.15 |
| [REDIS - 1단계] RedisShake가 무엇이고 K8s에서 어디에 위치하는가 ! (0) | 2026.08.14 |
| [참고] Kubernetes에서 Redis Cluster 구성 이해하기 🚀 (0) | 2026.08.13 |
댓글