ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Redis] 레디스의 개념 및 특성 (1)
    SQL 2023. 1. 31. 16:39

    (한국어 버전으로 제공되는 redisgate.kr 참고)

     

    redis 란?

    : 데이터를 메모리에 저장하는 캐시 시스템 (인메모리 데이터베이스) - 빠름

    : 자료구조 지원 (key - value 타입의 저장소)

    : 장애 방지를 위한 영속성 지원

    : 읽기 성능 증대를 위한 서버 측 복제 지원

    : 쓰기 성능 증대를 위한 클라이언트 측 샤딩 지원

    : 다양한 데이터형 지원 (문자열, 리스트, 해시, 셋, 스트림 등)

    고성능 key-value 방식의 데이터 저장소로서

    다양한 형식의 데이터를 지원하는 NoSQL

    Redis 의 영속성

    : 지속성을 보장하기 위하여 데이터를 disk 에 저장할 수 있음. 서버가 다운 되더라도 저장된 데이터를 읽어 메모리에 로딩하는 방식

    1. RDB (redis database backup)
    • 특정 시점마다 레디스 데이터 전체를 disk 에 저장 (snapshot 방식)
    • 서버가 다운 되면 rdb 파일을 통해 당시 snapshot 을 레디스에 적용
    • RDB 설정 : save (저장 주기), dbfilename (dump 파일명)
    • 매 순간 dump 하는 것이 아니기에 데이터 유실 가능성 有
    1. AOF (append on file)
    • 레디스 의 모든 write/ update 연산을 로그 파일(aof파일)에 기록
    • 서버가 다운 되면 AOF 파일의 명령어로 장애 복구
    • AOF Rewrite 기능 지원
      • 명령어를 계속 저장하면 파일 크기가 무한대로 커짐
      • rewrite 기능을 통해 데이터를 다시 쓰고 최종 상태 저장
    • AOF 파일은 텍스트 파일이므로 명령어 조작하여 레디스 변경이 가능
      • ex) 실수로 FlushAll 명령어 실행 후 AOF 파일에서 해당 명령어 지우면 복구가 가능하다
    • RDB 처럼 데이터가 유실될 일은 없으나 지금까지 수행한 write/update 작업을 다시 수행해야 함

    센티넬 (sentinel)

    일반적으로 레디스는 운영환경에서 마스터, 복제로 구성 (master, slave)

    if 마스터 장애 상황 → 관리자가 감지 후 복제를 마스터로 승격시키고 클라이언트들이 새로운 마스터에 접속하도록 조치 필요

    센티넬은 이 과정을 관리자의 개입없이 도와줌 (마스터와 복제를 감시하다가 마스터가 다운되면 감지 후 자동으로 복제를 마스터로 승격 시켜줌)

    • 센티넬 기능
      • Monitoring : 지속적으로 마스터와, 복제를 모니터링
      • Automatic Failover (자동 장애조치) : 마스터에 문제가 생겼을 때 복제를 마스터로 승격시켜 복구. 복제가 여러대일 경우 이 복제들이 새로운 마스터로부터 데이터를 받을 수 있도록 재구성하고 마스터가 restart 되면 복제로 전환되어 새로운 마스터를 바라보게 함
      • Notification : 레디스 인스턴스가 failover 되었을 때 pub/sub 으로 client (application) 에게 알리거나 관리자에게 email/sms 전송
    • 센티넬 구성 설정 : sentinel.conf
      • 포트 default : 26379

    실습 참고 http://redisgate.kr/redis/sentinel/sentinel.php

    Cluster (클러스터)

    • 목표 : 1000대의 노드까지 확장 가능하도록 설계됨
    • 노드 추가,삭제 시 운영 중단 필요 없이, hash slot 을 다른 노드로 이동 가능
    • 마스터, 복제(슬레이브)가 각 1:N 관계로 클러스터 구성 (마스터는 3대 이상 필요)
    • 키를 hash function (CRC16 function) 을 적용해 노드별로 슬럿 정보를 나눔 (레디스 클러스터는 16384개의 슬롯 사용)

    각 노드에 슬롯 정보를 나눠서 할당

    ex) 마스터가 3개 일 때 0~5460, 5461~10922, 10923~16383 슬롯 가짐

    • 레디스 서버는 마스터 혹은 슬레이브(복제), 한 마스터가 다운 시 다른 마스터들이 failover (장애조치) 진행하므로 레디스 클러스터에서는 별도의 센티널이 필요하지 않음

     

     

     

    'SQL' 카테고리의 다른 글

    [Mysql] Database LOCK  (0) 2023.01.03
    [Postgres] 계층형 쿼리 구현 예시  (0) 2021.05.24
    [SQL] case when WHERE 절에 적용 예시(if/else)  (0) 2021.04.06
Designed by Tistory.