글
레플리케이션 (Replication)
레플리케이션 (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에서만 데이터 변경 처리 가능
> 마스터에 데이터 변경 트래픽이 몰리면 마스터-슬레이브 간 동기화 시간이 걸림
활용
부하 분산 뿐 아니라 버전 테스트 등에 이용 가능