[Redis] Redis Sentinel

기훈·2024년 4월 14일

Redis

목록 보기
7/12

Redis Sentinel

  • Redis에서 고가용성을 위한 장치

  • master-replica 구조에서 master가 다운 시 repilca를 master로 승격시키는 auto-failover를 수행

특징

  • 몽고디비 RepilcaSet처럼 홀수로 구성된다

  • SDOWN: Sentinel 1대가 down으로 판단(주관적)

  • ODWON: 각각의 Sentinel들의 투표를 통해 down으로 판단(객관적)

  • master 노드가 down된걸로 판단하기 위해서는 Sentinel 노드들이 정족수를(Quorum)을 충족해야 함 (Sentinel이 총3대라면 2대 이상이 down으로 판단해야 한다)

  • 클라이언트는 Sentinel을 통해 master의 주소를 얻어내야 함

실행

  1. Docker.yml에 정의해놓은 Sentinel구성 실행

    version: "3"
    services:
      my-redis-a:
        hostname: redis-master
        container_name: redis-master
        image: "bitnami/redis"
        environment:
          - REDIS_REPLICATION_MODE=master
          - ALLOW_EMPTY_PASSWORD=yes
        ports:
          - 5002:6379
      my-redis-b:
        hostname: redis-replicas-1
        container_name: redis-replicas-1
        image: "bitnami/redis"
        environment:
          - REDIS_REPLICATION_MODE=slave
          - REDIS_MASTER_HOST=redis-master
          - ALLOW_EMPTY_PASSWORD=yes
        ports:
          - 5001:6379
        depends_on:
          - my-redis-a
    
      redis-sentinel-1:
        container_name: sentinel1
        image: "bitnami/redis-sentinel:latest"
        environment:
          - REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=3000
          - REDIS_MASTER_HOST=redis-master
          - REDIS_MASTER_PORT_NUMBER=6379
          - REDIS_MASTER_SET=mymaster
          - REDIS_SENTINEL_QUORUM=2
        ports:
          - 26379:26379
        depends_on:
          - my-redis-a
          - my-redis-b
      redis-sentinel-2:
        container_name: sentinel2
        image: "bitnami/redis-sentinel:latest"
        environment:
          - REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=3000
          - REDIS_MASTER_HOST=redis-master
          - REDIS_MASTER_PORT_NUMBER=6379
          - REDIS_MASTER_SET=mymaster
          - REDIS_SENTINEL_QUORUM=2
        ports:
          - 26380:26379
        depends_on:
          - my-redis-a
          - my-redis-b
      redis-sentinel-3:
        container_name: sentinel3
        image: "bitnami/redis-sentinel:latest"
        environment:
          - REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=3000
          - REDIS_MASTER_HOST=redis-master
          - REDIS_MASTER_PORT_NUMBER=6379
          - REDIS_MASTER_SET=mymaster
          - REDIS_SENTINEL_QUORUM=2
        ports:
          - 26381:26379
        depends_on:
          - my-redis-a
          - my-redis-b
  1. sentinel1에 접속하여 sentinel1의 상태 확인

    (172.20.0.2:63790는 master 노드의 ip이다)

  2. master node 실행 중단 시키기

    docker stop redis-master
    
  3. 변경된 master 노드 확인

    Terminal의 내용을 보면 각각의 sentinel의 master 노드의 작동 중지를 감지하고 투표를 통해 새로운 master를 선출한다. 실제 info sentinel의 결과를 보면 master 노드의 ip가 이전과 다르다.

0개의 댓글