Database/Mysql
[Real MySQL] 16-1. 복제: 아키텍처
noahkim_
2024. 9. 7. 18:23
백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.
- 데이터베이스를 운영할 때, 가장 필요한 두가지는 확장성과 가용성
- 복제는 이 두요소를 위해 사용되는 기술
1. 복제
- 한 서버에서 다른 서버로 동기화되는 것
Source Server
- 원본 데이터를 가진 서버
- 변경이 최초로 이루어짐 (데이터 및 스키마)
Replica Server
- 소스 서버로부터 변경 내역을 전달받는 서버
- 소스 서버 동기화
- 소스 서버로부터 데이터를 전달받아 자신의 리포지토리에 반영
목적
scale-out
- 트래픽 대응 목적
- scale-up보다 훨씬 더 유연한 구조
backup
- 데이터 정합성이 깨질 경우
- 백업 서버의 데이터로 사용함
- 메인 서버가 터질 경우
- 지리적으로 분산된 백업 서버가 메인 서버의 역할을 대신함
데이터 분석용
- 데이터 분석은 리소스 소모가 큰 연산
- 백업 서버에서 대신 담당하여 최적화
- 메인 서버로 데이터를 분석할 경우 클라이언트 요청 처리에 영향을 미침
2. 아키텍쳐
Source Server
Binary Log Dump Thread
- Replica Server에 binary log를 전송하는 역할
- Replica Server에 보낼 binary log의 event를 읽음
- 읽는 과정에서 binary log의 읽기 잠금이 걸림
Binary Log
- 모든 event 저장 (데이터, 테이블, 권한, 계정 등)
- 복제에 사용됨
- 트랜잭션 처리 스레드에 의해 기록됨
Replica Server
Replication I/O Thread
- Binary Log를 Disk에 저장
- Binary Log Dump Thread로부터 바이너리 로그 이벤트를 가져옴
- Relay Log에 기록
- 복제가 시작되면 생성
- START REPLICA or START SLAVE
- 복제가 멈추면 종료
- STOP REPLICA or STOP SLAVE
Replication SQL Thread
- Relay Log를 읽고 실행
- 상태 확인
- "SHOW REPLICA STATUS" 명령어
Relay Log
- Source Server로부터 받은 Binary Log
- 이벤트 정보가 저장됨
Connection Metadata
- I/O Thread에서 Source Server에 연결할 때의 DB 정보
- 사용한 계정 정보
- 수신받은 binary log 파일명
- 수신받은 binary log 파일 위치 값
- table
- mysql.slave_master_info
Applier Metadata
- relay log를 repository에 반영하는 컴포넌트
- 최근 Apply된 정보
- relay log 명
- relay log 파일 위치 정보
- table
- mysql.slave_relay_log_info
3. 과정
- source server: 생성된 binary log가 replica server로 전송됨
- replica server: 저장 (로컬 디스크에 저장)
- replica server: 동기화 (리포지토리에 반영)