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의 주소를 얻어내야 함
실행
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
sentinel1에 접속하여 sentinel1의 상태 확인

(172.20.0.2:63790는 master 노드의 ip이다)
master node 실행 중단 시키기
docker stop redis-master
변경된 master 노드 확인


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