ReDiS 특징

  • REmote DIctionary Server
  • 메모리내에 자료구조를 저장하는 DB
    • 메모리를 저장소로 사용해 빠른 IO 보장
    • Memcached와 비슷하지만 다양한 자료구조 저장
  • key-value 형태로 데이터 저장
    • key(일반적으로 string)와 그 키에 저장되는 value(다양한 자료구조 사용 가능)형태로 저장 및 조회
    • String, hash, lists, sets, sorted set, bitmap 등 다양한 자료구조 사용
    • nested 자료구조는 사용 불가
  • 소개페이지


ReDiS 운영 방식

  • Single Instance
    • 단일인스턴스로도 대부분의 환경에서 충분히 사용가능
    • Fail Over대응이 불가
    • 일반적으로 HA 및 Sharding이 가능한 Sentinel 및 Cluster모드로 사용
  • Sentinel
    • HA(Hi Availability) 지원(HA 만 지원)
    • 최대 키 개수가 2^32개로 한정
    • 메모리 제한
    • Master - Slave Replication
    • 하나의 Master에 여러 Slave 를 구성하고 2n+1(최소 3)개의 Sentinel 프로세스로 구성
    • Master가 죽는 경우 Sentinel이 이를 감지하여 Slave중 하나를 선택 해 Master로 승격
    • Client측에서 어떤 Node가 Master인지 알 수 없는 구조(HAProxy 사용으로 극복 가능)
    • Sentinel 구성 예
      • 총 3개의 Redis Node 구성
      • 총 3개의 Sentinel Node 구성
      • 3개의  Redis Node 중 1개를 Master로 나머지 2개를 Slave로 설정
      • 모든 Sentinel에 Redis Master Node가 어떤 노드인지 설정
  • Cluster
    • HA 및 Sharding 지원
    • n개의 노드를 생성 해 1개의 클러스터를 구성 후 각 노드들의 Master - Slave 구조를 지정
    • HashSlot(CRC16)으로 16384개의 Slot을 적절히 분배 해 Sharding 구성
    • Sharding갯수를 조절하여 최대 키 개수제한(2^32개)을 피해갈 수 있다
    • 어떤 Node에 접속 하더라도 해당 키를 가진 노드로 Redirect시켜 데이터를 가져올 수 있다
    • Cluster 구성 예
      • 총 12개의 Node 생성
      • 12개 Node 모두 1개의 Cluster로 구성
      • Slot을 0~4095, 4096~8191, 8192~12287, 12288~16383 으로 구분 해 샤딩 구성
      • 각 샤딩별로 2개의 Node를 Replica로 설정


HAProxy 특징

  • S/W 방식의 L4 Switch
  • The Reliable, High Performance TCP/HTTP Load Balancer
  • Balancing 옵션은 Round Robin외에도 다양한 옵션을 제공
  • 단순히 서버를 나열하는것 외에 다양한 프로토콜(http, smtp, redis, tcp)을 통해 특정 서비스만 추출 가능
  • 소개 페이지

ReDiS와 HAProxy 연동 구성   

  • ReDiS를 안정적으로 운영하기 위해 아래 요건사항을 기반으로 서비스 구성
  • Sentinel의 경우 Sharding을 지원하지 못해 고려하지 않음
  • ReDiS Cluster
    • Cluster모드 사용
      • Replication을 통해 Master-Slave 구조
      • Master: read/write 모두 가능
      • Slave: read만 가능
    • Sharding
      • 여러개의 Master 인스턴스를 만들어 각 Master에 데이터를 분산해 저장
      • hash값에 따라 16384개의 slot으로 구분되는 저장소 이용
      • 4대의 Master인스턴스 별로 0~4095, 4096~8191, 8192~12287, 12288~16383 슬롯을 사용
      • Cluster모드로 연결 시 내부적으로 알맞는 slot을 가지는 인스턴스로 redirect
      • 각 Master인스턴스 별로 2개의 Slave인스턴스 구성
  • Fault Tolerance
    • 4 Masters, 8 Slaves 로 구성
    • Cluster내에 Master의 수가 2개 이하인 경우 failover 불가능(redis의 구성정책인 듯)
    • Master에 문제가 생겨 서비스가 불가한 경우 Slave중 하나를 Master로 승격
  • 단일 연결포인트
    • Master가 바뀌는 경우 Client에서 새로운 Master를 찾아야 하는 문제 발생
    • HAProxy를 이용해 Master와 Slave를 별도 포트로 서비스
    • Client에서는 항상 HAProxy의 포트로 Master와 Slave 구분가능
    • HAProxy도 단일 연결포인트가 되니 다수의 HAProxy를 L4로 연결(이 부분은 실제 구현하지 않고 안만 제시)

ReDiS와 HAProxy에 대한 간단한 개념을 먼저 정리해 봤다
이 후 ReDiS Cluster를 어떻게 구성하는지와 HAProxy를 어떻게 연동하는지 차례로 진행 할 예정


Posted by crane76
,