mongosync 컷오버 프로세스 를 사용하여 마이그레이션 을 완료하고 애플리케이션 워크로드 를 소스에서 대상 클러스터 로 전송할 수 있습니다.
mongosync COMMITTED 상태 에 도달할 때까지 활성 상태로 유지되어야 합니다. 이렇게 하면 mongosync 에서 마이그레이션 중에 발생하는 추가 쓰기를 동기화 할 수 있습니다.
참고
애플리케이션 워크로드 를 대상 클러스터 로 전환하기 전에 항상 동기화 가 성공적인 했는지 확인해야 합니다. 자세한 내용은 데이터 전송 확인을 참조하세요.
단계
mongosync의 상태를 확인합니다.
전환 프로세스 를 시작하기 전에 진행률 엔드포인트를 호출하여 mongosync 의 상태를 확인합니다. mongosync 프로세스 상태가 다음 값을 나타내는지 확인합니다.
canCommit은true입니다.lagTimeSeconds가 작습니다(0에 가깝습니다).전환이 시작될 때
lagTimeSeconds이(가)0에 가깝지 않은 경우 전환에 시간이 오래 걸릴 수 있습니다.내장된
verification.sourceverification.destination검증자를 사용하는 경우 및 반환 문서를 모두 확인합니다. 두 문서의lagTimeSeconds필드는0근처에 있어야 하며phase필드는"stream hashing"로 표시되어야 합니다.검증자가 스트림 해싱 단계에 있지 않은 경우 전환 프로세스 시간이 오래 걸릴 수 있습니다.
다음 예에서는 동기화 프로세스의 상태를 반환합니다.
요청
curl localhost:27182/api/v1/progress -XGET
응답
{ "progress": { "state":"RUNNING", "canCommit":true, "canWrite":false, "info":"change event application", "lag": { "overallLagSeconds": 0, "crudLagSeconds": 0, "ddlLagSeconds": null }, "lagTimeSeconds":0, "collectionCopy": { "estimatedTotalBytes":694, "estimatedCopiedBytes":694 }, "directionMapping": { "Source":"cluster0: localhost:27017", "Destination":"cluster1: localhost:27018" }, "source": { "pingLatencyMs":250 }, "destination": { "pingLatencyMs":-1 }, "verification": { "source": { "estimatedDocumentCount": 42, "hashedDocumentCount": 42, "lagTimeSeconds": 2, "totalCollectionCount": 42, "scannedCollectionCount": 10, "phase": "stream hashing" }, "destination": { "estimatedDocumentCount": 42, "hashedDocumentCount": 42, "lagTimeSeconds": 2, "totalCollectionCount": 42, "scannedCollectionCount": 10, "phase": "stream hashing" } } }, "success": true }
소스에서 동기화된 컬렉션에 대한 쓰기 작업을 중지합니다.
소스 클러스터 의 모든 트랜잭션이 커밋 되거나 중단될 때까지 기다립니다.
mongosync마이그레이션 구성에 따라 쓰기 (write) 차단을 관리합니다. 자세한 학습 은 쓰기 차단을 참조하세요.mongosync에서 필터링된 동기화 사용하는 경우 전체 소스 클러스터 에 대한 쓰기를 비활성화할 필요가 없습니다. 그러나 필터하다 에 포함된 컬렉션에 대한 쓰기 (write) 작업을 중지해야 합니다.
커밋 요청 mongosync로 보냅니다.
마이그레이션 을 위해 여러 mongosync 인스턴스를 시작하는 경우 각 mongosync 인스턴스 에 대해 커밋 요청 실행해야 합니다.
요청
curl localhost:27182/api/v1/commit -XPOST --data '{ }'
응답
{"success":true}
참고
commit 요청 을 제출 한 후 progress 엔드포인트를 호출하여 mongosync 상태 가 COMMITTING 또는 COMMITTED 인지 확인합니다.
소스 클러스터 에 영구 쿼리 설정(PQS)이 포함된 경우 PQS를 대상 클러스터 로 수동으로 마이그레이션 해야 합니다.
기본값 구성에서 이 단계를 완료하면 mongosync 가 소스 클러스터 에 대한 쓰기를 차단합니다.
이 단계에서 mongosync 충돌이 발생하면 다음 명령을 실행 하여 소스 클러스터 에서 쓰기 (write) 차단을 수동으로 해제해야 할 수 있습니다.
db.adminCommand( { setUserWriteBlockMode: 1, global: false } )
대상 클러스터 에서 쓰기를 수행할 수 있을 때까지 기다립니다.
progress 엔드포인트를 호출하여 canWrite 이(가) true인지 확인합니다. canWrite 가 false인 경우 progress 가 canWrite 이 true로 표시될 때까지 기다립니다. 여러 mongosync 인스턴스를 실행 경우 첫 번째 mongosync 프로세스 에서 canWrite 가 true인지만 확인합니다. 후속 mongosync 프로세스의 canWrite 상태가 유효하지 않습니다.
curl -sS localhost:27182/api/v1/progress -XGET | jq ".progress.canWrite"
true
를 사용하여 대상 클러스터 에서 쓰기를 수동으로 차단한 setUserWriteBlockMode 경우 대상 클러스터 에서 애플리케이션 쓰기를 활성화 .
쓰기를 활성화 하려면 setUserWriteBlockMode을(를) 업데이트 합니다.
db.adminCommand( { setUserWriteBlockMode: 1, global: false } )
그런 다음 애플리케이션 워크로드 를 대상 클러스터 로 전송합니다.
행동
canWrite 및 COMMITTED
mongosync COMMITTED 상태 보다 이전 단계에서 대상 클러스터 에 대한 쓰기를 허용합니다.
/progress 가 canWrite: true 를 보고한 후 또는 상태 COMMITTED인 경우 대상에 쓰기 (write) 수 있습니다. 쓰기 (write) 차단에 대해 자세히 학습하려면 쓰기 차단을 참조하세요. mongosync의 여러 인스턴스를 실행 경우 첫 번째 mongosync 프로세스 의 canWrite 상태만 사용합니다.
초기 동기화 에서 mongosync 는 소스 클러스터 의 고유 인덱스를 대상 클러스터 의 비고유 인덱스로 복제합니다. 커밋 하는 동안 대상 클러스터 의 관련 비고유 인덱스는 prepareUnique 로 설정하다 됩니다. 이 작업이 완료되면 /progress 엔드포인트가 canWrite: true 을 반환하기 시작합니다. prepareUnique 인덱스가 있는 컬렉션은 고유 인덱스 제약 조건을 위반하는 새 문서를 거부합니다. 그런 다음 mongosync 는 prepareUnique 인덱스를 고유 인덱스로 변환합니다. 이 작업이 완료되면 mongosync 상태 를 COMMITTED 로 변경합니다.
참고
대규모 컬렉션을 동기화할 때 prepareUnique 인덱스를 고유 인덱스로 변환하는 것은 리소스 를 많이 사용할 수 있습니다. 이로 인해 canWrite: true 를 반환하는 /progress 엔드포인트와 mongosync 가 COMMITTED 상태 에 도달하는 데 시간이 오래 걸릴 수 있습니다.
canWrite: true 이 반환되면 애플리케이션에서 쓰기를 실행할 수 있지만 인덱스 빌드와 같이 배타 락이 필요한 작업은 인덱스 변환이 완료된 후에만 진행할 수 있습니다. 또한 이 기간 동안 경쟁 리소스 경합으로 인해 쓰기 (write) 작업의 지연 시간 증가할 수 있습니다.