자체 관리형 복제본 세트의 구성원 재동기화
이 페이지의 내용
복제 프로세스가 너무 늦어져 복제본 세트 멤버가 아직 복제하지 못한 oplog를 프라이머리가 덮어쓰면 복제본 세트 멤버는 '부실' 상태가 됩니다. 멤버는 이를 따라잡을 수 없고 '부실' 상태가 됩니다. 이 경우 해당 멤버의 데이터를 제거하고 초기 동기화를 수행하여 멤버를 완전히 다시 동기화해야 합니다.
이 튜토리얼에서는 부실 멤버를 다시 동기화하는 방법과 다른 멤버의 시드 데이터를 사용하여 새 멤버를 만드는 방법을 모두 설명하며, 이 두 가지 방법 모두 복제본 세트 멤버를 복원하는 데 사용할 수 있습니다. 멤버를 동기화할 때 시스템이 데이터를 대량으로 이동할 수 있는 대역폭을 보유한 시간을 선택합니다. 사용량이 적은 시간이나 유지 관리 기간 동안 동기화를 예약합니다.
MongoDB는 초기 동기화를 수행하기 위한 두 가지 방법을 제공합니다.
빈 데이터 디렉토리로
mongod
을 다시 시작하고 MongoDB의 일반적인 초기 동기화 기능으로 데이터를 복원합니다. 이 방법은 간단하지만 데이터를 교체하는 시간이 더 오래 걸릴 수 있습니다.멤버 자동 동기화에서 관련 내용을 확인할 수 있습니다.
복제본 세트의 다른 멤버가 최근 데이터 디렉토리 복제본을 사용하여 머신을 재시작합니다. 이 절차는 데이터를 빠르게 교체할 수 있지만 수작업 단계가 더욱 많이 필요합니다.
다른 멤버의 데이터 파일을 복사하여 동기화에서 관련 내용을 확인할 수 있습니다.
절차
참고
쓰기 쿼럼 변경을 방지하려면 한 번에 두 개 이상의 복제본 세트 멤버를 교체하지 마세요.
멤버 자동 동기화
이 절차는 MongoDB의 일반 프로세스를 이용하여 복제본 세트 동기화를 진행합니다. 멤버의 현재 데이터를 저장합니다. MongoDB 초기 동기화 프로세스에 대한 개요는 복제본 세트 동기화 섹션에서 확인 가능합니다.
초기 동기화 작업은 세트의 다른 멤버에 영향을 미치고 프라이머리에 추가 트래픽을 생성할 수 있습니다. 동기화 멤버에는 해당 세트에서 액세스 가능한 최신 상태인 다른 멤버가 필요합니다.
인스턴스에 데이터가 없는 경우 자체 관리 복제본 세트에 멤버 추가 또는 자체 관리 복제본 세트 멤버 교체 절차에 따라 복제본 세트에 새 멤버를 추가할 수 있습니다.
dbPath
디렉토리의 콘텐츠 없이 인스턴스를 다시 시작하여 이미 세트 멤버인 mongod
이 초기 동기화를 수행하도록 강제할 수도 있습니다:
멤버의
mongod
인스턴스를 중지합니다. 정상적으로 종료하려면db.shutdownServer()
mongosh
의 메서드 또는 Linux 시스템의 경우mongod --shutdown
옵션을 사용합니다.(선택 사항) 멤버의
dbPath
디렉토리에서 모든 데이터와 하위 디렉토리의 백업을 생성합니다. 전체 백업이 필요하지 않은 경우에는diagnostic.data
디렉토리만 백업하여 문제 발생 시 유용한 문제 해결 데이터를 보존하는 것이 좋습니다. 자세한 내용은 풀타임 진단 데이터 캡처에서 확인할 수 있습니다.멤버의
dbPath
디렉토리에서 모든 데이터 및 하위 디렉토리를 삭제합니다.
이 시점에서 mongod
은 초기 동기화를 수행합니다. 초기 동기화 프로세스의 길이는 데이터베이스 크기와 복제본 세트 멤버 간 네트워크 지연 시간에 따라 달라집니다.
다른 멤버의 데이터 파일 복사하여 동기화하기
이 방식은 복제본 세트 기존 멤버의 데이터 파일을 이용하여 신규 또는 부실 멤버를 '시딩'합니다. 새 멤버가 oplog를 따라잡을 수 있도록 데이터 파일이 충분히 최신 상태여야 합니다. 그렇지 않으면 멤버가 초기 동기화를 수행해야 합니다.
데이터 파일 복사
데이터 파일을 스냅샷이나 직접 복사본으로 캡처할 수 있습니다. 그러나 대부분의 경우 파일 복사 작업 중 데이터 파일이 변경되므로 실행 중인 mongod
인스턴스에서 다른 인스턴스로 데이터 파일을 복사할 수 없습니다.
중요
데이터 파일을 복사하는 경우 복사본에 local
데이터베이스의 콘텐츠가 포함되어 있는지 확인합니다.
데이터 파일에 mongodump
백업을 사용할 수 없습니다. 스냅샷 백업만 사용할 수 있습니다. 실행 중인 mongod
인스턴스의 일관된 스냅샷을 캡처하는 방법에 대한 자세한 내용은 자체 관리 배포를 위한 백업 방법 문서를 참조하세요.
멤버 동기화
"seed" 소스에서 데이터 파일을 복사한 후, mongod
인스턴스를 새 members[n]._id
로 시작하고 복제본 세트의 현재 상태를 반영할 때까지 oplog의 모든 작업을 적용하도록 허용합니다. 복제본 세트의 현재 상태를 확인하려면 rs.printSecondaryReplicationInfo()
또는 rs.status()
를 사용합니다.