DB

[Redis] Redis Cluster

Raconer 2024. 3. 12. 23:31
728x90

확장성이란?

  • 소프트웨어나 서비스의 요구사항 수준이 증가할 때 대응할 수 있는 능력
  • 주로 규모에 대한 확장성을 뜻함(데이터 크기, 요청 트래픽 등)
  • 수직 확장(Scale-up)과 수평 확장(Scale-out)이 사용됨

수평 확장(Scale-Out)

  • 처리 요소(ex: 서버)를 여러 개 두어서 작업을 분산
  • 무중단 확장이 가능
  • 이론적으로는 무한대로 확장이 가능

분산 시스템에 따라오는 문제

  • 부분 장애
  • 네트워크 실패
  • 데이터 동기화
  • 로드밸런싱(또는 Discovery)
  • 개발 및 관리의 복잡성

분산 시스템의 적용

  • 분산 시스템으로 인한 trade-off 를 판단해서 적합하다면 사용
  • 서비스 복잡도와 규모의 증가로 분산은 피할 수 없는 선택
  • 분산 시스템의 구현체들은 세부적인 부분에서 튜닝이 가능하게 옵션이 제공됨
    • 즉, 분산 시스템의 장단점을 세부적으로 조절 가능

Redis Cluster란?

  • 여러 노드에 자동적인 데이터 분산
  • 일부 노드의 실패나 통신 단절에도 계속 작동하는 가용성
  • 고성능을 보장하면서 선형 확장성을 제공

Redis Cluster 특징

  • Full-mesh 구조로 통신
    • 모든 노드가 모든 노드와 연결되어 있음
  • Cluster Bus 채널 사용
    • Redis 기본 포트(6379) 외에 클러스터 버스용 포트(16379)를 사용
  • Gossip Protocol 사용
    • 많은 노드가 통신할 때 인접 노드끼리 정보를 주고받아 상태를 전파
    • 소문이 퍼지는 것처럼 네트워크 상태 정보를 퍼뜨림
  • Hash Slot을 이용한 키 분산
    • 전체 hash slot(0 ~ 16383)을 여러 노드에 분배
  • DB0만 사용 가능
  • Multi-key 명령어 제한 있음
    • 다른 슬롯에 분산된 키를 대상으로 하는 Multi-key 연산은 불가능
  • 클라이언트가 모든 노드에 직접 접속 가능


Sentinel과의 차이점

항목 Redis Cluster Redis Sentinel
데이터 분산 O (샤딩 지원) X
장애 복구 O (자동 장애 조치) O (자동 장애 조치)
모니터링 노드 필요 X O (Sentinel 프로세스 필요)
Multi-key 연산 제한됨 지원
구성 복잡도 상대적으로 복잡 상대적으로 단순
적합 환경 대규모 시스템, 고성능 필요 단순한 시스템, 고가용성 필요
728x90