MongoDB Replica Set이란?

누군가·2024년 1월 12일
0

MongoDB Replica Set

목록 보기
2/4

※ 다크모드로 읽으시는 것을 추천드립니다.

Replica Set

Replica Set은 항상 하나의 Primary 노드와 1개 이상의 Secondary 노드로 구성됩니다.

Replica Set이란?

  • DB의 데이터들을 여러 서버에 나누어 동기화하는 것을 의미하며,
  • 여러 서버가 모두 동일한 데이터를 가지므로 하나의 서버가 다운되더라도 제공하는 서비스에 문제가 생기지 않고 운영할 수 있습니다.
  • 각 서버에 데이터 복구/리포팅/백업 역할을 설정할 수도 있습니다.

데이터의 모든 변경 사항은 oplog에 기록을 하게 되며, Secondary 노드는 Primary 노드의 oplog를 전달받아서 데이터 동기화를 진행 하게 됩니다.

  • oplog (Operations Log) : Replica Set의 데이터 동기화를 위해 내부에서 발생하는 모든 동작의 로그를 기록한 것

Replica Set Node

  • Primary: 클라이언트가 DB에서 읽기 및 쓰기 작업을 합니다. (수행한 작업에 대해 oplog 저장)
  • Secondary: Primary로부터 데이터를 동기화 합니다. (Primary에서 저장된 oplog를 확인하여 동일한 작업 수행)
    Primary에 장애가 발생한 경우, 투표를 통해 Primary가 될 수 있습니다.
    클라이언트 단에서 read preference 설정을 하면 secondary도 read operation을 수행할 수 있습니다.
  • Arbiter: 데이터를 동기화 하지 않으며 Primary 선정을 위한 투표권만 주어집니다.
    일반적으로 잘 사용되지 않는 노드입니다.

대표적인 Replica Set 구성

  • Replica Set은 노드 중 반드시 하나의 Primary 노드를 지정해줘야 하며, 1개 이상의 Secondary 또는 Arbiter 노드로 구성됩니다.

  • P-S-S (Primary + Secondary + Secondary)
    하나의 Primary와 두 개 이상의 Secondary 노드로 이루어진 구성입니다.
    Primary에서 문제가 생기더라도 2개 이상의 Secondary 노드가 대신할 수 있으므로 높은 안정성을 보장할 수 있습니다.

  • P-S-A (Primary + Secondary + Arbiter)
    Arbiter 노드는 Primary 또는 Secondary 노드에 비해 서버 리소스가 많이 필요하지 않다는 장점이 있지만 데이터 동기화에 대한 안정성이 상대적으로 낮은 편입니다. (안정적이지 않다는 뜻은 아닙니다.)
  • Heartbeat란 Replica Set 내의 구성원들 사이에 주기적으로 10초에 한번씩 ping을 보내 서로의 노드를 확인하는 작업을 말하며, 이 기능을 통해 노드 및 DB의 장애를 파악합니다.

Replica Set 선거 방식

Replica Set의 선거 방식은 구성원 과반이 동의하는 것을 기반으로 합니다.

  • Replica Set으로 구성된 MongoDB에서 장애가 발생하면 우선 순위 (Priority)가 가장 높은 Secondary 노드에서 선거를 개최하고 Primary 후보가 됩니다.
  • 이후 Secondary 노드들과 Arbiter 노드들이 찬성표를 전달하여 과반이 넘으면 후보에 오른 Secondary 노드가 Primary 노드로 선출되며 선거가 종료됩니다.
  • 2대의 노드로 구성했을 경우 Primary 노드에 장애 발생 시 Secondary 노드가 혼자만 남기 때문에 “Heartbeat” 역시 동작할 수 없는 환경이 되고, 선거에 동의할 노드가 1대 밖에 남지 않기 때문에 선거 자체가 열리지 않습니다.
  • 2대의 노드가 정상적으로 작동하더라도 Primary 스스로 Heartbeat로 인식할 수 있는 구성원 수가 과반이 아니므로 자동으로 Secondary로 전환됩니다.

Reference

https://velog.io/@tngusqkr1/mongoDB-cluster-구성하기

https://chjs93.tistory.com/31

https://medium.com/@zzanzu/mongodb-replica-set-구축하기-be7df973801d

https://rastalion.me/mongodb-replica-set-구성하기/

profile
개발 중에 알게된 내용을 공유합니다 (나도 기억할겸)

0개의 댓글