솜이의 데브로그

4장 ) 데이터베이스와 아키텍처 구성(2) 본문

CS/Database

4장 ) 데이터베이스와 아키텍처 구성(2)

somsoming 2021. 10. 13. 18:00

Reference : 데이터베이스 첫걸음

 

DB 서버의 다중화 - 클러스터링

 

DB서버는 데이터를 보존하는 '영속 계층' 이다. 따라서 클러스터링이 어려운 컴포넌트이다.

  • 데이터베이스는 다량의 데이터를 영구적으로 보존, 그에 따른 성능이 요구됨.
  • 따라서 데이터를 보존하는 매체에 필요한 요건이 높다.
  • 전용의 외부 저장소를 사용하므로, DB 서버의 아키텍처는 저장소와 묶어 생각해야한다.
  • 데이터는 항상 갱신되기 때문에, 다중화 시에 '데이터 정합성'을 중요하게 의식해야 한다.

 

 

가장 기본적인 다중화
  • DB 서버만을 다중화하고 저장소는 하나만 두는 구성.
  • 서버가 동시에 동작하는 것을 허락할 지 여부
    • Active-Active : 클러스터를 구성하는 컴포넌트를 동시에 가동
    • Active-Standby : 클러스터를 구성하는 컴포넌트 중 실제 가동하는 것은 Active, 남은 것은 대기(Standby)하고 있는다.

 

Active-Active 구성의 장점

  • 시스템 다운 시간이 짧다.
    • 복수의 DB 서버가 동시에 동작하고 있어 한 대가 다운되어도 남은 서버가 처리해 시스템 전체가 정지되는 것을 막을 수 있다.
  • 성능이 좋다.
    • DB 서버 대수가 증가하면 동시에 가동하는 CPU나 메모리도 증가하므로 성능이 향상 될 수 있다.

 

Active-Standby

  • Standby 상태의 DB서버는 사용되지 않다가 Active DB 서버에서 장애가 일어날 때만 사용된다.
  • 따라서 전환하는 시차동안 서비스를 사용하지 못하는 다운 상태가 된다.
  • Heartbeat : Standby DB 서버가 일정 간격으로 Active DB에 이상이 없는지 조사하기 위한 통신.
  • Cold-Standby : 평소에는 Standby DB가 자공하지 않다가 Active DB가 다운된 시점에 작동하는 구성
  • Hot-Standby : 평소에소 Standby DB가 작동하는 구성 (전환 시간이 짧다)

 

▶ 가용성과 성능이 좋은 순 (가격순)

  1. Active-Active
  2. Active-Standby (Hot-Standby)
  3. Active-Standby (Cold-Standby)

 

 

DB 서버와 데이터의 다중화 - 리플리케이션

 

리플리케이션이란

DB 서버와 저장소 세트를 복수로 준비. 즉, DB 서버 뿐만 아니라 데이터도 다중화한다.

  • RAID : 저장소 내부의 컴포넌트 (대부분 하드디스크)를 다중화. 클러스터링과 동일하게 단일 장애점을 없앤다.
  • 리플리케이션 기술
    • '달걀을 한 바구니에 다 담지 않는다'
    • 하드웨어가 설치된 시설이 파괴된 경우 다른 시설이 멀리 떨어져 있다면 서비스를 계속 사용 가능.

 

주의할 점

  • Active 측 저장소의 데이터는 항상 사용자로부터 갱신된다.
  • 따라서 Standby 측 데이터에도 반영을 하여 최신화 해야하는데, 이 갱신 주기를 얼마나 할 것인가와 성능 사이의 트레이드오프 관계가 생긴다.
  • 피라미드형 리플리케이션 구성 : '데이터가 오래되어도 참조만 하면 된다'는 처리를 손자나 증손자 세트에 한다.
    • 부모(Master), 자식(Slave) 관계

 

100% 장애 대책은 있을 수 없다. 따라서 다음 단계로는 '데이터의 백업과 복구'에 대해 생각해야한다.

 

 

성능을 추구하기 위한 다중화 - Shared Nothing

Shared Disk

  • 복수의 서버가 1대의 디스크를 사용
  • DB 서버를 늘려도 무한으로 처리율이 향상되지 않고 한계점에 도달한다.
  • 저장소가 공유 자원이라 쉽게 늘리기 어렵고 DB 서버 대수가 증가할수록 DB 서버간의 정보 공유를 위한 오버헤드가 크기 때문.

 

Shared Nothing

  • 네트워크 이외의 자원을 모두 분리하는 방식.
  • 서버와 저장소의 세트를 늘리면 병렬처리 되기 때문에 선형적으로 성능이 향상된다.
  • 저장소가 병목이 되는 것을 방지해 세트에 비례해서 처리율이 증가한다.
  • 구글에서 개발한 구조를 '샤딩 (Sharding)' 이라 부른다.
  • 같은 구성의 DB 서버를 횡으로 나열하기 때문에 구조가 간단하며 원칙적으로 서버 수에 비례해 저장소가 늘어남.

 

  • 저장소를 공유하지 않으므로 각각의 DB 서버가 동일한 1개의 데이터에 액세스 할 수 없다.
  • 따라서 합산하는 경우 집계하는 정리 서버 필요
  • 커버링 구성. DB 서버가 하나가 다운되었을 때 다른 DB서버가 이를 이어받아 처리.

 

 

시스템이 충족해야하는 요건에 따라 최적의 아키텍처를 선택하여 사용한다.