Master & Slave 필요 이유
데이터 베이스 서버를 효율적으로 구축하는 방법 중 하나인 마스터와 슬레이브 개념에 대해 알아보자.
예를 들어 주문이라는 데이터가있을때, 주문내역을 확인하는것도, 매출을 조회할때도, 주문통계를 출력할때도
공통적으로 주문이라는 데이터가 필요하다. 각각의 기능을 담당하는 서버는 주문데이터가 필요할때마다 주문데이터가 담긴 db서버에서 데이터를 읽어간다.
이렇게 각 서버가 db 서버에 데이터를 요청하고 받아가는 것을 쿼리라고하고, 읽어가는 쿼리는 select 조회라고한다.
하지만 이렇게
원본 데이터가 담겨있는 서버는 한개인데, 너무 많은 서버들이 db서버에 데이터를 요청하면
db서버는 과부하가 걸리게 된다.
이 문제를 해결 하기 위해 등장한 것이 Master - Slave 개념이다.
서버에 주인과 노예의 개념이 도입된 것인데,
- master - 메인 프로세스를 담당
- slave - master 서버로부터 복제된 데이터를 받아 각종 요청들을 대응하는 어시스트
예를들어 주문내역데이터가 필요한 다른 서버들이 데이터를 요청하면, 진짜로 원본 데이터가 쌓여있는 master 서버가 아니라, 똑같은 데이터가 복제(Replication)된 slave서버가 데이터를 제공한다.
MySQL Replication
MySQL Replication(복제)은 말 그대로 DB인 데이터를 갖다가 물리적으로 복사해 다른곳에 넣어두는 기술을 의미
그렇다면 master 서버와 slave 서버는 어떻게 데이터를 동기화할까? 아래의 이미지를 참고하자.
복제 매커니즘
1. 클라이언트로 인해 Master DB에서 DATA변경이 일어나면 (insert, update, delete 쿼리)
2. 쿼리를 실행해 이를 Master DB에 반영합니다
3. 변경이력을 Binary Log로 저장합니다
4. 관련 이벤트를 Slave DB들에게 넘깁니다
5. Slave IO Thread에서 이벤트를 캐치하면
6. Binary Log를 Slave DB 각각의 Relay Log에 저장합니다
7. Slave SQL Thread에서 Relay Log를 읽고
8. Slave DB를 업데이트합니다 (읽기 처리를 할 때는 Slave DB를 사용합니다)
Master & Slave 구조
일반적으로 DB에 대한 트래픽 분산을 위해서 Mysql Replication을 통해서 트래픽 집중 문제를 해결할 수 있습니다.
Master에게는 데이터 동시성이 아주 높게 요구되는 트랜잭션을 담당하고,
Slave에게는 읽기만 데이터 동시성이 꼭 보장될 필요는 없는 경우에 읽기 전용으로 데이터를 가져오게 됩니다.
일반적으로 Front에서 데이터를 읽어들일 때,
꼭 데이터 일관성이 필요한 경우와 아닌 경우에 대한 API가 나누어지게 됩니다.
그런 경우에 읽기전용으로 트랜잭션을 사용하여 디비에 대한 트래픽을 분산할 수 있습니다.
정리 참고 출처 : https://jung-story.tistory.com/118
DB (Master & Slave 개념 및 구조)
개요 소프트웨어를 개발하는데 가장중요한것은 DB를 설계하는 것이라고 생각합니다. 많은 소스를 보면서 DB구조가 Master & Slave로 되어있는것 을 볼 수 있었는데, 자세한 개념을 알아 보도록 하겠
jung-story.tistory.com
https://brunch.co.kr/@b30afb04c9f54dc/2
Master-Slave 서버에 대해 알아보자
기획자를 위한 마스터, 슬레이브 서버 개념 한판 정리 | 개발자분께 다음과 같은 메일을 받았을 때 기획자의 심정을 서술하시오. (20점) "복제 지연으로 인한 이슈로 확인됐습니다. 검색 쪽으로
brunch.co.kr
'STUDY > DB SQL' 카테고리의 다른 글
[SQL] 오라클 LISTAGG함수 (0) | 2023.06.26 |
---|---|
[SQL] 오라클 시퀀스(SEQUENCE) 사용법 (0) | 2023.06.26 |
[DB] DBMS별 Schema(스키마), Database 개념 차이점 (0) | 2023.06.09 |
[Oracle] SQL Developer 단축키 (0) | 2023.06.08 |
[SQL] 오라클 ORA-00984: 열을 사용할 수 없습니다. (0) | 2023.06.08 |