반응형

Replication 하나의 중앙 DB에서 하나 혹은 이상의 DB 복사하는 프로세스를 말한다.

write/read 가능한 원본 Master read only혹은 write/read 가능한 복사본 slave 구성된다.

서버의 데이터 동기화 방식은 동기와 비동기 방식 그리고 반동기 방식이 있는데 기본적으로 비동기로 이루어진다.

 

- 비동기 방식: Master서버의 데이터 변경이 일어날 slave에서 시차를 두고 동기화하는
  * Master서버에 문제가 발생해 slave에서 복원할 경우 데이터 정합성에 문제가 발생할 있다. 

- 동기 방식: 데이터에 변경이 일어난 동시에 동기화하는 방식을 말합니다.
   * 바로 동기화 되기 때문에 master서버에 문제가 생기더라도 slave서버를 사용하여 데이터 정합성에 문제 없이 서비스를 이어갈 있다. 

- 반동기 방식: 비동기 방식으로 작동할 slave에서 Master 트랜잭션을 제대로 수신받았는지 확인할 없다.
반동기 방식은 master에서 보낸 트랜잭션을 모두 수신했음을 확인할 때까지 기다리리고 복제하는 방식이다. -> 데이터 정합성 문제 보완 

 

3줄 요약

- Master: 클라이언트가 데이터에 대한 CRUD 요청 Binary Log 생성하여 slave 전달

- Slave: Master로부터 받은 Binary Log 사용해 데이터에 반영   *Master 승격이 가능하다.

- Master slave 항성 연결되어 있지 않아도 되며, 간헐적 연결을 통해 데이터를 복제할 있다.

단방향 통신

 

 하나의 DB 구성했을 트랜잭션이 몰려 성능이 저하될 있고 백업을 안했을 경우 문제가 발생할 있다.
 ->  Replication 사용하여 DB 복제했다면 트랜잭션이 몰렸을때 여러 서버로 나누어 처리하고 원본 서버의 데이터에 문제가 생겼다면. 복제 데이터를 통해 master서버를 복원할 있다.

1.효과

- Scale out solution: 데이터 요청을 slave 분산함으로 병목현상 해결할 있다. 트랜잭션 집중에 따른 성능저하 해결

- Data Security: Slave 데이터가 복제되며 Slave 복제 프로세스를 중지할 있기 때문에 해당 원본 소스 데이터를 손상시키지 않고 백업이 가능하다.

- Analytics: 실시간 데이터를 소스에서 생성할 있으며, 정보분석을 Master 아닌 slave에서 실행할 있다. -> 서비스에 영향을 주지 않고 정보분석

- Long-distance data distribution: 여러 지역 혹은 local  copy 있어 지리적으로 문제가 생겼을때 복구하거나 master서버에 영구적으로 access하지 않아도 원격 사이트에 로컬 복사본을 만들 있다.

 

 

2.복제

Master서버의 데이터를 slave서버에 복제하는 방식

  -   SBR (Statement Based Replication): SQL문을 복사
    -  이점: 검증된 기술, 로그 파일에 기록되는 데이터가 줄어든다, 변경된 모든 쿼리문이 들어있기에 DB audit 사용할 있다.
    -  단점: 데이터를 일부 수정하는 (INSERT, UPDATE, DELETE, REPLACE) 복제하기 어렵다, 문장으로 처리되는 Non-Deterministic(UUID, SETDATE ) 데이터를 올바르게 복제할 없다. -> 경고 발생

 

  -   RBR (Row Based Replication): 변경된 Row 복사
    -  이점: 모든 변경 사항을 복제할 있습니다.
    -  단점: SBR 비해 많은 내용을 기록해야 한다, 이는 백업 복구에 많은 시간이 소요된다.

 

  -   MBR (Mixed Based Replication): 위의 두가지 방식을 섞어서 복사. 평소에는 SBR 동작하다 Non-Deterministic(UUID, rand, Timestamp, ) 만나면 RBR 방식으로 전환하여 기록하는 방식

 MySQL에서는 기본적으로는 SBR 방식을 사용한다

  - GTID(Global Transaction Identifiers) 적용: Master에서 commit 트랜잭션에 관계되고 생성된 고유한 식별자. *원래 있던곳 외에도 복제 서버에서도 고유함 GTID 원본에 커밋된 트랜잭션이 복제본에도 적용됐는지 판단할 있다. -> 일관성 보장

 

 

3.동작

  1. Slave서버에서 START SLAVE 명령문을 입력하면 slave 서버는 하나의I/O thread 생성
  2. I/O thread Master 접속하여 bin-log 기록돼있는 업데이트 기록을 요청한다.
  3. Master서버에서 실행 모든 SQL 기록을 Binlog dump thread 이를 읽어서 Slave 전송한다
  4. Slave I/O Thread bin-log 내용을 수신 받은 slave Relay Log 기록 한다.
  5. SQL Thread 수신 받은 내용을 Slave서버에 적용한다.

 

Binlog dump thread: 소스는 복제본이 연결될 이진 로그 내용을 복제본으로 보내는 스레드를 작성합니다 

Replication I/O Thread: Master서버에 bin-log 요청하고 binlog dump thread 부터 받은 bin-log 데이터를 relay log 순차적으로 입력

Replication SQL Thread:  I/O thread 통해 기록된 relay log 읽어 스토리지 엔진에 replay하는 thread이다. 실제로 소스를 적용하기 때문에 i/o스레드에 비해 처리량과 연산이 많다.

 

4.주의

복제를 수행하기 위해선 bin-log에서 기록을 가져와야 하는데 원본 서버에서 데이터에 대한 수정이 일어나고 있다면 잠시 중단한 원본의 현재 bin-log 좌표를 가져와야 한다. 이는 원본 서버의 데이터가 변경됨에 따라 data dump 원본 서버의 데이터가 일치하지 않게 되고 복제본이 일관되지 않거나 DB 데이터 무결성을 잃을 있기 때문이다.

 

참고

https://dev.mysql.com/doc/refman/8.0/en/replication.html

http://www.dbguide.net/db.db?cmd=view&boardUid=146593&boardConfigUid=9&boardIdx=128&boardStep=1

https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?pageid=4&mod=document&keyword=Replication&uid=235124 

반응형

+ Recent posts