Database/Mysql

[Real MySQL] 16-1. 복제

noahkim_ 2024. 9. 7. 18:23

"Real MySQL" 책을 정리한 포스팅 입니다

 

1. 복제

  • 한 서버에서 다른 서버로 동기화되는 것

 

Source Server
  • 원본 데이터를 가진 서버
  • 변경이 최초로 이루어짐 (데이터 및 스키마)

 

Replica Server
  • 복제된 데이터를 가진 서버
  • 소스 서버 동기화:소스 서버로부터 데이터를 전달받아 자신의 리포지토리에 반영

 

목적

scale-out
  • 트래픽 대응 목적
  • scale-up보다 훨씬 더 유연한 구조

 

backup
  • 데이터 정합성이 깨질 경우 (개발자 실수 or 공격 등)
    • 백업 서버의 데이터로 사용함
  • 메인 서버가 터질 경우
    • 지리적으로 분산된 백업 서버가 메인 서버의 역할을 대신함

 

데이터 분석용
  • 백업 서버에서 대신 담당하여 최적화
  • 데이터 분석은 리소스 소모가 큰 연산
  • 메인 서버로 데이터를 분석할 경우 클라이언트 요청 처리에 영향을 미침

 

2. 아키텍쳐

Source Server

Binary Log
  • event: 각 변경 정보
  • 모든 event 저장 (데이터, 테이블, 권한, 계정 등)
  • binary log 파일을 기반으로 복제가 이루어짐
    • source server: 생성된 binary log를 replica server로 전송
    • replica server: 저장 (로컬 디스크에 저장)
    • replica server: 동기화 (리포지토리에 반영)

 

Binary Log Dump Thread
  • Replica Server에 binary log를 전송하는 역할
  • Replica Server에 보낼 binary log의 event를 읽음 (잠금 수행) + 전송

 

Replica Server

Relay Log
  • Source Server로부터 받은 Binary Log

 

Connection Metadata
  • I/O Thread에서 Source Server에 연결할 때의 정보
    • 사용한 계정 정보
    • 수신받은 binary log 파일명
    • 수신받은 binary log 파일 위치 값
  • table: mysql.slave_master_info

 

Applier Metadata
  • Applier: relay log를 repository에 반영하는 컴포넌트
  • 최근 Apply된 정보
    • relay log 명
    • relay log 파일 위치 정보
  • table: mysql.slave_relay_log_info

 

I/O Thread
  • Binary Log를 Disk에 저장
    • Source Server에 접속
    • Binary Log 요청 (to Binary Log Dump Thread)
    • Binary Log 수신
    • Relay Log에 기록
  • 복제가 시작되면 생성 / 멈추면 종료

 

SQL Thread
  • Relay Log를 읽고 실행