공부 : MySQL Replication

호밀빵 굽는 쿼카·2022년 1월 18일
1

NHN Cloud 인턴

목록 보기
10/48
  1. Master-Slave Replication
  2. Group Replication

Replication 방식 이해

  • Binary log: 모든 MySQL에서 이용되며 DB 변경 내용을 기록하는데 이용하는 Log
  • Relay log: Slave DB에만 위치하며, Master DB의 Binary Log를 복사해 저장하는데 이용하는 Log

Master-Slave Replication

  • 하나의 Master DB와 다수의 Slave DB들을 통해 Replication을 수행하는 방식
  • Master는 Client로부터 받은 DB 변경 Query에 따라 DB를 변경하고, 변경 내용을 Slave DB에게 전달하여 Replication을 수행
  • Master는 Read/Write Mode로 동작하고 Slave들은 Read Mode로 동작

Replication 방식

  • Replication 방식에는 Async, Semi-sync 2가지 방식을 지원
  • 두 방식 모두 완전히 동기화가 되는 Sync 방식은 아니기 때문에 Slave DB는 짧은 순간 Master DB와 동기화되지 않는 상태일 수 있음

Async Replication(비동기)

Master DB는 Slave DB에 관계없이 DB를 변경하고 DB 변경 내용을 Binary Log에 기록한다. Slave DB가 Replication을 위해 Master에 Connection을 맺으면, Master DB에는 Dump Thread 하나가 생성되고 Slave에는 I/O Thread, SQL Thread 2개의 Thread가 생성된다. Master DB의 Dump Thread와 Slave DB I/O Thread는 Connection을 맺고 있다. Slave DB의 I/O Thread는 Master DB의 Dump Thread를 통해서 Master DB의 Binary Log를 요청하고, 전달받아 자신의 Relay Log에 복사한다. Slave DB의 SQL Thread는 Relay Log 내용을 바탕으로 자신의 DB를 변경하고 변경 내용을 자신의 Binary Log에 기록한다.
Async 방식이기 때문에 Master DB에서 Transaction이 완료된 DB 변경 내용이더라도 Slave에는 바로 반영되지 않는다. 이는 Master DB의 갑작스러운 장애가 Data 손실로 이어질 수 있다는 의미이다. Slave DB의 장애는 Master DB의 Transaction에 아무런 영향을 주지 않는다. 장애가 발생했던 Slave DB는 복구 된 후 자신의 Relay Log, Binary Log 및 Master DB의 Binary Log를 바탕으로 중단되었던 Replication을 이어서 진행한다.

Semi-sync Relication(반동기)

Semi-sync Replication은 Master DB가 Slave DB로부터 Relay Log 기록이 완료되었다는 ACK를 받고 Transaction을 진행하는 방식이다. 따라서 Async Replication 방식에 비해서 좀더 많은 DB 성능저하가 발생하지만, Master-Slave DB 사이의 동기화를 좀더 보장해준다.

  • 동기화나 안정성 면에서 good

Master DB 장애 발생

  • DB 관리자는 장애가 발생한 Master DB를 다시 기동하여 장애에 대응
    * Master DB를 다시 기동하여 장애에 대응하는 방법은 Data 손실의 염려가 없는 가장 안전한 방법이지만, Master DB가 복구될때까지 DB에 Write를 요청하지 못한다는 단점
  • DB 관리자는 Slave DB를 새로운 Master DB로 승격
    * Slave DB를 승격시켜 새로운 Master를 이용하는 장애 대응 방법은 Master의 Downtime을 최소화 할 수 있는 장점이 있지만, Master DB와 Slave DB가 완전한 동기방식의 Replication을 이용하지 않기 때문에 Data 손실이 발생 할 수 있음
  • 2가지 방법 모두 수동

Group Relication

Group Replication은 다수의 DB Instance를 Group으로 구성하여 Replication을 수행하는 방식이다. Client는 MySQL Router를 통해서 DB로 접근한다.

Replication 방식

Single-primary

  • Master-slave Replication과 유사하게 동작하는 Mode
  • 하나의 DB만 Primary DB로 동작하며 MySQL Router로부터 유일하게 Read/Write 요청을 받아 처리하는 DB
  • 나머지 DB는 Secondary DB로 동작하며 MySQL Router로부터 Read 요청만을 받아 처리

multi-primary

  • Multi-primary Mode는 모든 DB가 Primary Node로 동작. 따라서 App의 Read/Write 요청은 모든 DB에게 전달이 가능
  • MySQL Router는 DB의 부하에 따라서 적절한 DB에게 요청을 전달, 만약 서로다른 Primary DB에서 같은 Row을 동시에 변경하여 Commit 충돌이 발생하였다면, 먼져 Commit한 Primary DB는 변경 내용이 반영되고 나중에 Commit한 Primary DB는 Abort


참고링크

profile
열심히 굽고 있어요🍞

0개의 댓글