[Redis] Redis Cluster

기훈·2024년 4월 15일

Redis

목록 보기
6/12

Redis Cluster

  • 데이터 분산을 제공

  • 일부 노드의 실패나 통신 단절에도 계속 작동하는 가용성

  • 고성능을 보장하면서 선형 확장성을 제공


Redis Cluster 특징

  • full-mssh 구조(모든 노드가 서로 연결되어 있음)

  • cluster bus라는 추가 채널 사용(16379가 보통)

  • gossip protocol 사용(근처 노드 몇개와 통신을 하게 되면 소문처럼 모든 노드에 퍼지게 된다)

  • hash slot을 사용한 키 관리(데이터를 분산시키는 기준)

  • DB0만 사용 가능(DB한개만 사용 가능

  • mulit key 오퍼레이션이 제한됨

  • 클라이언트는 모든 노드에 접속


Sentinel과 차이점

  • 클러스터는 데이터 분사을 제공함

  • 클러스터는 자동 장애조치를 위한 모니터링 노드를 추가 배치할 필요가 없음

  • 클러스터에서는 mulit key 오퍼레이션이 제한됨

  • Sentinel은 비교적 단순하고 소규모의 시스템에서 HA가 필요할 때 재택


데이터 분산과 key 관리

  • 특정 key의 데이터가 어느 노드에 속할 것인지 결정하는 메커니즘이 있어야 함

  • 보통 분산 시스템에서 해싱이 사용됨

  • 단순 해싱으로는 노드의 개수가 변할 때 모든 매핑이 새로 계산되어야 하는 문제가 있음

  • Hash Slot
    1. redis는 16384의 hash slot으로 key 공간을 나누어 관리

    2. 각 키는 CRC16 해싱 후 16384로 modulo 연산을 해 각 hash slot에 매핑

    3. hash slot은 각 노드들에게 나누어 분배됨



성능과 가용성

  • Redis Cluster는 strong consistency를 제공하지 않음(모든 클라이언트가 모든 노드에서 동일한 데이터를 보는것)
    (높은 성능을 위해 비동기 복제를 하기 때문)

  • auto failover

  • replica migration: replica가 다른 master로 migrate해서 가용성을 높인다


제약사항

  • DB0만 사용 가능

  • mulit key 오퍼레이션이 제한: key들이 각각 다른 노드에 저장되므로 MSET과 같은 기능을 기본적으로 사용할 수 없다
    같은 노드 안에 속한 key들에 대해서는 가능하다
    hash tag 기능을 사용하면 여러 key들을 같은 hash slot에 속하게 할 수 있다
    => key 값중 {} 안에 들어간 문자열에 대해서만 해싱을 수행하는 원리
    MSET {user:a}:age 20 {user:a}:city seoul

  • 클라이언트 구현 강제: 모든 노드에 접속해야함, redirect 기능을 구현해야 함

0개의 댓글