목적

Redis Sentinel을 사용하면 Redis 클러스터의 가용성을 높이고 장애 발생 시 자동으로 복구되는 환경을 구축할 수 있습니다. 이 문서에서는 Docker Compose를 이용해 Redis Sentinel 기반의 장애 대응 시스템을 구축하는 과정을 설명합니다.

전체 프로세스 개요

  1. Docker Compose 작성
  2. Sentinel 설정 파일 작성(sentine.conf)
  3. 트러블 슈팅
  4. Spring Application 연결

Docker Compose 작성

  redis-master:
    image: 'bitnami/redis:latest'
    container_name: redis-master
    user: root
    command: redis-server --appendonly yes --protected-mode no
    environment:
      - REDIS_REPLICATION_MODE=master
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - "6379:6379"
    networks:
      - redis_network
    volumes:
      - ./redis_data/master:/data

  redis-slave1:
    image: 'bitnami/redis:latest'
    container_name: redis-slave1
    user: root
    command: redis-server --replicaof redis-master 6379 --appendonly yes --protected-mode no
    environment:
      - REDIS_MASTER_HOST=redis-master
      - REDIS_REPLICATION_MODE=slave
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - "6380:6379"
    depends_on:
      - redis-master
    networks:
      - redis_network
    volumes:
      - ./redis_data/slave1:/data

  redis-slave2:
    image: 'bitnami/redis:latest'
    container_name: redis-slave2
    user: root
    command: redis-server --replicaof redis-master 6379 --appendonly yes --protected-mode no
    environment:
      - REDIS_MASTER_HOST=redis-master
      - REDIS_REPLICATION_MODE=slave
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - "6381:6379"
    depends_on:
      - redis-master
    networks:
      - redis_network
    volumes:
      - ./redis_data/slave2:/data

  redis-sentinel1:
    image: 'bitnami/redis-sentinel:latest'
    container_name: redis-sentinel1
    user: root
    volumes:
      - ./redis_sentinel:/etc/redis
    command: redis-sentinel /etc/redis/sentinel1.conf
    ports:
      - "26379:26379"
    depends_on:
      - redis-master
      - redis-slave1
      - redis-slave2
    networks:
      - redis_network

  redis-sentinel2:
    image: 'bitnami/redis-sentinel:latest'
    container_name: redis-sentinel2
    user: root
    volumes:
      - ./redis_sentinel:/etc/redis
    command: redis-sentinel /etc/redis/sentinel2.conf
    ports:
      - "26380:26379"
    depends_on:
      - redis-master
      - redis-slave1
      - redis-slave2
    networks:
      - redis_network

  redis-sentinel3:
    image: 'bitnami/redis-sentinel:latest'
    container_name: redis-sentinel3
    user: root
    volumes:
      - ./redis_sentinel:/etc/redis
    command: redis-sentinel /etc/redis/sentinel3.conf

    ports:
      - "26381:26379"
    depends_on:
      - redis-master
      - redis-slave1
      - redis-slave2
    networks:
      - redis_network

Sentinel 설정 파일 작성(sentine.conf)

Redis Sentinel의 설정은 sentinel.conf 파일에서 관리됩니다. 이 파일을 통해 Redis Master 및 Slave 인스턴스를 모니터링하고, 장애 발생 시 자동으로 장애 조치(Failover)를 수행합니다.

image.png

image.png

트러블 슈팅

문제상황

로컬 환경에서 연결 과정에서 순차적 에러가 발생하였다.