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
alt text

모든 클러스터가 값을 가지고 있다

이제 secondary-1을 죽이자

docker-compose stop redis-secondary-1
alt text

secondary-1이 연결이 안된다.

다시 올려보자.

docker-compose start redis-secondary-1
alt text
alt text

부팅 되면서 데이터를 전부 다 가져온걸 알수 있다.

secondary에 write를 해보자.

write 를 할수 없다.

alt text

secondary를 모두 죽인후 다시 살리면 어떻게 될가?

메인에서 다 가져오기 때문에 문제없이 잘 된다.

main이 죽으면 어떻게 될가?

일단 다음 커맨드를 실행해보자.

role
alt text

이제 main을 죽이자.

docker-compose stop redis-main

다시 redis cli에서 확인해보자.

role
alt text

main은 없어지고 secondary는 계속 slave이다.

이제 secondary-1을 main으로 만들자.

# redis-cli
SLAVEOF NO ONE
alt text

이제 secondary-1이 main이 되었다.

secondary-2를 main에 붙여주자.

# redis-cli
SLAVEOF redis-secondary-1 6379

결과를 보자.

alt text

이제 secondary-2가 secondary-1에 붙었다.

이제 main을 다시 살려보자. 그리고 설정을 바꿔주자.

docker-compose start redis-main

SLAVEOF redis-secondary-1 6379
alt text

이제 main이 secondary-1에 붙었다.

test값을 가져오는지 보자.

alt text

잘 가져온다. 복구 성공

Last updated

Was this helpful?