Database/MongoDB

[MongoDB] MongoDB Replication

noahkim_ 2025. 8. 5. 21:54

1. How does replication work in MongoDB?

복제

  • 데이터를 여러 복제본으로 만들어서 물리적으로 분리된 서버들에 보관하는 것

 

Replica Set

  • 하나의 Primary 노드 (쓰기 연산)
  • 여러 Secondary 노드 (읽기 연산)

 

Election

  • Primary 노드가 다운되면, 선거를 통해 Secondary 노드 중 하나가 새로운 Primary 노드로 승격됨
  • 장애 났던 Primary 노드가 복구 되면, Secondary 노드로 복귀 및 동기화를 수행함

 

2. How do I enable replication in MongoDB

사전 준비

  • 서버 3대 이상 필요
  • 각 서버는 기본 포트(27017)로 통신 가능해야 함
  • private ip로 서로 통신 가능해야 함 (외부 접근 차단)

 

복제 시작

  1. mongod 실행
  2. Replica Set 초기화 (Primary 노드에서 실행)
  3. Replica Set 확인

 

명령어) mongod

더보기
mongod --auth --replSet "rs0" --bind_ip localhost,<서버호스트명 또는 IP>
  • --replSet "rs0": 복제 세트 이름 설정
  • --bind_ip: 외부에서 접근 가능한 IP 또는 호스트 지정

 

명령어) 초기화

더보기
rs.initiate({
  _id :  "rs0",
  members: [
    { _id: 0, host: "mongodb0.example.net:27017" },
    { _id: 1, host: "mongodb1.example.net:27017" },
    { _id: 2, host: "mongodb2.example.net:27017" }
  ]
})

 

명령어) 복제 확인

더보기
rs.conf()

 

구체적

rs.status()

 

3. How does MongoDB detect replication lag?

복제 지연

  • Primary 노드에서 데이터가 업데이트된 후, 해당 변경 사항이 Secondary 노드로 복제되기까지 걸리는 시간 차이
  • 지속될 경우 문제가 생길 수 있음

 

명령어) 복제 지연 확인

더보기
rs.printSecondaryReplicationInfo()

 

예시) 복제 지연 확인

더보기
source: mongo-secondary-0:27017
{
  syncedTo: 'Tue Aug 05 2025 14:44:19 GMT+0000 (Coordinated Universal Time)',
  replLag: '0 secs (0 hrs) behind the primary '
}
---
source: mongo-secondary-1:27017
{
  syncedTo: 'Tue Aug 05 2025 14:44:19 GMT+0000 (Coordinated Universal Time)',
  replLag: '0 secs (0 hrs) behind the primary '
}
  • syncedTo: Secondary가 Oplog 복제를 완료한 시간

 

원인

원인 설명 해결방법
Latency
노드 간의 연결 속도가 느리거나 패킷 손실 발생 시 지연될 수 있음
진단: ping, traceroute
Disk Throughput - Secondary가 데이터를 디스크에 flush 할 경우
- 네트워크 너머에 있는 디스크 접근하는 구조일 경우 자주 발생
진단: vmstat, iostat
Concurrency
Primary에서 오래 걸리는 작업이 있으면 Secondary가 복제를 따라잡기 어려움. 
분석: slow query, DB profiler
Write Concern 설정 문제
너무 많은 쓰기 작업이 Primary에 몰릴 경우, Secondary가 따라오지 못함. 
writeConcern: "majority"
주요 노드에 안전하게 복제되도록 보장

 

4. What is the difference between replication and sharding?

구분 ✅ Replication (복제) ✅ Sharding (샤딩)
동작 Primary의 데이터를 Secondary로 그대로 복사
데이터를 샤드 키 기준으로 나눠 여러 서버에 분산 저장
목적 - 장애 발생 시 백업 기능
- 데이터 가용성 확보
수평 확장을 통한 성능 향상
데이터 구조 모든 서버가 동일한 데이터 전체를 가짐 각 서버는 데이터의 일부(샤드)만 가짐

 

5. Does replication affect latency?

항목 설명 특징
쓰기 지연 큰 영향 없음 기본적으로 Primary 서버에 쓰기가 이루어지기 때문
읽기 지연
- Primary에서 읽으면 변화 없음. 
- Secondary에서 읽도록하면 지연이 감소할 수 있음
지리적으로 가까운 노드에서 데이터를 제공할 수 있으므로
일관성 문제
eventual consistency를 감수해야 함
Secondary는 Primary보다 약간 늦게 동기화됨

 

 

출처