Master-slave Architecture
일반적으로 master는 read/write이다. secondary는 read만 가능하다.
secondary node가 죽엇을경우 동작 테스트
cd redis/replica-multi-node
docker-compose up -d
# main
docker run -it --rm bitnami/redis:7.2 redis-cli -h host.docker.internal -p 6379
# secondary-1
docker run -it --rm bitnami/redis:7.2 redis-cli -h host.docker.internal -p 6380
# secondary-2
docker run -it --rm bitnami/redis:7.2 redis-cli -h host.docker.internal -p 6381

모든 클러스터가 값을 가지고 있다
이제 secondary-1을 죽이자
docker-compose stop redis-secondary-1

secondary-1이 연결이 안된다.
다시 올려보자.
docker-compose start redis-secondary-1


부팅 되면서 데이터를 전부 다 가져온걸 알수 있다.
secondary에 write를 해보자.
write 를 할수 없다.

secondary를 모두 죽인후 다시 살리면 어떻게 될가?
메인에서 다 가져오기 때문에 문제없이 잘 된다.
main이 죽으면 어떻게 될가?
일단 다음 커맨드를 실행해보자.
role

이제 main을 죽이자.
docker-compose stop redis-main
다시 redis cli에서 확인해보자.
role

main은 없어지고 secondary는 계속 slave이다.
이제 secondary-1을 main으로 만들자.
# redis-cli
SLAVEOF NO ONE

이제 secondary-1이 main이 되었다.
secondary-2를 main에 붙여주자.
# redis-cli
SLAVEOF redis-secondary-1 6379
결과를 보자.

이제 secondary-2가 secondary-1에 붙었다.
이제 main을 다시 살려보자. 그리고 설정을 바꿔주자.
docker-compose start redis-main
SLAVEOF redis-secondary-1 6379

이제 main이 secondary-1에 붙었다.
test값을 가져오는지 보자.

잘 가져온다. 복구 성공
Last updated
Was this helpful?