Tan Kim

replication

데이터베이스 고가용성 / 복제

역할 개념

Principal (주 서버)

  • Database Mirroring에서 실제 읽기/쓰기 요청을 처리하는 주 서버
  • 클라이언트는 항상 Principal에 연결됨
  • 장애 발생 시 Mirror가 Principal로 승격

Mirror (미러 서버)

  • Principal의 트랜잭션 로그를 실시간으로 받아 동기화하는 서버
  • 평소에는 클라이언트 요청을 처리하지 않음 (읽기도 불가)
  • Principal 장애 시 자동 또는 수동으로 Failover

Witness (감시 서버)

  • Database Mirroring에서 자동 Failover를 위한 중재자 역할
  • Principal과 Mirror 간 통신 장애 시 어느 쪽이 Principal이 될지 결정 (쿼럼)
  • SQL Server Express 등 경량 인스턴스로 구성 가능

Principal + Mirror + Witness 구성 시 자동 Failover 가능
Principal + Mirror만 있으면 수동 Failover만 가능

Slave (슬레이브)

  • Master-Slave 복제 구조에서 Master의 데이터를 복제받는 서버
  • 주로 읽기 전용 쿼리를 담당해 Master의 부하를 분산
  • Master 장애 시 Slave 중 하나를 Master로 승격 (수동 또는 자동)
역할 쓰기 읽기
Master O O
Slave X O

아키텍처 개념

Always On (SQL Server Always On)

  • SQL Server의 고가용성/재해복구 솔루션
  • Always On Availability Groups (AG): 여러 DB를 묶어 Primary/Secondary로 구성
    • Secondary는 읽기 전용으로 활용 가능 (Read Scale-Out)
    • 자동 Failover 지원
  • Always On Failover Cluster Instance (FCI): 서버 인스턴스 전체를 클러스터로 묶음
  • Database Mirroring의 후속 기술 (Mirroring은 deprecated)
Primary Replica ──▶ Secondary Replica 1 (자동 Failover 대상)
                └──▶ Secondary Replica 2 (읽기 전용)

Federated (페더레이션 / 샤딩)

  • 데이터를 여러 서버에 수평 분할(Sharding)하여 저장하는 방식
  • 각 서버는 전체 데이터의 일부만 보유
  • 단일 서버로 처리하기 어려운 대용량 데이터에 적합
  • 조인이나 트랜잭션이 복잡해지는 단점 존재
Federated DB
├── Shard 1: user_id 1 ~ 100만
├── Shard 2: user_id 100만 ~ 200만
└── Shard 3: user_id 200만 ~ 300만

방식 비교

방식 주요 목적 자동 Failover 읽기 분산 쓰기 분산
Database Mirroring 고가용성 △ (Witness 필요) X X
Always On AG 고가용성 + 읽기 분산 O O X
Master-Slave 읽기 분산 O X
Federated 쓰기/저장 분산 X O O