리플리카셋의 개념과 동작 원리

리플리카셋 - ReplicaSet

  • primary 서버 : 리플리카에서 첫 번째 입력을 담당하는 서버
  • secondary 서버 : primary 서버를 제외한 나머지 서버
  • primary 서버에 문제가 생기게 되면 자동으로 secondary 서버에서 데이터 입출력을 담당

리플리카셋의 주요 특징

  • 프라이머리 서버는 세컨더리 서버를 2초단위로 상태 체크하여 데이터 동기화를 위한 HeartBeat 확인
  • HeartBeat 수신 결과, 세컨더리 서버를 사용할 수 없는 상황이 되더라도 데이터 복제만 중단될 뿐,
    프라이머리 서버는 데이터 수신/저장을 계속 담당
  • 세컨더리 서버가 복구되면 그간의 밀린 데이터를 복구하기 위해 프라이머리 서버는 Oplog를 저장하는데,
    이후 세컨더리 서버 복구 시, 자동 동기화
  • 프라이머리 서버가 장애 상황이 된다면, 세컨더리 서버를 프라이머리 서버로 만듦
  • 리플리카셋(복제 집합)은 한 개의 primary와 두 개의 secondary로 구성
  • 복제 집합으로 구성된 각각의 노드는 자신을 제외한 다른 노드들이 죽었는지 살았는지를 HeartBeat를 이용해 주기적으로 점검
  • 몽고디비의 HeartBeat는 2초 단위로 수행되며, HeartBeat를 받은 서버는 자신의 상태 코드를 HeartBeat를 요청한 서버에게 보내줌
  • 프라이머리 서버의 HeartBeat는 항상 복제 집합을 구성하고 있는 노드의 개수의 과반수만큼을 유지해야 함
  • 만약 프라이머리 서버가 과반수의 HeartBeat를 가지고 있지 않는다면,
    해당 서버는 세컨더리 서버로 전환되고 전체 복제 집합은 프라이머리 서버 부재에 따른 투표를 시행
  • 프라이머리가 될 수 있는 자격 조건으로는 priority(마스터가 될 수 있는 우선순위),
    votes(자신을 포함한 복제 집합의 노드 개수의 과반수 투표) 등


MongoDB 복제 시스템의 한계

  • 한 복제 집합을 구성할 수 있는 노드의 최대 개수는 12개
  • 한 복제 집합에서 투표를 할 수 있는 노드의 최대 개수는 7개
  • 슬레이브가 아무리 빨리 데이터를 동기화한다고 해도,
    마스터와의 통신 지연 시칸만큼의 차이를 가질 수 있음
  • 부하를 견디지 못해 마스터 서버가 죽어버렸을 경우,
    Oplog에 동기화 되지 않은 채 남아있는 데이터 연산을 잃어버리는 현상이 발생할 수 있음
  • 저널링 파일에 데이터를 저장하는 방법의 경우에도 group commits 주기 (100ms) 안에 데이터가 존재하는데도
    시스템이 다운되어 메모리에 저장된 데이터가 날아갔을 경우 복구 불가능

리플리카셋 구성

프라이머리 서버 실행

mongod --replSet downSet --dbpath c:\data --port 20000

첫 번째 세컨더리 서버 사용 폴더 생성

mkdir c:\data2

첫 번째 세컨더리 서버 실행

mongod --replSet downSet --dbpath c:\data2 --port 20001

두 번째 세컨더리 서버 사용 폴더 생성

mkdir c:\data3

두 번째 세컨더리 서버 실행

mongod --replSet downSet --dbpath c:\data3 --port 20002

프라이머리 서버 접속 / config 생성

mongo --port 20000
var config = 
{
    _id:'downSet',
    members:
  	[
    	{_id:0,
         host:'localhost:20000'
        },
    	{_id:1,
         host:'localhost:20001'
        },
    	{_id:2,
         host:'localhost:20002'
        }
    ]
}

rs.initiate(config);

  • 20000 - Primary
    20001, 20002 - Secondary
    20000 shutdown 시 , 자동적으로 20001 / 20002 중 한 서버가 Primary로 승계됨

장애 발생 시 대응

리플리카셋 초기 세팅


프라이머리 서버 장애 발생


새로운 프라이머리 서버 채택

'DataBase > MongoDB' 카테고리의 다른 글

MapReduce 실행하기  (0) 2021.10.18
MapReduce 개념 살펴보기  (0) 2021.10.14
MongoDB를 이용한 복제 방법 살펴보기  (0) 2021.10.12
MongoDB의 샤딩에 대해 알아보기  (0) 2021.10.06
MongoDB의 Index 기능 배우기  (0) 2021.10.05

+ Recent posts