[Redis] Cluster 구조 - Mesh, Sharding, Failover

hwwwa·2023년 1월 25일
0

Redis Cluster

  • Redis Cluster는 Redis 서버에 데이터를 자동으로 Sharding 해주는 기술
  • Fully Connected Mesh Topology 구조를 사용함
  • Redis 3.0 버전부터 가능

Mesh Topology

  • 모든 master 노드와 replica 노드는 서로 연결되어 있으며, gossip protocol을 이용해 서로 통신
  • 모든 노드가 클러스터 구성 정보(슬롯 할당 정보)를 가짐
  • Client는 어느 노드든지 접속하여 클러스터 구성 정보를 가져오고 입력 key에 따라 해당 노드에 접속하여 처리
  • 일부 노드가 다운되어도 다른 노드에 영향을 주지 않음
    • 과반수 이상의 노드가 다운되면 Redis Cluster는 멈춤
  • 데이터를 처리하는 Master 노드는 1개 이상의 Replica 노드를 가질 수 있음
  • Cluster 사용을 위해 최소 3개의 Master 노드 필요
  • 단일 장애점(SPOF: Single Point of Failure)이 없음
    • 단일 장애점: 시스템 구성 요소 중, 동작하지 않으면 전체 시스템이 중단되는 요소
    • 단일 장애점이 있는 topology : Star, Tree

Sharding

  • Sharding
    • 대량의 데이터를 처리하기 위해 여러 개의 DBMS에 분할하는 기술
      • c.f.) DBMS 안에서 데이터를 나누는 것은 Data Partitioning
    • Shard 수에 따라 여러 대의 DBMS 설치 필요
  • Redis Cluster는 Sharding을 위해 Hash Slot이라는 개념을 사용
  • 총 16384개의 Slot을 가지며, Master 노드들은 Slot을 나누어 저장
    • ex) Master 노드 3개에 나누어 저장하는 경우 : 0~5500, 5501~11000, 110011~16383
  • 새로운 노드를 추가하거나 기존 노드를 삭제하는 경우에는 hash slot을 이동시키기만 하면 되어 중단 없이 확장 가능

Failover

  • Master 노드가 다운되면 연결된 Replica 노드를 Master로 승격시키는 Failover 발생
    • Sentinel 구조에서는 Sentinel이 노드들을 감시하지만, Cluster 구조에서는 모든 노드가 서로 감시
  • Failover 과정은 사용자의 개입 없이 Cluster 내부 통신으로 자동 진행됨
  • 최소 3개의 Master 노드 필요

참고
http://redisgate.kr/redis/cluster/cluster_introduction.php
https://sup2is.github.io/2020/07/22/redis-cluster.html
http://redisgate.kr/redis/cluster/cluster_failover.php

0개의 댓글