[DB] 클러스터링과 리플리케이션

hyunoi·2024년 12월 12일

Database

목록 보기
3/8
post-thumbnail

데이터베이스는 기본적으로 서버와 스토리지가 1:1로 구성되어 작동한다.
이 구조는 단순하고 관리가 쉬운 장점이 있지만, 다음과 같은 한계를 가질 수 있다.

  • 대규모 트랜잭션 처리 한계
    대규모 DB 서버에서 다수의 사용자 요청(트랜잭션)을 동시에 처리를 못 한다.
  • 데이터 손실 위험
    스토리지가 손상되거나 서버가 다운되면 데이터에 접근할 수 없게 된다.

이런 문제를 해결하기 위해서 데이터베이스는 아래와 같은 특성을 꼭 갖춰야 한다.

  • 고성능
    사용자의 요청에 대해 빠르고 안정적인 응답을 제공해야 한다.
  • 고가용성
    데이터베이스는 항상 접근 가능해야 하며, 장애가 발생하더라도 서비스가 중단되면 안된다.
  • 확장성
    데이터와 사용자가 폭발적으로 증가해도 이를 효율적으로 처리할 수 있는 구조가 필요하다.

위 세 가지를 충족시키기 위해서 나온 서버-스토리지 구성 기술이 클러스터링과 리플리케이션이다.

클러스터링 (Clustering)


여러 개의 데이터베이스 서버를 수평적인 구조로 구축하고 하나의 스토리지를 나눠서 처리하는 방식이다.

클러스터링은 두 가지 방식으로 나뉜다.

Active-Active 방식

  • 여러 서버가 동시에 데이터 읽기/쓰기 작업을 처리한다.
  • 하나의 서버가 중단되더라도 바로 다른 서버가 작동할 수 있다.
  • 서버가 여러 개 동작하므로 CPU, 메모리 등의 성능이 향상된다.
  • 스토리지를 공유하기 때문에 데이터 충돌 현상이 발생할 수 있다.
  • 다수의 서버를 운영하므로 비용 부담이 크다.

Active-Stand By 방식

  • 하나의 서버는 Active 상태로 작업을 처리하고, 나머지 하나는 Stand By 상태로 대기한다.
  • Active된 서버에 문제가 생기면, Stand By 상태 서버를 Active로 바꿔서 작동시킨다.
  • 한 번에 두 서버를 동시에 사용하는 것이 아니기 때문에 비용 부담이 덜하다.
  • Stand By 서버는 평소에 작동하던 것이 아니기 때문에 Active 전환까지의 시간이 수십 초에서 수십 분까지 걸린다.

두 방식 차이점

특징Active-ActiveActive-Standby
가용성고가용성 (서버 중단 시 다른 서버가 즉시 처리 가능)장애 발생 시 Standby 서버로 전환 필요
성능여러 서버가 동시에 작동하므로 높은 성능 제공Standby 서버는 대기 상태로 성능에 기여하지 않음
비용서버 여러 대가 동시에 작동하므로 비용 부담 증가Standby 서버는 대기 상태로 비용 부담 적음
데이터 동기화데이터 충돌 가능성 존재 (동기화 필요)데이터 동기화 문제는 발생하지 않음
복구 시간(Failover)서버 장애 시 복구 즉시 가능Standby 전환에 수십 초~수분 소요 가능

장단점

장점

  • 고가용성: 장애 발생 시에 대기 중이던 서버로 자동으로 전환한다.
  • 확장성: 서버를 추가하여 처리 성능을 확장할 수 있다.

단점

  • 설정과 관리가 복잡하다.
  • 데이터 동기화를 하는데 비용이 증가한다.

리플리케이션 (Replication)


데이터 유실을 최소화하기 위해서 서버와 스토리지를 복제하여 데이터베이스 서버를 수직적인 구조로 구축한다.
리플리케이션은 Source(Master)와 Replica(Slave)로 나뉜다.
위 사진에서 왼쪽이 Source(Master), 오른쪽이 Replica(Slave)이다.

사용하는 목적은 아래와 같다.

  • 스케일 아웃
    갑자기 늘어나는 트래픽에 대비하기 위하여 서버를 늘려 성능을 개선하는 것이다.
  • 백업
    백업 과정에서 쿼리 손상(데이터 유실)을 입을 가능성이 있어 Source 서버에 영향을 주지 않고 Replica에서 데이터 백업을 한다.
  • 데이터 분석
    Source 서버에 영향을 주지 않고 Replica 서버에서 데이터 분석을 할 수 있다,
  • 데이터의 지리적 분산
    Source 서버와 물리적인 거리가 있어도 Replica 서버를 통해서 동일한 데이터를 받을 수 있고, 속도도 높일 수 있다.

리플리케이션 처리 방식

  1. Master 서버에 쓰기 트랜잭션이 들어온다.
  2. Master 서버는 데이터를 저장하고 트랜잭션에 대한 로그를 BIN LOG 파일에 기록한다.
  3. Source 서버는 Master 서버의 BIN LOG 파일을 Relay log 파일에 복사한다.
  4. Source 서버의 SQL Thread는 Relay log 파일을 하나씩 읽으며 데이터를 저장한다.

이렇게 두 서버 간 무결성 검사를 하지 않는 비동기 방식으로 데이터를 동기화한다.

장단점

장점

  • 데이터 유실 위험이 감소한다.
  • 읽기 부하 분산으로 성능이 향상된다.

단점

  • 데이터 동기화를 하는데 지연 가능성이 있다.
  • 쓰기 작업에 대한 부하가 증가한다.

🦴 참고


https://www.whatap.io/bbs/board.php?bo_table=blog&wr_id=189&page=3
https://mangkyu.tistory.com/97

0개의 댓글