복제
- 네트워크 상의 여러 장비에 동일한 데이터 복사본들을 유지하는 것
- 사용자와 실제 데이터가 지리적으로 인접하여 지연시간 단축
- 고가용성 확보
- 여러 장비로 읽기 질의 처리량 증가
- 이번 장에서는 각 장비에 전체 데이터셋의 복사본을 보유할 수 있을 정도로 작은 데이터셋을 사용한다고 가정
- 복제에서의 어려움은 “복제된 데이터의 변경 처리”
- 노드 간 변경을 복제하기 위해 single leader, multi leader, leaderless 3가지 복제 방법이 분산 시스템 상에서 쓰임
- 복제 trade off
리더와 팔로워
- Replica
- 데이터베이스의 복사본을 저장하는 각 노드
- 여러 replica를 사용할 때, 모든 replica에 모든 데이터(각 replica들에게 전부 동일한 데이터)가 있다는 것을 어떻게 보장?
- 모든 쓰기 작업은 모든 replica에서 처리되어야 함
- 이를 위해 일반적으로 leader based replication이 사용됨
- Leader based replication
- replica 들 중 하나를 leader(or master, primary)로 지정
- leader외에 다른 replica들은 follower (or slave)들로 지정
- 쓰기 작업
- 클라이언트는 쓰기 작업 요청을 leader한테 보내야 함
- leader는 요청 받은 쓰기 작업대로, 새로운 데이터를 로컬 저장소에 기록
- leader가 새로운 데이터를 기록할 때마다 데이터 변경을 replication log / change stream의 일부로 follower에게 전송
- follower들은 전송받은 로그를 토대로, 리더가 처리한 작업 순서와 동일하게 쓰기를 적용하여 로컬 복사본을 갱신
- 읽기 작업
- 클라이언트는 leader 혹은 follower 에게 읽기 질의 요청 가능
- 하지만, 앞서 살펴본 쓰기 작업은 leader에게만 요청 가능
- 즉, follower는 클라이언트 관점에서 읽기 전용 replica
- PostgreSQL, MySQL 등 관계형 데이터베이스, MongoDB 등 일부 비관계형 데이터베이스, Kafka, RabbitMQ 등 분산 메시지 브로커 등에서 사용
동기식 vs 비동기식 복제
- 그림에서 팔로워1의 복제는 동기식
- 리더가 팔로워1이 쓰기 작업을 수신했는지 확인할 때까지 (응답을) 대기
- 그림에서 팔로워2의 복제는 비동기식
- 리더는 팔로워2의 응답을 대기하지 않음
- 그림 상에서 데이터 변경을 처리할때 까지 지연 시간이 길다. 아래와 같은 원인이 있을 수 있음
- 장애 복구 중
- 가용량이 최대에 도달하여 문제 발생
- 동기식 복제
- 장점: follower와 leader 간 일관성있는 최신 데이터 복사 보장
- 단점: 동기 방식이므로, 어떤 follwer가 죽는 등 문제가 발생하면, 쓰기 작업이 처리 불가
- leader가 모든 쓰기를 차단하고, 죽은 follwer가 다시 가용할 때까지 대기
- ⇒ 한 노드의 장애가 전체 시스템을 멈춤
- 치명적인 단점 때문에, 모든 follower가 동기 방식으로 복제한다는 것은 사실상 비현실적
- 이를 극복하기 위해 반동기식 방법이 존재
- follower 하나 정도만 동기식으로 동작하고, 나머지 follower들은 모두 비동기식으로 동작
- 동기식 follower가 죽으면, 비동기식 follower들 중 하나를 동기식 follower로 변경
- ⇒ 적어도 leader + 동기 follower에게는 일관성있는 최신 데이터 복사가 이루어지고 있다는 것을 보장
- 비동기식 복제
- 일반적으로 Leader based replication을 구성하는 방법
- 단점: leader가 잘못되어 복구할 수 없다면, follower에 아직 복제되지 않은 쓰기가 유실됨
- 동기식과는 달리, 비동기식에서는, 일관성있는 최신 데이터를 가지고 있다고 보장된 replica는 오직 leader뿐이므로
- ⇒ 쓰기 작업에 대한 지속성이 보장안됨
- ⇒ 내구성 약화
- 장점: 동기식과는 달리, 모든 follower가 잘못되더라고, leader가 살아있다면, 쓰기 처리를 계속할 수 있음.
- 즉, leader의 failure가 시스템에 주는 영향이 매우 크다