Replication 이란?
복제본 데이터베이스를 운용하는 것 (=한 서버에서 다른 서버로 동기화 하는 것)을 Replication이라고 지칭
주로 DB 운용 상황에서 많이 사용되는데
데이터베이스(Master, 소스 서버), 복제된 데이터베이스(Slave, 레플리케이션 서버)라고 많이 부른다
Replication 사용 이유
Slave 데이터베이스는 Master 데이터베이스를 복제(Replication)하여 동일한 데이터를 가지게 됨
이유 1. 데이터 분산 부하 관리
- Insert, Update, Delete 등의 작업 : Master 데이터베이스에서 처리
- Select 등의 조회 작업 : Slave 데이터베이스에서 처리
- ex) Scale-out 목적 트래픽 대응
- ex) 데이터 분석의 경우 대량의 조회를 하는 경우가 많아, 쿼리가 무거울 수 있음. 전용 Replica 서버를 두어 분석 담당하게 함
이유 2. 데이터 안전성 (데이터 백업)
- Master => Slave에서 데이터 백업을 통한 데이터 안정성 확보
- 차후 Master 에서 DB가 손상되더라도 복구 가능
이유 3. 데이터의 지리적 분산
- 만약 서비스가 여러 지역에서 운용되는 경우, 데이터 서버를 여러 곳에 두어 응답 속도 개선 가능
- 다중화를 통한 데이터 가용성을 높임
Replication 복제 구조
- 비동기 복제 : 소스 서버가 레플리카 서버에서 변경 이벤트가 정상적으로 전달됐는지 확인 x
- 반동기 복제 : 전송 보장( request-response ) 적용은 보장 x
- 멀티 레플리카 복제 : 두개 이상으로 1:N (하나는 백업용, 하나는 읽기용)
- 체인 복제 :레플리카 서버가 많다면 하나의 소스 서버에서 대응 하기 힘들고, 읽고 전달하는 것 자체가 부하가 될 수 있어, 중간 레플리카 서버를 만듬
- 듀얼 소스 복제 : 두개의 서버가 서로 소스 서버이자, 레플리카 서버로 구성되어 있는 것 (둘다 읽고 쓰기 가능, 한개의 서버 문제 발생시 바로 대응 가능)
- 멀티 소스 복제 : N:1, 여러 서버에 분산되어 있는 데이터를 하나의 레플리카 서버에서 통합
Replication 복제 원리 (Binary Log)
Master(소스서버)와 Slave(레플리카서버)는 데이터 변경내역, 데이터베이스 테이블 구조 변경, 계정이나 권한 정보 등을 Binary log로 저장 관리
Master (소스서버)
- Binary Log Dump Thread : Binary Log를 Slave(레플리카 서버)로 전송하는 역할
Slave (레플리카서버)
- Replication I/O Thread(복제 서버, Binary Log Event를 가져와 로컬 서버의 파일 - Relay Log)로 저장하는 역할
- Replication SQL Thread (복제 서버) : Relay Log 파일의 이벤트들을 읽고 실행함
- Relay Log : Binary Log Event를 Replica Server에 파일로 저장한 것
- Connection Metadata 란? 소스서버에 연결시 사용하는 정보
Binary Log 방법
바이너리 로그 파일 위치 기반
- 둘 간의 바이너리 로그 파일명과, 파일내 위치로 이벤트 식별
- 동기화 (Server-id) 값 이용
글로벌 트랜잭션 id (GTID) 기반
- 복제에 참여한 모든 slave들에게 동일한 고유 식별값을 가지게 함
Binary Log 형태
statement : sql문 자체를 바이너리 로그로 기록
row : 변경된 값 자체를 바이너리 로그로 기록(값 전체가 기록하는 방식이라 용량이 클 수 있음)
mixed : statement + row 혼합 방식
추가) MongoDB Replication 요약
단일 Replica Set /샤딩 기능이 추가된 Shared Cluster 로 구분
1 Primary(기본) 노드 + (N) Secondary 노드
각 멤버간 서로 다른 멤버가 살아 있는지 계속 확인 메세지(Hearbeat)를 주고 받음
추가) 참고 하면 좋은 링크 : https://hoing.io/archives/4282
'DB > 이론' 카테고리의 다른 글
[Cache] Memcached vs Redis 차이 (2) | 2022.11.22 |
---|---|
[DB] Clustering, Sharding, Replication 차이 (0) | 2022.10.03 |
[DB] Index란? (0) | 2022.08.11 |
[DB] Transaction 격리 수준 종류 (Isolation Level) (0) | 2022.08.10 |
[DB] PostgreSQL vs MySQL (0) | 2022.08.10 |