Redis Sentinel을 사용하면 Redis 클러스터의 가용성을 높이고 장애 발생 시 자동으로 복구되는 환경을 구축할 수 있습니다. 이 문서에서는 Docker Compose를 이용해 Redis Sentinel 기반의 장애 대응 시스템을 구축하는 과정을 설명합니다.
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
Redis Sentinel의 설정은 sentinel.conf
파일에서 관리됩니다. 이 파일을 통해 Redis Master 및 Slave 인스턴스를 모니터링하고, 장애 발생 시 자동으로 장애 조치(Failover)를 수행합니다.
mymaster
: 모니터링할 Redis Master에 대한 논리적인 이름입니다. Sentinel 설정 내에서 Master를 구분하는 데 사용됩니다.127.0.0.1
: Redis Master 인스턴스의 IP 주소입니다. 현재는 localhost
를 의미하는 127.0.0.1을 사용하고 있습니다.6379
: Redis Master 인스턴스가 사용하는 포트 번호입니다.2
: 최소 몇 개의 Sentinel 노드가 장애를 확인하고 동의해야 장애 조치(Failover)를 수행할지 정의하는 값입니다. 즉, 두 개 이상의 Sentinel 노드가 장애를 감지해야 장애 조치가 시작됩니다.로컬 환경에서 연결 과정에서 순차적 에러가 발생하였다.