MySQL Master-Slave 구조

Master-Slave 란?

우선 Master-Slave 구조를 이해하기 전에 해당 개념이 왜 필요한지를 생각해 볼 필요가 있다.

 

데이터베이스를 관리하는 사람의 역할은 크게 두 단계로 나뉜다.

첫째는 개발 단계에서 데이터베이스를 알맞게 설계하고 필요한 테이블과 프로시저를 작성하는 것이다. 그뿐만 아니라 해당 단계에서는 인덱스, 정규화 등 데이터베이스를 효율적으로 사용할 수 있게끔 만드는 역할을 하게 된다.

둘째는 운영 단계에서 데이터베이스를 관리하고 백업을 담당하게 되고 지속적으로 데이터베이스를 모니터링하며 이슈 발생 시 문제를 해결하는 역할을 하게 된다.

 

Master-Slave 구조는 MySQL의 관리 및 백업에 등장하는 Replication 개념에서 나오는 구조이며, 말그대로 주인인 Master 서버를 바라보고 Slave 서버에서 데이터를 동기화하는 구조이다. 

Master-Slave의 장점

Master-Slave구조의 장점은 크게 두가지로 나뉜다.

 

첫째는 백업 측면이다.

백업 측면에서는 Master와 Slave가 각각 데이터 원본서버백업서버 역할을 하며 Master 서버에서 장애가 발생하여 다운되면 즉각 Slave를 Master로 사용하여 빠르게 서비스를 복구할 수 있게 된다. 뿐만 아니라 Master 서버에서 데이터 손실이 발생했을 때 Slave서버를 통해 데이터를 복원할 수도 있게 된다.

 

둘째는 트래픽 분산 측면이다.

서비스를 제공하다보면 데이터베이스에서 read/write 작업이 많이 일어나게 되는데 이를 분산시켜 데이터베이스에 부하를 줄이는 역할을 하는 것이다. Master에서는 데이터 변경(write)에 대한 작업 수행을, Slave에서는 데이터  읽기(read)에 대한 작업을 진행하면서 트래픽 분산 역할을 하게 된다.

 

Master-Slave 작동 메커니즘

  1. Master DB에 데이터 변경 발생
  2. 변경이력을 Binary Log에 기록 후 Master DB에 반영
  3. Slave DB에서 이벤트 정보를 Master DB에 요청
  4. Master DB는 Binary Log에서 이벤트 정보를 읽어 Slave DB에 전송
  5. Slave DB는 Master DB에서 받은 이벤트 정보를 Relay Log에 기록
  6. Slave DB에서 최종 변경사항 반영

 

Master DB에서 변경이 발생하면 즉각 Bin Log에 기록하여 이를 Slave DB에서 받아와서 DB에 반영하기 때문에 실시간으로 동기화가 이루어 진다.