카테고리 없음

Redis Cluster, Redis Sentinel

llmmhh 2024. 11. 13. 16:06

Redis Cluster

Redis Cluster는 Redis의 분산 데이터베이스로,
데이터를 여러 개의 Redis 노드에 분배하여 처리할 수 있도록 지원합니다.
여러 개의 Redis 인스턴스를 클러스터로 묶어서 데이터를 샤딩(분할)하여 분산 처리하는 방식입니다.

특징:

  • 데이터 분할
    데이터를 여러 개의 노드에 샤딩하여 분배합니다.
    즉, 한 노드에 모든 데이터를 저장하지 않고, 데이터가 여러 노드에 분산되어 저장됩니다.

  • 자동 장애 조치
    노드 중 하나가 실패할 경우,
    클러스터 내에서 자동으로 다른 노드가 해당 노드의 역할을 대신합니다.

  • 수평 확장성
    Redis Cluster는 수평 확장이 가능하여,
    클러스터에 노드를 추가함으로써 저장 용량과 성능을 확장할 수 있습니다.

  • 복제
    Redis Cluster는 각 샤드마다 복제본을 두어 고가용성을 제공합니다.

Redis Cluster 사용이 적합한 경우

  • 수평 확장이 필요
    데이터가 매우 많고, 하나의 서버에 모든 데이터를 담기 힘든 경우.

  • 데이터 샤딩이 필요
    데이터를 여러 노드에 분배하여 성능을 향상시키고자 하는 경우.

  • 자동 장애 복구가 필요
    서버 장애 시 자동으로 복구해야 하는 환경.

예시

  • 분산 캐시 시스템
  • 대규모 분산 데이터 저장소
  • 대용량 트래픽을 처리하는 시스템

 

Redis Sentinel

Redis Sentinel은 Redis의 고가용성을 위한 솔루션입니다.
Sentinel은 주로 Redis의 마스터-슬레이브 구조에서 마스터 노드의 장애를 감지하고,
슬레이브를 새로운 마스터로 승격시켜 서비스를 중단 없이 제공하는 역할을 합니다.
Redis Sentinel은 데이터 샤딩을 제공하지 않으며, 클러스터 환경을 구성하지 않습니다.

특징:

  • 마스터-슬레이브 구조
    Redis Sentinel은 주로 하나의 마스터 서버와 여러 개의 슬레이브 서버를 사용하여
    장애 조치 및 고가용성을 제공합니다.

  • 장애 감지 및 장애 조치
    마스터 서버의 장애를 감지하고, 슬레이브 서버를 자동으로 마스터로 승격시킵니다.

  • 서비스 디스커버리
    클라이언트는 Sentinel을 통해 현재 활성화된 마스터 서버를 조회할 수 있습니다.

  • 간단한 설정
    Sentinel은 Redis Cluster보다 설정이 간단하고,
    클러스터 구성을 위해 많은 리소스를 사용하지 않습니다.

Redis Sentinel 사용이 적합한 경우

  • 단일 노드에서의 고가용성
    하나의 Redis 인스턴스를 사용하고,
    마스터 서버의 장애를 대비해 슬레이브 서버로 failover을 구성하려는 경우.

  • 고가용성만 필요
    데이터 샤딩 없이 단일 데이터베이스에서의 장애 조치만 필요한 경우.

  • 간단한 설정을 원할 때
    Redis Cluster가 너무 복잡하게 느껴지거나, 간단하게 고가용성만 구현하고자 할 때.

예시:

  • 단일 Redis 인스턴스로 운영되는 시스템에서 고가용성을 요구할 때.
  • 작은 규모의 애플리케이션에서 Redis의 장애를 대비하려는 경우.

 

Kafka와 Redis의 통합 고려 사항

  • Kafka
    이벤트 스트리밍 플랫폼으로, 메시지 큐 및 로그 집합을 처리하는 데 유용합니다.

  • Redis
    데이터 캐싱, 세션 저장소 등으로 활용됩니다.
    두 시스템은 다른 목적을 가지고 있지만, 함께 사용하여 효율적인 시스템을 구축할 수 있습니다.

  • Redis Sentinel
    데이터의 고가용성을 보장할 수 있으므로,
    Kafka와 함께 사용할 때 Redis가 다운되는 것을 방지하려는 용도로 사용할 수 있습니다.

  • Redis Cluster
    Kafka와 함께 분산 처리 및 데이터 확장성을 요구하는 환경에서 유용합니다.
    예를 들어, Kafka가 대규모 데이터를 처리할 때
    Redis Cluster는 분산된 캐시나 데이터를 저장하는 역할을 할 수 있습니다.

 

비교 요약

  Redis Sentinel Redis Cluster
목적 마스터-슬레이브 복제를 통한 고가용성 데이터 샤딩과 고가용성
수평 확장성 없음 (단일 데이터베이스 환경) 있음 (자동으로 데이터 샤딩 처리)
장애 복구 마스터 장애 시 슬레이브 승격 마스터 장애 시 슬레이브 승격 + 자동 데이터 복구
설정 및 관리 난이도 상대적으로 간단 설정 및 관리가 복잡
대상 환경 소규모 또는 중간 규모의 데이터, 고가용성 필요 대규모 데이터 처리, 수평 확장 필요

 

어떤 것을 선택해야 할까?

  • 고가용성만 필요한 경우
    (단일 노드 Redis를 사용하면서 장애 조치가 중요하다면): Redis Sentinel이 적합합니다.

  • 데이터 샤딩과 수평 확장이 필요하고, 성능이 중요한 경우
    Redis Cluster를 사용하는 것이 좋습니다.

 

마무리(TMI)

저는 이번에 Kafka와 함께 사용할 때 Redis Cluster를 선택했습니다.
Kafka가 데이터를 스트리밍하고 처리하는 데 중점을 두는 반면,
Redis Cluster는 데이터를 분산하여 더 많은 요청을 처리하고 확장할 수 있게 도와주기 때문에
클러스터 환경을 설정하면 확장성도 뛰어나고,
성능도 높아지므로, 장기적으로 시스템을 확장할 때 더 유리하다고 생각했습니다.

다만, 추후 확장성을 고려해서 시작부터 Cluster로 선택하기보다는
우선 Sentinel 로 선택하고, 이후에 부족하다 싶을 때,
Cluster로 넘어가는것도 좋아보입니다.