데이터베이스 고가용성 / 복제
역할 개념
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 |