Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

자체 관리형 복제본 세트의 구성원 재동기화

이 페이지의 내용

  • 절차

복제 프로세스가 너무 늦어져 복제본 세트 멤버가 아직 복제하지 못한 oplog를 프라이머리가 덮어쓰면 복제본 세트 멤버는 '부실' 상태가 됩니다. 멤버는 이를 따라잡을 수 없고 '부실' 상태가 됩니다. 이 경우 해당 멤버의 데이터를 제거하고 초기 동기화를 수행하여 멤버를 완전히 다시 동기화해야 합니다.

이 튜토리얼에서는 부실 멤버를 다시 동기화하는 방법과 다른 멤버의 시드 데이터를 사용하여 새 멤버를 만드는 방법을 모두 설명하며, 이 두 가지 방법 모두 복제본 세트 멤버를 복원하는 데 사용할 수 있습니다. 멤버를 동기화할 때 시스템이 데이터를 대량으로 이동할 수 있는 대역폭을 보유한 시간을 선택합니다. 사용량이 적은 시간이나 유지 관리 기간 동안 동기화를 예약합니다.

MongoDB는 초기 동기화를 수행하기 위한 두 가지 방법을 제공합니다.

참고

쓰기 쿼럼 변경을 방지하려면 한 번에 두 개 이상의 복제본 세트 멤버를 교체하지 마세요.

경고

초기 동기화 과정에서 mongoddbPath 디렉토리의 콘텐츠를 제거합니다.

이 절차는 MongoDB의 일반 프로세스를 이용하여 복제본 세트 동기화를 진행합니다. 멤버의 현재 데이터를 저장합니다. MongoDB 초기 동기화 프로세스에 대한 개요는 복제본 세트 동기화 섹션에서 확인 가능합니다.

초기 동기화 작업은 설정하다 의 다른 멤버에게 영향 소스 멤버에 추가 트래픽을 생성할 수 있습니다. 동기화 멤버에는 액세스할 수 있고 최신 상태인 다른 설정하다 멤버가 필요합니다.

인스턴스에 데이터가 없는 경우 자체 관리 복제본 세트에 멤버 추가 또는 자체 관리 복제본 세트 멤버 교체 절차에 따라 복제본 세트에 새 멤버를 추가할 수 있습니다.

dbPath 디렉토리의 콘텐츠 없이 인스턴스를 다시 시작하여 이미 세트 멤버인 mongod이 초기 동기화를 수행하도록 강제할 수도 있습니다:

  1. 멤버의 mongod 인스턴스를 중지합니다. 정상적으로 종료하려면 db.shutdownServer() mongosh의 메서드 또는 Linux 시스템의 경우 mongod --shutdown 옵션을 사용합니다.

  2. (선택 사항) 멤버의 dbPath 디렉토리에서 모든 데이터와 하위 디렉토리의 백업을 생성합니다. 전체 백업이 필요하지 않은 경우에는 diagnostic.data 디렉토리만 백업하여 문제 발생 시 유용한 문제 해결 데이터를 보존하는 것이 좋습니다. 자세한 내용은 풀타임 진단 데이터 캡처에서 확인할 수 있습니다.

  3. 멤버의 dbPath 디렉토리에서 모든 데이터 및 하위 디렉토리를 삭제합니다.

  4. mongod 프로세스를 다시 시작합니다.

이 시점에서 mongod은 초기 동기화를 수행합니다. 초기 동기화 프로세스의 길이는 데이터베이스 크기와 복제본 세트 멤버 간 네트워크 지연 시간에 따라 달라집니다.

이 방식은 복제본 세트 기존 멤버의 데이터 파일을 이용하여 신규 또는 부실 멤버를 '시딩'합니다. 새 멤버가 oplog를 따라잡을 수 있도록 데이터 파일이 충분히 최신 상태여야 합니다. 그렇지 않으면 멤버가 초기 동기화를 수행해야 합니다.

데이터 파일을 스냅샷이나 직접 복사본으로 캡처할 수 있습니다. 그러나 대부분의 경우 파일 복사 작업 중 데이터 파일이 변경되므로 실행 중인 mongod 인스턴스에서 다른 인스턴스로 데이터 파일을 복사할 수 없습니다.

중요

데이터 파일을 복사하는 경우 복사본에 local 데이터베이스의 콘텐츠가 포함되어 있는지 확인합니다.

데이터 파일에 mongodump 백업을 사용할 수 없습니다. 스냅샷 백업만 사용할 수 있습니다. 실행 중인 mongod 인스턴스의 일관된 스냅샷을 캡처하는 방법에 대한 자세한 내용은 자체 관리 배포를 위한 백업 방법 문서를 참조하세요.

"seed" 소스에서 데이터 파일을 복사한 후, mongod 인스턴스를 새 members[n]._id로 시작하고 복제본 세트의 현재 상태를 반영할 때까지 oplog의 모든 작업을 적용하도록 허용합니다. 복제본 세트의 현재 상태를 확인하려면 rs.printSecondaryReplicationInfo() 또는 rs.status()를 사용합니다.

돌아가기

프라이머리 강제 실행

이 페이지의 내용