Database/Mysql

[Real MySQL] 16-5. 복제: 복제 토폴로지

noahkim_ 2024. 9. 7. 20:17

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.

 

1. 싱글 레플리카

  • 하나의 소스 서버에 하나의 레플리카 서버만 연결됨
  • 가장 기본적인 형태

 

데이터 분석용
예비용

 

2. 멀티 레플리카

  • 하나의 소스 서버에 2개 이상의 레플리카 서버를 연결
  • 싱글 레플리카를 사용하다가 트래픽이 많아질 경우 사용함

 

트래픽 대응
  • 클라이언트는 읽기 요청이 많으므로 읽기 요청 처리를 분산시키기

 

데이터 분석용
  • 클라이언트 요청이 아닌 용도(AI, 배치, 통계 등)의 전용으로 쓰는 방법

 

예비용 (1대 필수)
  • 예기치못한 예외로 인해 서버가 다운될 경우, 예비용이 대기하고 있어야 안정적으로 요청을 원활하게 처리할 수 있음
  • 소스 서버 or 레플리카 서버의 예비용으로 활용될 수 있음

 

3. 체인

사용 목적
  • 멀티 레플리카 복제 구성에서 레플리카 서버가 너무 많아 소스 서버의 성능에 악영향이 예상될 경우 사용
    • 소스 서버는 레플리카 서버가 요청할 때마다 계속 바이너리 로그를 읽어 전달해야 하기 때문
  • 서버를 업데이트 하거나 장비를 일괄 교체할 때 사용
    • 새로운 그룹에서 작업을 하고, 기존에 사용하던 주소를 새로운 서버들에 바라보게끔 변경

 

사용 방법
  • 소스 서버의 바이너리 로그 전달 역할을 담당하는 레플리카 서버 하나를 두기
    • 통계, 배치, 백업 용의 레플리카들의 소스 서버 역할을 담당함
  • 중간 계층에서 레플리카이자 소스 서버 역할을 하는 서버에서 바이너리 로그와 log_slave_updates 가 활성화되어야 함

 

4. 듀얼 소스

  • 두개의 서버가 서로 소스 서버이자 레플리카 서버로 구성돼 있는 형태
  • 두 서버 모두 쓰기가 가능함
  • 각 서버에서 변경된 데이터는 복제를 통해 동기화됨

 

ACTIVE-PASSIVE

  • 하나의 서버에서만 쓰기 작업이 수행되는 형태
  • 승격 시, 예비 서버가 바로 쓰기가 가능해야 할 경우에 사용됨
    • 예비 서버도 쓰기가 가능하기 때문에, 별도 설정 없이 승격이 가능함

 

ACTIVE-ACTIVE

  • 두 서버 모두에 쓰기 작업을 수행하는 형태
  • 지리적으로 매우 떨어진 위치에 유입되는 쓰기 요청도 원활하게 처리하기 위해 사용됨
  • 두 서버는 서로 일관되지 않은 데이터를 가질 수 있음
    • 양 서버에 복제가 적용되므로 동기화되지만
    • 물리적으로 떨어져있어 전달된 트랜잭션이 반영되기까지 시간이 걸릴 수 있음

 

주의사항
  • 동일한 데이터를 각 서버에서 변경할 경우
    • 동일한 데이터에 대해 각 서버에 동시점에 유입되는 경우, 시점 상 나중에 처리된 트랜잭션이 최종 처리됨
    • 이 경우, 예상치 못한 방향으로 데이터가 처리될 수 있음
    • 동일 데이터에 대해 각 서버에 잠금이 걸리지 않기 때문
  • 테이블에서 Auto-increment 키 사용
    • 동일 시점에 새로운 데이터가 유입될 경우, 같은 Auto_Increment 값을 가질 수 있음

 

5. 멀티 소스

  • 하나의 레플리카 서버가 둘 이상의 서버 소스를 갖는 형태

 

목적

  • 여러 MySQL에 존재하는 각기 다른 데이터를 한 서버로 통합
  • 여러 MySQL에 샤딩돼 있는 테이블 데이터를 하나의 테이블로 통합
  • 여러 MySQL의 데이터들을 모아 하나의 서버에서 백업을 수행

 

주의사항

  • 각 서버로부터 유입되는 변경 이벤트들이 레플리카 서버로 복제됐을 때 서로 충돌을 일으킬만한 부분이 없는지 검토 필요