본문 바로가기
J-H-T/Redis

[REDIS-1.1단계] Redis 구조별 RedisShake 차이 이해하기!

by METAVERSE STORY 2026. 8. 14.
반응형

 

 

🟥 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마다 연결해야 하는지”가 아주 명확해집니다.

 

 

반응형

댓글