검색
회원가입로그인

11장: 복제 – 레플리카셋 구성 및 관리

MongoDB 복제본 세트(Replica Set)의 이해

몽고디비의 강점 중 하나는 데이터의 안정성과 고가용성을 보장하는 복제 기능이다. 복제본 세트(Replica Set)는 동일한 데이터를 여러 서버에 복제 저장하여, 서버 장애 상황에서 자동으로 대체 서버로 운영을 넘겨주는 구조다. 이로써 시스템 중단 없는 서비스와 데이터 손실 최소화가 가능해진다. 실무 환경에서는 세 대 이상의 서버로 구성하며, 하나는 주 서버(Primary), 나머지는 보조 서버(Secondary)로 동작한다. 주 서버에서 모든 쓰기 연산이 처리되고, 변경 사항이 자동으로 모든 보조 서버에 동기화된다.

복제본 세트 구성: 실제 구축 예시

먼저 각 서버(혹은 가상 머신)에 몽고디비를 설치한다. 설치 경로와 데이터 저장 디렉터리는 서로 다르게 지정해야 하며, 설정 파일(mongod.conf)에서 포트, DB 경로, 그리고 replica set 이름을 일치시킨다. 예시로, 세 대의 서버를 준비한다면, 각각 다음과 같은 옵션으로 서버를 띄운다.

# 각 서버에서 예시
mongod --port 27017 --dbpath "/data/db1" --replSet "rs0" --bind_ip_all

모든 노드(서버)가 정상적으로 실행되면, 한 대의 서버에 접속해 복제본 세트를 초기화한다. mongosh에 접속한 뒤, 아래와 같이 입력한다.

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "서버1_IP:27017" },
    { _id: 1, host: "서버2_IP:27017" },
    { _id: 2, host: "서버3_IP:27017" }
  ]
})

이 명령으로 복제본 세트가 시작되고, 곧 주 서버와 보조 서버들이 역할을 자동으로 선택한다. 만약 서버에 이상이 생겨 주 서버가 동작을 멈추면, 남은 보조 서버 중 하나가 자동으로 새 주 서버로 승격된다. 이 자동 장애 조치는 downtime 없는 서비스 구현의 핵심이다.

복제본 세트의 관리와 운영 포인트

구성 이후에는 멤버의 상태를 주기적으로 점검해야 한다. rs.status() 명령으로 각 노드의 현재 상태, 로그, 최근 동기화 시점 등을 한눈에 파악할 수 있다. 새로운 노드 추가는 rs.add("서버4_IP:27017")처럼 명령을 실행하면 된다. 반대로, 결함이 있거나 사용 중단할 서버는 rs.remove("서버_IP:포트")로 쉽게 제거할 수 있다.

보조 서버에서는 읽기 작업도 선택적으로 허용할 수 있다. 트래픽 분산이나 특정 백업/분석 작업의 부하 분산에 활용된다. 단, 데이터 최신성 보장(일관성)이 정말로 중요한 환경에서는 주 서버로만 읽기를 제한할 수 있다.

데이터 복구, 백업, 장애 대처 등 실전 환경에서는 복제본 세트를 바로 활용할 때 얻는 이점이 크다. 특히 몽고디비는 복제본 세트를 기본 기능으로 내장하고 있어, 별도의 솔루션이나 복잡한 스크립트 없이 손쉽게 고가용성 구조를 구현할 수 있다.

실무 팁: 주의할 점과 베스트 프랙티스

운영 환경에서는 각 노드를 서로 다른 물리/가상 머신, 다른 네트워크 대역에 분산 배치한다. 감시용 'Arbiter' 노드를 포함해 홀수 개 멤버로 구성하면, 장애 상황에서 안정적으로 투표(선출) 프로세스를 진행할 수 있기 때문이다. 또한 보안 인증 및 방화벽, 네트워크 구성도 꼼꼼히 체크해야 한다. 항상 rs.status()로 클러스터 상태를 모니터링하며, 서버별 로그를 정기적으로 백업하고 주요 이벤트를 기록하는 것이 안전한 운영의 핵심이다.

복제본 세트 구성과 운영은 몽고디비의 신뢰성과 확장성을 극대화하는 첫 걸음이다. 제대로 설정만 해두면 시스템은 항상 가용하고, 데이터 손실 없이 장애에 유연하게 대응할 수 있다. 복제본 세트는 몽고디비 실전 운영의 필수 전략임을 꼭 명심하자.

공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기
조회수 : 19
heart