포스트

데이터베이스 리플리케이션 기본 정리

리플리케이션이란

리플리케이션은 한 데이터베이스의 변경 사항을 다른 데이터베이스로 복제하는 구조다. 보통 primary가 쓰기를 받고, replica가 이를 따라가는 형태를 많이 사용한다.


왜 쓰는가

  • 읽기 부하 분산
  • 장애 대응
  • 백업/분석 분리
  • 지역 분산 아키텍처의 기반

가장 먼저 알아야 할 점

리플리케이션은 “복사본이 있다”는 뜻이지, 항상 완벽히 동일 시점이라는 뜻은 아니다. MySQL 매뉴얼은 “Replication is asynchronous by default”라고 적는다(기본 복제는 비동기다). 그래서 대부분의 구조에서는 복제 지연(replication lag)을 고려해야 한다.


primary-replica 구조의 특징

  • 쓰기는 primary
  • 읽기는 replica로 분산 가능
  • 장애 시 승격(failover) 절차 필요

이 구조는 단순하지만, 쓰기 직후 읽기에서 그 쓰기가 보이는지 같은 문제를 반드시 고려해야 한다.


자주 나오는 문제

복제 지연

방금 쓴 데이터를 replica에서 바로 읽으면 아직 반영되지 않았을 수 있다. 아래는 커밋과 replica 반영 사이의 틈을 그린 것이다.

sequenceDiagram
    participant App
    participant P as primary
    participant R as replica
    App->>P: 쓰기 후 commit
    P-->>App: 커밋 완료
    App->>R: 바로 읽기
    R-->>App: 아직 이전 값
    P-)R: 변경 복제 (replication lag 이후)

읽기 일관성

어떤 요청은 primary에서, 어떤 요청은 replica에서 읽으면 같은 사용자 경험 안에서도 데이터가 다르게 보일 수 있다(일관성 모델).

장애 전환

primary 장애 시 replica 승격이 필요하고, 이 과정에서 split-brain(두 노드가 동시에 primary로 동작하는 상태)이나 데이터 유실 가능성을 조심해야 한다.


실무에서 자주 쓰는 대응

  • 중요한 읽기는 primary로 강제 (사례)
  • 쓰기 직후 읽기(read-after-write) 구간은 세션 단위로 primary stickiness 적용
  • lag 모니터링
  • 복제 구조와 장애 전환 절차를 문서화

정리

리플리케이션은 읽기 확장과 가용성에 큰 도움이 되지만, 결국 “동기화 지연이 있는 복제본”이라는 사실을 항상 의식해야 한다. 그래서 설계에서 먼저 정할 것은 복제 방식 자체보다, 어떤 읽기는 replica를 믿고 어떤 읽기는 primary로 보낼지다.

참고한 자료외부 출처 1

외부 출처

데이터베이스 내부와 트랜잭션
이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다