정의
하나의 MySQL 서버(Master or Source)에서 발생한 데이터 변경사항을 하나 이상의 다른 MySQL 서버(Slave or Replica)로 복사하여 동기화하는 프로세스
Master 서버는 모든 쓰기 작업 (INSERT, UPDATE, DELETE 등)을 처리하고 Slave 서버는 Master로부터 변경된 데이터를 받아와 자신의 데이터베이스에 적용함으로써 Master와 동일한 데이터 상태를 유지
주요 이점
- 고 가용성(High Availabliity)
- Master 서버에 장애가 발생하더라도 Slave 서버 중 하나를 새로운 Master로 승격시켜 서비스 중단을 최소화 할 수 있음
- 확장성 (Scalablity)
- 읽기 부하 분산: Master 서버는 쓰기 작업을 전담하고 Slave 서버들은 읽기 작업을 분산처리함으로써 전체 시스템 처리량을 향상 시킬 수 있음
- 분석 및 보고 : Slave 서버는 Master 서버에 부하를 주지 않고 복잡한 쿼리, 데이터 분석, 보고서 생성등의 작업을 수행하는데 사용될 수 있음
- 데이터 백업
- Slave 서버는 Master 서버의 실시간 복사본이므로 Slave 서버에서 백업을 수행하면 Master 서버에 영향을 주지 않고 안정적으로 백업 확보 가능
- 데이터 이관/업그레이드
- 데이터를 이관하거나 MySQL 버전 엡그레이드 할 때 Slave를 먼저 업그레이드 하거나 마이그레이션한 후 역햘 전환을 통해 서비스 중단 시간을 최소화 할 수 있음
기본 원리
MySQL 이진 로그를 기반으로 동작
- Master 서버
- Master 서버에서 데이터 변경이 발생 → 이진 로그(모든 데이터 변경 이벤트 순차적 기록)에 기록
- Slave 서버가 ‘이진 로그를 요청하면 Master 서버는 로그 덤프 스레드(Log Dump Thread)를 시작해 이진로그를 전송
- Slave 서버
- Slave 서버는 Master 서버에 접속해 IO 스레드 시작
- IO스레드는 Master의 이진 로그 이벤트를 수신하여 Slave 서버의 릴레이 로그에 저장
- SQL 스레드는 릴레이 로그에 저장된 이벤트를 읽어와 Slave 서버의 데이터베이스에 순차적으로 적용.
- 이 과정을 통해 Master와 Slave의 데이터가 동기화
Replication 종류
기본적으로 비동기 방식으로 작동
비동기 복제(Asynchronous Replication)
- Master서버는 이진 로그를 기록하는 즉시 클라이언트에 작업완료 응답을 하고 Slave 서버가 로그를 수신하고 적용했는지 여부를 기다리지 않음
- 장점
- Master 서버 성능저하 거의 없음. 네트워크 지연에 덜 민감
- 단점
- Master 서버 장애 시 아직 Salve로 전송되지 않은 이진로그 이벤트가 손실될 수 있어 Master Slave간 데이터 불일치 발생 가능
세미-동기 복제 (Semi-Synchronous Replication)
- Master 서버는 최소 하나의 Replica 서버가 이진 로그 이벤트를 수신하고 릴레이 로그에 기록했음을 확ㅇ한 후에만 클라이언트에 작업완료를 응답
- 장점: 비동기보다 데이터 일관성 잘 보장
- 단점 : Master 서버 쓰기성능에 약간 지연 발생 가능. Slave 서버 응답 없으면 Master의 쓰기 작업 블록 될 수 있음
동기 복제 (Synchronous Replication)
- 모든 Slave 서버가 이진 로그 이벤트를 수신하고 자기 데이터베이스에 성공적으로 적용햇음을 확인한 후에만 Master 서버가 클라이언트에게 응답
- 장점 : 절대적 데이터 일관성 보장
- 단점: Master서버에 상당한 지연 발생 가능. 모든 Slave가 정상적ㅇ어야하므로 가용성이 떨어질 수있음
Replication 설정
Replication을 위해서는 양쪽에서 설정을 구성해야함. 아래는 간단한 예시
Master 서버 설정
my.cnf 에 다음 설정을 추가하고 MySQL 서버 재기동
[mysqld]
log_bin = mysql-bin
server_id = 1
binlog_do_db = my_database
- log_bin = mysql-bin : 이진 로그 활성화 및 이진 로그파일명 접두사
- server_id : 각 서버는 고유한 server id를 가져야함
- 옵션
- binlog_do_db : 특정 데이터베이스 지정
- binlog_ignore_db : 특정 데이터베이스 repl 제외
- binlog_format : 이진 로그 형식 지정
- STATEMENT : SQL 문 기록
- ROW : 변경된 행의 데이터를 기록. 데이터 일관성이 가장 높고 안전해 일반적으로 권장
- MIXED : 상황에 따라 STATEMENT와 ROW 혼합
Slave 서버 설정
my.cnf 에 다음 설정을 추가하고 MySQL 서버 재기동
[mysqld]
server_id = 2
relay_log = mysql-relay-bin
read_olny = 1
- relaoy_log : 릴레이 로그 파일 이름 접두사 (선택사항)
- read_only : Slave를 읽기 전용으로 설정 (선택 사항, 권장)
'DBMS > MySQL' 카테고리의 다른 글
[DBMS] MySQL(5) - 백업 및 복구 (0) | 2025.09.12 |
---|---|
[DBMS] MySQL(4) - 사용자 및 권한관리 (0) | 2025.09.12 |
[DBMS] MySQL(3) - 인덱스 활용 및 튜닝 (0) | 2025.09.12 |
[DBMS] MySQL(2) - MySQL 특화 SQL (0) | 2025.09.12 |
[DBMS] MySQL(1) - 개요 (1) | 2025.09.12 |