레플리케이션 (Replication)

Database/MySQL 2019. 7. 23. 17:28

레플리케이션 (Replication)

DB의 부하를 막기 위해 2개 이상의 DBMS 시스템을 Master / Slave로 나눠서 동일한 데이터를 저장(데이터 복제)하는 방식

 

Master DB는 데이터 변경, Slave DB는 데이터 검색

Query의 대부분을 차지하는 Select를  slave DB로 보냄으로써 Read 성능 향상이 된다

 

 

MySQL Replication과 Oracle RAC(Real Application Cluster)

  MySQL Replication Oracle RAC 스토리지
개념

디스크를 독립적으로 분리하여 데이터를 유지

데이터를 이중화

고유 스토리지(SAN, iSCSI) 장비를 중간에 두고 DB를 이중화

DB를 이중화

부하 분산 디스크 읽기 부하 분산 쓰기 부하 일부 분산
장점 특정 노드 디스크 장애가 전체 데이터 유실로 이어지지 않음 (데이터가 복제되어있음) 읽기, 쓰기 부하 분산이 모두 가능
단점 마스터 장애시 전체 노드에 데이터 쓰기 작업이 불가능 스토리지 장애에 취약 (공유 스토리지이므로)
데이터 변경 작업 단일 마스터 여러 노드에서 가능

 

Log 기반 Data 복제 방법 (Binary Log)

1) Statement Based : SQL문을 그대로 Binary Log에 복사하여 기록

MySQL 3.23 이후 도입

Binary Log 사이즈는 작으나 SQL에 따라 결과가 달라질 수 있음 (Time Function(Timestamp), UUID, User Defined Function)

2) Row-Based : SQl로 인해 변경된 행을 BASE64로 인코딩하여 BInary Log에 기록

MySQL 5.1 이후 도입

변경된 행 수가 많을 경우 바이너리 로그 사이즈가 큼

3) Mixted : Statment + Row

기본적으로 Statement, 경우에 따라 Row base

 

 

데이터 복제 방법

1. Master에서 데이터 변경 >  자신의 Database에 반영

2. Master에서 변경된 이력을 Binary Log에 기록 후 관련 이벤트를 날림

3. Slave ID_THREAD에서 Master 이벤트를 감지

Master Binary Log를 Slave의 Relay Log에 기록

4. Slave SQL_THREAD는 Relay Log를 읽고 자신의 데이터베이스에 기록

 

마스터에서는 여러 세션을 통해 데이터 변경이 가능

슬레이브에서는 하나 SQL Thread에서만 데이터 변경 처리 가능

> 마스터에 데이터 변경 트래픽이 몰리면 마스터-슬레이브 간 동기화 시간이 걸림

 

 

활용

부하 분산 뿐 아니라 버전 테스트 등에 이용 가능

 

 

설정

트랙백

댓글