복제는 동일한 데이터를 여러 서버에 분산하여 관리하는 것이다.

MongoDB는 하나 이상의 노드로 데이터를 복사할수 있으며, 변경이 발생하면 지속적으로 동기화한다. 이러한 유형의 복제는 복제 세트(Replica Set)라 불리는 메커니즘을 통해 제공되며, 이 메커니즘에서는 노드 그룹이 자동으로 데이터를 동기화하고 노드가 사라지면, 장애조치를 수행하도록 구성한다.

Primary 노드에서 모든 쓰기 연산이 수행되고 Secondary 노드에서 읽기를 수행하게 된다. 쓰기 연산은 비동기 적으로 세컨더리 노드에 적용된다.

11.1.2 복제의 사용 예와 한계

복제는 중복성, 장애복구, 유지보수, 로드밸런싱 등의 기능을 한다.

중복성

복제는 일차적으로 중복성을 위해 설계된다. 중복성으로 인해 복제 노드는 프라이머리 노드와 동기화된 상태를 유지한다. 이 복제 노드는 동일한 IDC 내체 위치하거나 아니면 다른 IDC에 지리적으로 분산하여 안전성을 높일 수 있다. 프라이머리 노드에 장애나 재해상황이 발생 하였을때 복구에 도움을 줄 수 있다.

또한, 복제 지연을 일부러 두는 경우도 있다. 예를 들어, 프라이머리 노드에 잘못된 명령을 날려서 컬렉션이나 데이터를 실수로 날리게 될 경우 대비책이 될 수 있다. 프라이머리 노드의 데이터는 날아갔지만, 복제 노드에는 복제 지연 이전의 데이터는 살아있을 것이기 때문이다.

장애복구

프라이머리 노드의 장애시 복제 노드를 프라이머리 노드로 전환하여 비상상황 시에 장애복구를 할 수 있다.

유지보수

리소스를 많이 사용하는 연산을 프라이머리 노드가 아닌 복제 노드에 실행함으로써 DB 유지보수 작업을 용이하게 할 수 있다. 예를 들어, 리소스가 많이 필요한 대용량 인덱스 구축 작업을 세컨더리 노드에서 수행 한 뒤, 프라이머리 노드와 세컨더리 노드를 Role Change하게 되면 다운타임을 최소화하면서 유지보수를 할 수 있다.

로드밸런싱

읽기 위주의 어플리케이션에서 복제는 MongDB를 확장하는 가장 쉬우면서 단순한 방법이다.

하지만, 모든 경우에 도움이 되는 것은 아니다. 아래의 경우 도움이 되지 않는다.