복제 세트는 oplogheartbeat라는 두가지 메커니즘을 사용한다.

오피로그

oplog는 캡드(capped) 컬렉션으로 되어있으며 데이터에 대한 모든 수정사항을 기록한다. (해당 oplog 컬렉션은 local 데이터베이스에 존재한다.)

여러 도큐먼트에 연산은 개별적으로 기록된다. 가령, multi: true 와 같은 대량 연산의 경우 영향 받는 각 도큐먼트에 대한 oplog가 개별적으로 생성된다.

프라이머리의 변경사항이 복제 노드에 전파되는 과정

프라이머리에 쓰기 작업이 수행될 경우 다음과 같은 순서를 거친다.

  1. 쓰기가 기록되고 프라이머리 노드의 oplog에 변경사항이 추가된다.
  2. 세컨더리 노드는 oplog에서 자신이 수행했던 타임스템프 이후의 변경사항을 질의한다.
  3. 만약 이후 변경사항이 있을 경우, oplog에서 조회된 변경사항에 대해 replay를 수행한 뒤 자신의 oplog에도 추가한다.

복제 중지

오피로그는 캡드 컬렉션이다. 만약, 세컨더리 노드가 오랜시간 오프라인 상태였을 경우, 프라이머리 노드의 oplog에 오래된 변경 사항은 이미 지워졌을수도 있다. 이럴 경우 복제는 더이상 할 수 없는 상태가 된다.

repl: replication data too stale. halting

이런 경우, 해결책은.. 프라이머리 데이터를 처음부터 다시 재동기화하는 방법 뿐이다.