실제 운영 중인 MongoDB 중 replicaSet 구성 인원을 추가하는 상황에서 primary DB로 부하를 주지 않기 위해 찾아놓은 설정을 정리한 글이다。
default: true
true: replica set secondary 구성원은 다른 secondary구성원의 데이터를 복제할 수 있다.
false: secondary 구성원은 primary 구성원에서만 데이터를 복제할 수 있다.
해당 설정이 비활성화 되어도 replSetSyncFrom 옵션이 다른 secondary에서 복제할 수 있도록 지정할 수 있다.
설정 비활성화 하기
cfg = rs.config()
cfg.settings.chainingAllowed = false
rs.reconfig(cfg)
현재 기본 동기화 대상을 일시적으로 재정의 한다.
다양한 패턴을 테스트하고 집합 구성원이 원하는 호스트에서 복제되지 않는 상황에서 유용하다.
use admin
db.adminCommand({replSetSyncFrom: "hostname:<:port>"})
mongo shell 명령어로도 사용할 수 있다.
rs.syncFrom("hostnmae:<:port>")
replSetSyncFrom을 실행할 때 초기 동기화 작업이 진행 중인 경우 진행 중인 총기 동기화를 중지하고 새 대상으로 동기화 프로세스를 다시 시작한다.
replSetSyncFrom은 일시적으로 재정의 하는 것으로 다음 상황에서 기본 동기화 동작으로 되돌아간다.
비활성
cfg = rs.config()
cfg.settings.chainingAllowed = false
rs.reconfig(cfg)
rs.add("hostname:27017")
rs.status() // syncSourceHost 는 primary host로 설정된다.
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