-
[Redis] Sentinel을 이용한 자동 장애조치DataBase/NoSQL 2023. 2. 19. 16:30
1. master-replica-sentinel 구성을 위해 아래와 같이 docker-compose.yml 파일을 작성한다.
2. docker-compose yml파일을 build한다.
3. master, replica, sentinel 3대가 떠 있는 것을 확인한다.
4. sentinel1의 컨테이너에서 redis에 진입해서 바라보고 있는 master의 정보를 확인한다.
$ info sentinel
다른 prompt에서 master의 ip주소를 확인한다.
$ docker inspect redis-master
sentinel1에서 조회한 master의 ip가 실제 master ip와 일치하는 것을 확인할 수 있다.
5. master를 stop한다.
sentinel1, sentinel2, sentinel3가 모두 sdown을 선언했다.
6. quorum을 3/2로 만족해 odown이 선언되고 master가 172.18.0.2에서 172.18.0.3으로 전환되었다.
172.18.0.3의 주인은 replica다.
7. replica가 master 모드로 전환되었음을 확인한다.
8. sentinel들이 기존 master를 찾지 못 해 계속해서 로깅을 하고 있다.
9. sentinel1로 들어가본다. sentinel1의 master ip 주소가 172.18.0.3으로 바뀌었다. 바로 replica의 주소다.
10. 다시 기존의 master를 구동시킨다.
$ docker start redis-master
11. 기존 master가 다시 들어왔어도 redis-master는 replica로 유지되고 있다.
12. sentinel1로 들어가서 master ip를 확인해봐도 여전히 replica가 master의 역할을 수행하고 있다.
13. master의 컨테이너에 들어가서 set을 해본다. 이런! slave로 바뀐 redis-master는 set을 할 수 없다.
14. Spring Boot를 이용한다면 client는 sentinel에만 붙으면 된다. 아래와 같이 application.yml 파일만 작성하면 master와 replica로의 접근은 spring boot가 알아서 해준다.
※ fast campus의 "백엔드 개발자를 위한 한 번에 끝내는 대용량 데이터 & 트래픽 처리 초격차 패키지"를 수강하고 정리한 글입니다.
'DataBase > NoSQL' 카테고리의 다른 글
[Redis] 백업을 통한 데이터 영속화 (0) 2023.03.12 [Redis] 서비스 고가용성을 위한 Replica (0) 2023.02.19