Replication & Clustering

database

Replication

https://yongineer.duckdns.org/database/01.png

Replication은 무엇인가?

  • 여러 개의 DB를 권한에 따라 Master Node와 Slave Node로 구성되는 것이 일반적이다.
  • Master Node는 쓰기 작업만 담당
  • Slave Node는 읽기 작업만 담당
  • 비동기 방식으로 노드들 간 데이터를 동기화 한다.

Replication의 처리 순서

  1. Master Node에 쓰기 트랜잭션이 수행된다.
  2. Master Node는 데이터를 저장하고 트랜잭션에 대한 로그를 BIN log에 기록한다.
  3. Slave Node의 IO Thread는 Master Node의 BIN log를 Relay log에 복사한다.
  4. Slave Node의 SQL Thread는 Relay log를 한 row씩 읽어가며 데이터를 저장한다.

Replication의 장점

  • DB요청의 대부분이 읽기 작업이므로 읽기와 쓰기를 분리하는 것만으로도 성능을 높일 수 있다.
  • 비동기 방식으로 지연시간이 짧다.

Replication의 단점

  • 노드들 의 데이터 동기화가 보장되지 않아 일관성 있는 데이터를 얻지 못할 수 있다
  • Master가 다운되면 복구 및 대처가 어렵다.

Clustering

https://yongineer.duckdns.org/database/02.png

Clustering은 무엇인가?

  • 여러개의 DB를 수평적인 구조로 구축하는 방식
  • 분산환경을 구성하여 Fail Over 시스템을 구축하기 위해서 사용
  • 동기방식으로 Node들 간의 데이터를 동기화함

Clustering의 처리 순서

  1. 1개의 Node에 쓰기 트랜잭션이 수행되고 Commit을 실행한다.
  2. 디스크에 내용을 쓰기전에 다른 노드로 데이터의 복제를 요청한다.
  3. 다른 Node에서 복제 요청을 수락했다는 OK신호를 보내고, 디스크에 쓰기 시작한다.
  4. 다른 Node로 부터 OK신호를 받으면 실제 디스크에 데이터를 저장한다.

Clustering 장점

  • Node들 간의 데이터를 동기화하여 항상 일관성 있는 데이터를 얻을 수 있다.
  • 1개의 Node가 죽어도 다른 Node가 살아있다면 시스템을 계속 장애없이 운영할 수 있다.

Clustering 단점

  • 여러 Node들 간의 데이터를 동기화하는 시간이 필요하므로 Replication에 비해 쓰기 성능이 떨어진다.
  • 장애가 전파된 경우 처리가 쉽지 않다.
  • 데이터 동기화에 의해 스케일링에 한계가 있다.

Clustering 구성하기

Cluster하기 적합한 Table

  • 조회가 자주 발생하고 수정이 거의 발생하지 않는 테이블
  • 컬럼안의 많은 중복 데이터를 가지는 테이블
  • 자주 Join이 되는 테이블

Cluster Key선정하기

👍

  • 데이터 값의 범위가 큰 column
  • 테이블간의 조인에 사용되는 column

👎

  • 특정 데이터 값이 적은 column
  • 자주 데이터 수정이 발생하는 column
  • LONG, LONG RAW column은 포함할 수 없다.

Cluster Index VS Non-Cluster Index

비교Cluster IndexNon-Cluster Index
차이물리적으로 행을 재배열한다.물리적으로 재배열 하지 않는다.
크기인덱스 페이지 용량이 Non-Clusted Index 페이지 용량 보다 작다Clusted Index 페이지 용량 보다 용량이 크다.
선택도30% 이내에서 사용해야 좋다.3% 이내에서 사용해야 좋다.
최대갯수테이블당 1개테이블당 249개
생성Primary Key 설정시, 해당 컬럼은 자동적으로 Cluster Index 생성Non-Cluster Index를 명시해야 생성 (Index page를 따로 만들며 로그 파일에 저장된다.)

Active-Active VS Active-Standby

Active-Active

  • Cluster를 이루는 DB 서버들이 모두 Active한 상태로 두는것
  • 하나의 서버가 죽어도 다른 서버가 역할을 바로 수행하여 중단되는 시간이 없다.
  • 서버의 물리적인 양이 증가되면 CPU와 Memory와 같은 리소스가 증가하기 때문에 성능향상을 기대할 수 있다.
  • 디스크를 공유하면 이에 따른 Bottleneck이 발생 할 수 있다.
  • 다수의 서버를 운영해야 하므로 비용이 증가된다.

Active-Standby ✨

  • HA(High Availability) Clustering 구축 방법 중 가장 대표적인 것 중 하나.
  • Active-Standby구조는 구성과 운영이 쉽다.
  • 운영서버, Active서버, Standby서버로 구성된다.
  • 한 서버가 Active상태로 서비스 중일 때, Standby 서버는 준비 상태로 대기중인 상태다.

구성종류

  • Cold-Standby : 평소에는 Standby 서버가 대기 상태로 있다가 Active 서버가 다운되는 시점 작동
  • Hot-Standby : 평소에도 Standby 서버가 작동

Hot-Standby가 전환시간이 짧지만 그만큼 비용이 증가된다. 항상 DB서버 2대를 사용하지만 실제 동작하는 것이 Active 서버라면 그 전환시간을 줄이기 위해 Hot-Standby를 구성하는 것은 비효율적이다.

동작 방식

  1. Active 서버에 장애가 발생해 서비스를 못하게 되면.
  2. Standby 서버에 있는 HA가 운영 서버에 장애 발생을 보고한다.
  3. HA가 자동으로 Standby 서버에 모든 서비스를 올리고 서비스를 이어간다.
  4. 기존 Active서버에 접속했던 Client는 접속이 끝어지겠지만, 재접속 시 바로 서비스를 이어 나갈 수 있다.

Written by@Yongineer
Backend Developer

GitHubInstagram