Redis Sentinel, Cluster 차이

PARK JOOCHANG·2024년 12월 3일

Redis는 단일 인스턴스로도 운영 가능하지만 물리 머신이 가진 메모리 한계를 초과하는 데이터를 저장하고 싶거나, failover에 대한 처리를 통해 고가용성을 보장하려면 Sentinel이나 Cluster 등의 운영 방식을 선택해서 사용해야 한다.

Failover : 장애 조치 기능으로 시스템 장애 이벤트 발생 시 하나의 예비 백업 시스템으로 자동 전환되는 것을 말한다.

Sentinel

  • 모니터링 : Master/Slave 동작 감시
  • 자동 장애 조치 (Automatic Failover)
  • 알림 : failover 됐을 때, client에게 알릴 수 있다.

구성 요소

  • 최소 3개 이상의 Sentinel 인스턴스를 권장하여 장애 발생 시 합의를 통해 안정적인 장애 조치가 이루어지도록 한다.
  • Master-Slave 구조 : 하나의 마스터와 다수의 슬레이브로 구성되며, Sentinel이 마스터의 상태를 관리한다.

동작 방식

  • Sentinel 인스턴스 과반수 이상이 Master 장애를 감지하면 Slave 중 하나를 Master로 승격시키고 기존의 Master는 Slave로 강등시킨다.
  • Slave가 여러 개 있을 경우 Slave가 새로운 Master로부터 데이터를 받을 수 있도록 재구성 된다.

장점

  • 고가용성 보장 : 마스터 서버 장애 시 자동으로 슬레이브를 마스터로 승격시켜 서비스 중단 시간을 최소화한다.
  • 유연성 : 기존의 Master-Slave 구조를 활용하여 고가용성을 강화할 수 있다.

단점

  • 확장성 한계 : Sentinel 자체를 클러스터링을 지원하지 않기 때문에, 수평적 확장에 한계가 있다.
  • 복잡한 관리 : Sentinel 인스턴스 수와 구성을 관리하는 데 추가적인 노력이 필요하다.

Cluster

Redis Cluster는 Redis의 수평적 확장성과 고가용성을 동시에 제공하기 위한 분산 시스템이다. 클러스터는 데이터를 여러 노드에 분산 저장하고, 각 노드가 마스터와 슬레이브 역할을 수행하여 데이터의 복제와 장애 조치를 관리한다.

주요 기능

  • 데이터 분산
  • 고가용성 : 각 마스터 노드는 하나 이상의 슬레이브 노드를 가지며, 마스터 노드 장애 시 슬레이브노드 중 하나를 새로운 마스터로 승격시킨다.
  • 자동 장애 조치(Failover) : 클러스터 내에서 마스터 노드의 장애를 감지하고, 자동으로 슬레이브 노드를 마스터로 승격시켜 클러스터의 안정성을 유지한다.
  • 데이터 재분배 : 노드 추가/제거 시 데이터 슬롯을 재분배하여 클러스터의 균형을 맞춘다.

구성 요소

  • 노드 : 클러스터를 구성하는 개별 Redis 인스턴스로 마스터와 슬레이브 역할을 수행한다.
  • Master-Slave : 각 마스터 노드는 하나 이상의 슬레이브 노드를 가지며, 데이터 복제를 통해 고가용성을 보장한다.

장점

  • 수평적 확장 : 클러스터링을 통해 데이터와 트래픽을 여러 노드에 분산시켜 성능을 향상시킬 수 있다.
  • 고가용성
  • 자체적인 데이터 분산 : 데이터 분산과 복제를 자동으로 관리한다.

단점

  • 복잡한 설정
  • 제한된 명령어 : 특정 명령어는 제한될 수 있다.
  • 데이터 일관성 : 여러 노드에 데이터가 분산 저장되기 때문에, 일부 상황에서 데이터 일관성 관리가 복잡해질 수 있다.

그래서 뭘 써야 될까?

Sentinel

  • 고가용성만이 주요 요구 사항일 때 : 단일 마스터-슬레이브 구조로도 충분한 고가용성 제공
  • 데이터 분산이 필요 없을 때 : 데이터가 한 노드에 집중돼도 문제 없는 경우
  • 소규모 or 중간 규모

Cluster

  • 수평적 확장과 높은 처리량이 필요할 때 : 데이터와 트래픽을 여러 노드로 분산시켜 성능 향상이 필요한 경우
  • 대규모 데이터 저장 : 단일 노드에 저장하기 어려운 경우
  • 자동 데이터 분산이 필요할 때 : 별도 데이터 분산 로직 없이 Redis가 자체적으로 데이터 분산 관리하고 싶은 경우
profile
모르면 알고 넘어가자

0개의 댓글