DB Replication

구범모·2024년 1월 24일
0

학습목표

  • Replication의 정의를 학습한다.
  • 동기화 방식에 대해서 학습한다.
  • 장단점에 대해서 학습한다.

Replication이란?

여러 개의 DB를 권한에 따라 수직적인 구조로 구축하여, 하나의 데이터베이스를 기준으로 나머지 서버를 복제하는 방식.
복제의 기준이 되는 Primary Node의 데이터를 Secondary Node에 복제한다.(이때 Primary Node는 1대, Secondary Node는 N대를 둔다.)
Primary Node는 쓰기 작업만을 처리하며, Secondary Node는 읽기 작업만을 처리한다.

동기화 방식

  • Replication은 보통 비동기 방식으로 Primary - Secondary Node의 데이터 정합성을 지킨다.

출처 : http://cloudrain21.com/mysql-replication

  • 비동기 방식의 처리 순서는 다음과 같다.
  1. 클라이언트(Application)에서 Primary 노드에게 Commit 을 수행한다.
  2. Connection Thead 는 스토리지 엔진에게 해당 트랜잭션에 대한 Prepare(Commit 준비)를 수행한다.
  3. Commit 을 수행하기 전에 먼저 Binary Log 에 변경사항을 기록한다.
  4. 스토리지 엔진에게 트랜잭션 Commit 을 수행한다.
  5. Primary Thread 는 시간에 구애받지 않고(비동기적으로) Binary Log 를 읽어서 Slave 로 전송한다.
  6. Secondary 의 I/O Thread 는 Primary 로부터 수신한 변경 데이터를 Relay Log 에 기록한다. (기록하는 방식은 Primary 의 Binary Log 와 동일하다)
  7. Secondary 의 SQL Thread 는 Relay Log 에 기록된 변경 데이터를 읽어서 스토리지 엔진에 적용한다.

장점

  • 쿼리의 대부분이 SELECT문이므로, SELECT 쿼리를 Secondary Node N대에 분산시키고, 나머지 C,U,D작업은 Primary Node에서 처리하여 성능을 높일 수 있다.
  • 비동기 방식으로 운영되어 동기화 작업에서 지연 시간이 거의 없다.

단점

  • 비동기 방식이므로 성능은 조금 좋아지지만, 그만큼 데이터 정합성이 완전히 지켜질 순 없다.
  • Write작업은 멀티 스레드로 운용되는데 반해, Secondary Node에 바이너리 로그를 송신하는 스레드는 단일 스레드라, 복제 지연이 발생할 수 있다.

장점이자 단점(?)

  • Primary Node의 데이터가 손상되더라도, Secondary Node의 데이터를 이용하여 복구가 가능하다. 다만 누락된 데이터를 찾아야 한다.

복제 지연의 원인과 해결 방법

  1. 장기 실행 쿼리
  • 원인
    • SBR (Statement Based Replication, SQL을 전송하여 복제하는 방식) 방식의 문제.
  • 해결
    • RBR (Row Based Replication, 변경된 결과를 복제하는 방식)방식이나 MBR (Mixed Based Replication, 비결정적 동작(Usafed Statement)의 경우에만 RBR 방식으로 동작) 방식을 통해 해결하기도 하고, 튜닝이나 인덱스를 활용하여 쿼리 성능 자체를 향상시켜 해결한다.
  1. Write 쿼리량 증가
  • 원인
    • 트래픽이 증가하거나 특정 배치 작업으로 인한 쓰기 사용이 많아지면서 발생하는 경우이다.
  • 해결
    • Multi-Threaded Replication 설정을 통해 복제를 적용하는 worker 스레드 개수를 늘려서 처리 속도를 향상시킬수 있다.
  1. Secondary Node의 로드(트래픽) 증가
  • 원인
    • Secondary Node에서 실행되는 서비스 조회 트래픽으로 인해 처리 성능이 지연되면서 복제 지연이 발생하는 경우이다.
  • 해결
    • 조회에 대한 트래픽을 감당할 복제본의 양이 부족하다는 의미이기 때문에 복제본을 추가 구성(Scale out)하여 해결할 수 있다.

ref

profile
우상향 하는 개발자

0개의 댓글