[DB] 레플리케이션 복제 아키텍처

이열음·2022년 12월 6일
0

복제 아키텍처

Mysql 서버에서 발생하는 변경사항(데이터, 데이터베이스 구조변경, 계정 권한변경 == 이벤트) 은 바이너리 로그 파일에 기록된다. 이때 바이너리 로그파일은 변경내역을 저장하는 파일이다. 이 바이너리 로그파일을 레플리카한테 보내서 릴레이로그라는 로컬디스크에 저장해두고 데이터에 반영시킨다.

동작 방식

  • 트랜잭션 스레드가 데이터처리
  • 레플리카 서버가 데이터 동기화를 위해 소스서버에 접속해서 바이너리 로그 보내달라함
  • 바이너리 로그 덤프 스레드 생성
  • 이벤트를 하나씩 락걸고 읽어서 레플리케이션 I/O 스레드한테 보내줌
  • 레플리케이션 I/O 스레드는 바이너리 로그 덤프 스레드가 보내준 이벤트를 릴레이로그에 저장
    • 상태는 SHOW REPLICA STATUS 로 볼 수 있음.
  • SQL 스레드는 가져온 바이너리 로그를 레플리카 DB에 씀.(이때 I/O 스레드랑은 별개)

복제를 위한 정보

  • 릴레이로그
  • 커넥션 메타데이터
    • 레플리케이션 I/O 스레드에서 소스서버에 연결할 때 사용하는 DB 커넥션 정보를 담고있다
    • FILE, TABLE 기본값은 테이블
  • 어플라이어 메타데이터
    • SQL스레드에서 이벤트들 적용하는 컴포넌트 == 어플라이어
    • 어플라이어가 최근 적용한 이벤트가 어디 저장되어있는지 릴레이로그 파일명, 파일내 위치정보
    • 이거 보고 어디까지 했는지 본다음에 다음 이벤트들 적용한다
    • FILE, TABLE 기본값은 테이블

기본값이 테이블인 이유?

레플리케이션 IO스레드랑 SQl스레드가 동작할때 동기화되지 않는 경우가 발생하기 때문이다.

  • 레플리카서버가 비정상 종료되는 경우엔 바이너리로그위치와 파일저장위치가 일치하지 않을 수 있다
  • 파일이 손상되는 경우도 있다

테이블이면 뭐가 좋은지?

테이블로 설정하면 InnoDB 설정으로 관리한다.

SQL 스레드가 트랜잭션 적용할때 slave relay log info 테이블도 아토믹하게 업데이트한다.

→ 크레시 세이프 복제

0개의 댓글