Redis ‐ Redis Cluster Mode - dnwls16071/Backend_Study_TIL GitHub Wiki

📚 Redis Cluster

  • Redis Mode는 크게 3가지가 있다.

[ Standalone 모드 ]

  • 하나의 Redis로 서비스하는 모드이다.

[ Sentinel 모드 ]

  • Sentinel은 Redis의 Master/Slave를 모니터링하는 서버다.
    • Sentinel은 Redis의 고가용성을 보장하기 위해 Master, Replica(Slave) 노드들의 상태를 지속적으로 모니터링하는 시스템이다.
  • Master 노드가 비정상적으로 종료됐을 때, Slave를 Master로 승격시키기 위해 자동 FailOver를 진행한다.
    • Master 노드의 다운을 감지한다
    • Replica(Slave) 중에서 새로운 Master를 선출한다.
    • 다른 Replica들에게 새로운 Master 정보를 전파한다.
    • 애플리케이션에게 새로운 Master 정보를 제공한다.
  • 각 Sentinel은 Redis 모든 노드와 연결되어 있다.
  • 최소 3개의 인스턴스가 필요하고 홀수개로 구성해야 한다.
    • 과반수 투표 방식으로 의사결정을 하기 때문에 홀수개로 구성해야 하는 것이다.

[ Cluster 모드 ]

  • Redis Cluster는 여러 노드에 데이터를 자동 분산하고 일부 노드에 결함이 있어도 계속 운영되는 가용성을 제공한다.
  • 또한 고성능으 보장하면서 선형 확장성을 제공한다.
  • Redis 클러스터 모드는 아키텍처의 변경 없이 Redis 인스턴스 간 수평 확장이 가능하게 해준다.
  • 또 데이터의 분산 처리, 복제, 자동 FailOver 기능을 제공한다.

📚 Redis Cluster 동작

image

  • 클러스터 구조에서 모든 데이터는 해시 슬롯에 저장된다. Redis는 총 16,384개의 해시 슬롯을 가지고 마스터 노드는 이 해시 슬롯을 나눠 갖는다.
    • 마스터 A: 0-5500
    • 마스터 B: 5501-11000
    • 마스터 C: 11001-16383
  • 모든 키는 CRC16 알고리즘을 통해 해시 슬롯에 매핑된다.
  • Sentinel 모드와 마찬가지로 Cluster 구조에서도 복제와 FailOver를 통해 고가용성을 보장한다.
  • Cluster 모드에서는 Sentinel 인스턴스 대신에 일반 Redis 노드가 Cluster 버스를 통해 통신하고 서로를 감시하며, 인스턴스에 문제가 생겼을 때 자동으로 구조를 재구성한다.

[ Auto FailOver 방식 ]

image

  • Master1 노드에 장애가 생겼을 때 Replica1 노드가 다른 Master 노드들에게 FailOver를 시도해도 될지 투표 요청을 보낸다.
  • 그리고 과반수 이상 투표를 받을 시 Replica1 노드가 Master1 노드를 대체해 승격된다.

[ Auto Replica Migration 방식 ]

image

  • Master1 노드에 장애가 발생하며 Replica1 노드가 Master1 노드를 대체하며 승격되었다.
  • 이 때, 복제본이 없는 현상이 발생하는데, Master3 노드와 연결된 2개의 복제본 중 Replica4 노드를 Replica1 노드의 복제본이 되도록 이동시킨다.
  • 이를 통해 모든 Master 노드가 적어도 1개 이상의 복제본에 의해 복제가 된다는 것을 보장하며 클러스터 전체의 안정성을 향상시킨다.