Redis 복제(Replication)의 기본적인 특성을 알아본다. 이후 이를 통해 어떻게 고가용성 확보와 페일오버(failover, 장애 극복) 기능을 가지는지 알아볼 수 있다.
기본적으로 리더 팔로워(leader follower)라는 마스터 개체를 완전히 똑같이 복제하는 마스터 레플리카(master-replica)를 허용한다.
이 시스템은 다음 세 가지 주요 메커니즘으로 작동한다.
- 마스터와 레플리카 개체가 잘 연결된 상태라면, 마스터는 가지고 있는 데이터셋의 변경점들을 레플리카에 명령어들을 통해 계속 업데이트시켜준다.
- 네트워크 이슈가 있거나 마스터 또는 레플리카의 연결 타임아웃이 발생해 마스터와 레플리카의 연결이 끊긴다면, 레플리카는 재연결을 하여 부분 재동기화를 시도한다. 그 말인즉슨, 연결이 끊긴 동안 들어왔던 명령어들을 가져오기를 시도한다.
- 만약 부분 재동기화가 불가능하다면, 레플리카는 전체 재동기화를 요청한다. 이 작업은 더 복잡해지는데 마스터가 모든 데이터에 대한 스냅샷을 만들어 레플리카에 보내고 나서 데이터 변경점들에 대한 명령어들을 보내게 된다.
Redis replication의 몇 가지 중요한 사실:
- 복제는 비동기로 작동한다(by default).
- 마스터는 여러 개의 레플리카를 가질 수 있다.
- 레플리카는 다른 레플리카의 연결을 승인할 수 있다.
- 마스터 사이드에서 복제는 논 블로킹 처리한다. 즉, 하나 이상의 레플리카가 초기 동기화 또는 부분 재동기화를 수행할 때 마스터가 쿼리를 계속 처리한다.
- 레플리카 사이드에서도 대부분 논 블로킹 처리한다. 레플리카가 초기 동기화를 수행하는 동안 이전 버전의 데이터셋을 이용해 쿼리를 처리한다.
- 복제는 확장성을 위해, 느린 작업(O(N)) 처리를 위해 읽기 전용(read-only) 쿼리를 위한 여러 개의 레플리카를 가지기 위해 또는 단순히 데이터 안전 및 고가용성을 개선하기 위해 사용될 수 있다.
- 마스터가 전체 데이터셋을 디스크에 쓰는 비용을 줄이기 위해 복제를 사용할 수 있다.
References
[1] Redis replication. Redis. (n.d.). Retrieved July 7, 2022, from https://redis.io/docs/manual/replication/