Replica Set은 MongoDB의 데이터 고가용성을 보장하기 위한 핵심 아키텍처 중 하나로, 데이터의 복제와 장애 조치를 제공하는 방식이다. 이를 사용하면 데이터를 여러 노드에 복제하여 데이터 손실을 방지하고, 한 노드에 장애가 발생했을 때 다른 노드가 역할을 승계할 수 있다.
구성 요소
Primary Node
- 데이터를 읽고 쓸 수 있는 유일한 노드
- 모든 클라이언트의 쓰기 연산이 primary에서 발생한다.
- Secondary node에 데이터를 복제한다.
- Primary는 모든 데이터 변경 사항을 Oplog에 기록하고, Secondary 노드는 이 oplog를 기반으로 데이터를 복제한다.
Secondary Node
- Primary의 데이터를 복제받는 노드: Primary의 oplog를 비동기적으로 복제함
- 기본적으로 읽기 전용, Primary에 장애 발생 시 새로운 Primary로 승격될 수 있음
readPreference 옵션을 통해 Secondary 노드에서 읽기를 수행할 수 있다.
Arbiter Node
- 데이터는 저장하지 않고 투표만 수행한다.
- 주로 홀수 노드 구성을 위해 사용된다.
- Primary 선출 시 투표권만 행사한다.
동작 방식
데이터 복제
- Primary 노드는 모든 클라이언트의 쓰기 연산을 처리한다.
- Secondary 노드는 Primary로부터 oplog(operations log)를 기반으로 데이터를 복제한다.
- 복제는 비동기 방식으로 이루어진다.
Failover
- Primary 노드가 다운되거나 네트워크 장애가 발생한 경우, 남은 Secondary 노드들이 투표를 진행한다.
- 투표를 통해 새로운 Primary 노드를 선출하고, 기존 Primary가 복구되면 Secondary로 전환된다.
Self-Healing
- Primary 장애 시 자동으로 새로운 Primary를 선출한다.
- Secondary 노드 중 하나가 Primary로 승격된다.
장점
- 고가용성: Primary 장애 시 자동으로 장애 복구
- 데이터 중복 방지 및 보존: 데이터 복제를 통해 데이터 손실 방지
- 수평 확장: Secondary 노드를 통해 읽기 부하 분산 가능
단점
- 쓰기 성능 제한: 쓰기는 Primary에서만 가능
- 복제 지연: Secondary 노드로 복제가 비동기적으로 진행되므로 지연 발생 가능
- 복잡성 증가: 설정 및 유지보수가 다소 복잡할 수 있음