ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MongoDB Replication이란?
    프로젝트/mongoDB 2024. 3. 2. 00:01
    728x90

    개요

    공식문서를 기반으로  MongoDB Replication에 대해 알아보는 시간을 가져보고자 합니다.

     

     

    Replication이란?

    Replication은 복제라는 뜻을 가지며 컴퓨터 과학에서는 데이터 저장과 백업을 하는 방법과 관련이 있습니다.

    기존 데이터를 중복으로 여러 개 복제해 둠으로써 단일 데이터베이스의 데이터에 문제가 생기는 상황에 장애 내결함성을 제공합니다.

     

    또한 데이터가 여러군데 복제되어 있으므로 읽기 작업 또한 여러 군데 데이터베이스에서 수행할 수 있습니다.

    즉, 읽기 성능이 증가할 수 있습니다.

     

    Primary와 Secondary

    https://www.mongodb.com/docs/manual/replication/

    Replication을 수행하면 데이터베이스가 N개가 되며 여기서 하나의 데이터베이스를 Primary 그 외의 것들은 Secondary라고 부릅니다.

     

    Primary 데이터베이스는 모든 쓰기 작업을 수행합니다.

    그리고 모든 변경 사항을 oplog(로그)에 기록합니다.

    해당 변경을 주기적으로 Secondary에 반영하면 Primary와 동일한 데이터를 가지는 Secondary Replication이 생성됩니다.

     

    이때 복제는 비동적으로 일어나기 때문에 쓰기 작업을 세컨더리로 복제하는데 약간의 지연 시간(Replication Lag)이 소요될 수 있습니다.

    또한 일부 노드에 장애가 발생하더라도 나머지에는 정상적으로 복제가 이루어질 수 있습니다.

     

    만약 Primary가 죽으면 어떻게 될까요?

    Primary에 문제가 있다고 판단되면 선거를 통하여 새로운 Primary를 선출합니다.

    그렇다면 몇가지 관점이 궁금해집니다.

     

    1. 문제가 있다고 판단은 어떻게 할 것인가?

    2. 선거는 어떤 과정을 통해 이루어지는가?

     

    Primary가 문제가 있다고 판단하는 과정

    Primary가 다른 복제본들과 통신을 수행하지 않으면 적합한 Secondary가 자신을 새 Primary로 지명하기 위해 선거를 요청합니다.

    2초 간격으로 Heartbeat라고 하는 생존신고를 서로 계속진행합니다.

    기본값으로 10초 이내에 Heartbeat가 돌아오지 않으면 장애라고 판단합니다.

     

    기본값을 낮추게 되면 장애를 더 빠르게 감지할 수 있지만, 일시적인 네트워크 지연만으로도 더 자주 선거가 발생할 수 있게 되고 오히려 비용이 증가할 수 있습니다.

     

    선거는 어떤 과정을 통해 이루어지는가?

    새로운 Primary가 선출되는 과정

     

    선거를 통하여 어떤 복제본이 Primary가 될지 결정할 수 있습니다.

    이때 Primary가 일시적으로 없기 때문에 쓰기작업을 수행될 수 없으나 Secondary에 의해 읽기 쿼리는 계속 제공할 수 있습니다.

     

    선거 중 우선순위가 높은 Secondary를 Primary로 선출하려고 최선의 노력을 기울입니다.

    하나 우선순위가 낮은 Secondary도 일시적으로 Primary가 될 수 있습니다.

    최종적으로는 우선순위가 높은 Secondary가 Primary가 될 때까지 선거를 계속 수행합니다.

     

    모든 노드가 투표권을 가지지 않는다 (votes 0 = 투표권이 없음)

     

    모든 Secondary라고 해서 투표를 할 수 있는 권한을 가지진 않습니다.

    투표권이 없는 Secondary도 데이터를 보유하고 있으며 읽기 쿼리를 계속 제공합니다.

    복제본에는 최대 50개가 가능하지만 이 중 투표할 수 있는 권한은 7개의 노드만 가집니다.

     

    이외에도 비용 제약으로 Secondary를 추가할 수 없는 경우에 투표권만 행사하는 Arbiter를 활용할 수 있습니다.

     

     

    Replication의 우선순위

    우선순위의 값은 0~1000 사이 10 진수 숫자를 가질 수 있습니다. (기본값은 1)

    Primary가 되는것을 막기 위해서는 우선순위를 0으로 설정하면 됩니다.

    Arbiter와 투표권이 없는 노드들도 우선순위는 0을 가져서 Primary가 되지 않습니다.

     

    네트워킹 제한이 있거나 리소스가 제한된 구성원과 같은 복제본 세트의 일부 구성원은 장애 조치 시 주 구성원이 될 수 없어야 합니다.

    위의 그림처럼 Data Center 3의 경우에 선거 구성원이 되면 안 된다고 판단되는 경우 우선순위 0을 갖도록 구성할 수도 있습니다.

     

     

     

     

     

     

    참고자료

    https://www.mongodb.com/docs/manual/replication/

    https://ko.wikipedia.org/wiki/%EB%A0%88%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98

     

    '프로젝트 > mongoDB' 카테고리의 다른 글

    MongoDB 인덱스 운영법  (0) 2024.02.22
    MongoDB 인덱스란?  (0) 2024.02.15
    Spring Boot + Kotlin + MongoDB로 CRUD 해보기  (0) 2024.02.12
    MongoDB 동시성 제어  (0) 2024.02.11
    MongoDB Data Modeling  (0) 2024.02.06

    댓글

Designed by Tistory.