복제지연

복제지연은 원본 MySql 인스턴스에서 쓰기가 발생하는 시간과, 해당 쓰기가 replica 인스턴스에 적용되는 시간 사이의 지연을 의미한다.

MySQL의 복제

Source To Replica

기본적인 복제 유형이며, source MySQL → replica MySQL로 복제되는 유형을 의미한다.

원본 인스턴스는 클라이언트가 데이터를 직접 쓰는 서버를 의미한다.

복제 인스턴스는 원본에서 데이터 변경사항을 복제하는 모든 MySQL 서버를 의미한다.

복제본은 split-brain을 방지하기 위해 항상 읽기 전용으로 구성되어야 한다.

원본에서 복제본으로의 데이터 변경 흐름은 다음과 같다.

  1. 트랜잭션 커밋중에 데이터 변경사항은 바이너리 로그에 기록된다.
  2. 복제본의 I/O스레드는 원본 바이너리로그에서 이벤트 로그를 덤프한다.
  3. 복제본의 I/O스레드는 복제본의 릴레이로그에 바이너리 로그 이벤트를 기록한다.
    1. 릴레이로그는 원본 바이너리 로그 이벤트들을 replica instance의 로컬에 복사한 디스크파일
  4. SQL 스레드는 릴레이로그에서 바이너리 로그 이벤트를 읽는다.
  5. SQL 스레드는 바이너리 로그 이벤트를 replica data에 반영한다.
  6. 복제본은 데이터 변경사항을 바이너리 로그에 기록한다.

MySQL의 복제는 비동기로 동작한다. 원본의 트랜잭션이 커밋되고 나면(1번단계) 나머지 작업은 모두 비동기로 동작한다.