Replication
redis replication은 master instances를 그대로 복제한 redis instance
- 지속적으로 master와 연결을 유지하고, master로부터 데이터를 복제
redis replication은 다음과 같은 주요 메카니즘을 가진다.
- master와 제대로 연결이 되어 있는 경우에는 master가 주기적으로 replication에 command stream을 전달
- 해당 값을 기준으로 replication은 master와 데이터 동기화를 지속적으로 수행
- master와 replica 간에 연결이 끊긴 경우, replica에서 재연결을 반복적으로 시도
- 재연결이 되었을 때, 연결이 끊긴 동안 처리하지 못 한 command들을 획득할 수 있다면 해당 부분을 처리 : partial resynchronization
- partial resynchronization이 불가능한 경우에는 full resynchronization을 진행
- master instance에서 모든 데이터의 snapshot을 생성해야 한다.
redis는 기본적으로 asynchronous replication
- client가 master A에 write
- master A는 write을 수행 후 client에 OK를 반환
- master A가 replica에게 write commend를 전달
→ master A가 client에게 OK를 보낸 후, master A에 장애가 발생해 replica1이 master로 승격된 경우, 데이터 정합성에 문제가 생길 수 있다.
→ synchronous replication을 수행한다고 해서 위 문제가 완전히 해결되는 것은 아니지만 확률을 많이 낮출 수 있다.
important facts about redis replication
- redis는 asynchronous replication이다.
- redis replication은 master node를 non-blocking
- replication에서 initial synchronization이 발생해도 master instance는 다른 요청을 처리할 수 있다.
- redis replication에서도 initial synchronization을 수행하고 있어도 이전 버전의 데이터셋을 기반으로 요청을 처리할 수 있다.
- replication은 여러 read-only instance로 활용해 scalability를 증가시킬 수도 있고, 단순히 data safety 및 high availability를 보장하는 용도로 사용할 수 있다.
- master instance가 성능 상의 이슈로 데이터를 disk에 저장하는 것을 하고 싶지 않은 경우 replication을 사용할 수도 있다.
- 하지만 이때 master instance가 재시작되는 것을 주의
- master instance가 재시작되면 모든 데이터가 지워진 채로 restart되고 이를 replication이 동기화하면서 데이터 유실이 발생할 수 있다.
- persistence off와 restarting automatically를 같이 사용 X
'Redis(레디스)' 카테고리의 다른 글
| Redis Sentinel (1) | 2023.12.10 |
|---|---|
| Redis client-side caching (1) | 2023.12.10 |
| Redis pipelining (0) | 2023.12.10 |
| Redis pub/sub & redis stream과의 차이점 (1) | 2023.12.10 |
| Redis Transaction (1) | 2023.12.10 |