MongoDB Replica 초기 동기화 관리

nagang·2024년 1월 11일
0

개요

실제 운영 중인 MongoDB 중 replicaSet 구성 인원을 추가하는 상황에서 primary DB로 부하를 주지 않기 위해 찾아놓은 설정을 정리한 글이다。

settings.chainingAllowed

default: true

true: replica set secondary 구성원은 다른 secondary구성원의 데이터를 복제할 수 있다.

false: secondary 구성원은 primary 구성원에서만 데이터를 복제할 수 있다.

해당 설정이 비활성화 되어도 replSetSyncFrom 옵션이 다른 secondary에서 복제할 수 있도록 지정할 수 있다.

설정 비활성화 하기

cfg = rs.config()
cfg.settings.chainingAllowed = false
rs.reconfig(cfg)

replSetSyncFrom

현재 기본 동기화 대상을 일시적으로 재정의 한다.
다양한 패턴을 테스트하고 집합 구성원이 원하는 호스트에서 복제되지 않는 상황에서 유용하다.

use admin
db.adminCommand({replSetSyncFrom: "hostname:<:port>"})

mongo shell 명령어로도 사용할 수 있다.

rs.syncFrom("hostnmae:<:port>")

replSetSyncFrom을 실행할 때 초기 동기화 작업이 진행 중인 경우 진행 중인 총기 동기화를 중지하고 새 대상으로 동기화 프로세스를 다시 시작한다.

Persistence

replSetSyncFrom은 일시적으로 재정의 하는 것으로 다음 상황에서 기본 동기화 동작으로 되돌아간다.

  • service mongod가 다시 시작되는 경우
  • 동기화 대상 간의 연결이 닫히는 경우
  • 동기화 대상이 replica set의 다른 구성원보다 30초 이상 뒤처지는 경우

테스트

settings.chainingAllowed 비활성

비활성

cfg = rs.config()
cfg.settings.chainingAllowed = false
rs.reconfig(cfg)
rs.add("hostname:27017")

rs.status() //  syncSourceHost 는 primary host로 설정된다.

syncFrom으로 복제할 대상 DB 설정

rs.add("hostname:27017")

동기화 대상 서버로 mongo shell 접속
mongo
use admin
db.auth("****", "****")
rs.syncFrom("대상 DB host:27017")

rs.status() //  syncSourceHost、 syncingTo가 설정한 대상 DB로 변경된다。

대상 서버에서 db.currentOp()으로 실제 동기화 작업이 진행 중인 것도 확인 가능하다。

참고 링크
https://www.mongodb.com/docs/manual/tutorial/manage-chained-replication/
https://www.mongodb.com/docs/v4.2/reference/replica-configuration/#rsconf.settings.chainingAllowed
https://www.mongodb.com/docs/v4.2/reference/command/replSetSyncFrom/#dbcmd.replSetSyncFrom

profile
backend 개발자입니다.

0개의 댓글