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", "lagTimeSeconds":0, "collectionCopy": { "estimatedTotalBytes":694, "estimatedCopiedBytes":694 }, "directionMapping": { "Source":"cluster0: localhost:27017", "Destination":"cluster1: localhost:27018" }, "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기본값 으로 대상 전용 쓰기 차단을 활성화합니다."destinationOnly"로 설정하다enableUserWriteBlocking을 사용하여mongosync를 시작하여 명시적으로 활성화 할 수 있습니다.mongosync는 대상에 대한 쓰기만 차단하고canWrite가true로 설정하다 되기 직전에 차단을 해제합니다.enableUserWriteBlocking이(가)true(으)로 설정하다 상태에서mongosync을(를) 시작하는 경우,mongosync는 대상 클러스터 에서 수행되는 모든 쓰기 (write) 작업을 차단하고canWrite가true로 설정하다 되기 직전에 차단을 해제합니다.mongosync은(는)/commit을(를) 호출한 후 소스에 대한 쓰기를 차단합니다.enableUserWriteBlocking을false로 설정하다mongosync를 시작하는 경우 쓰기를 비활성화해야 합니다. 예시 소스 클러스터에서setUserWriteBlockMode명령을 실행.db.adminCommand( { setUserWriteBlockMode: 1, global: true } ) mongosync에서 필터링된 동기화 사용하는 경우 전체 소스 클러스터 에 대한 쓰기를 비활성화할 필요가 없습니다. 그러나 필터하다 에 포함된 컬렉션에 대한 쓰기 (write) 작업을 중지해야 합니다.
커밋 요청 로 mongosync 보냅니다.
마이그레이션 을 위해 여러 mongosync 인스턴스를 시작하는 경우 각 mongosync 인스턴스 에 대해 커밋 요청 실행해야 합니다.
요청
curl localhost:27182/api/v1/commit -XPOST --data '{ }'
응답
{"success":true}
참고
commit 요청 을 제출 한 후 progress 엔드포인트를 호출하여 mongosync 상태 가 COMMITTING 또는 COMMITTED 인지 확인합니다.
이 단계를 완료하면 mongosync 이(가) 소스 클러스터 에 대한 쓰기를 차단합니다.
소스 클러스터 에 영구 쿼리 설정(PQS)이 포함된 경우 PQS를 대상 클러스터 로 수동으로 마이그레이션 해야 합니다.
이전에 enableUserWriteBlocking 을(를) true(으)로 설정하다 경우 이 단계를 완료하면 mongosync 이(가) 소스 클러스터 에 대한 쓰기를 차단합니다.
대상 클러스터 에서 쓰기를 수행할 수 있을 때까지 기다립니다.
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 } )
그런 다음 애플리케이션 워크로드 를 대상 클러스터 로 전송합니다.
/start 엔드포인트에서 enableUserWriteBlocking 옵션을 사용하여 쓰기 차단으로 mongosync 를 시작한 경우 이 단계를 완료할 필요가 없습니다.
행동
canWrite 및 COMMITTED
mongosync COMMITTED 상태 보다 이전 단계에서 대상 클러스터 에 대한 쓰기를 허용합니다.
enableUserWriteBlocking 을(를) "sourceAndDestination" 또는 "destinationOnly"(으)로 설정하다 검증자가 켜져 있는 경우, /progress 가 canWrite: true를 보고한 후 대상에 쓰기 (write) 수 있습니다. 그렇지 않으면 상태 COMMITTED가 될 때까지 기다립니다. mongosync의 여러 인스턴스를 실행하는 경우 첫 번째 mongosync 프로세스의 canWrite 상태만 사용합니다.
초기 동기화 에서 mongosync 는 소스 클러스터 의 고유 인덱스를 대상 클러스터 의 비고유 인덱스로 복제합니다. 커밋 하는 동안 대상 클러스터 의 관련 비고유 인덱스는 prepareUnique 로 설정하다 됩니다. 이 작업이 완료되면 /progress 엔드포인트가 canWrite:
true 을 반환하기 시작합니다. prepareUnique 인덱스가 있는 컬렉션은 고유 인덱스 제약 조건을 위반하는 새 문서를 거부합니다. 그런 다음 mongosync 는 prepareUnique 인덱스를 고유 인덱스로 변환합니다. 이 작업이 완료되면 mongosync 상태 를 COMMITTED 로 변경합니다.
참고
대규모 컬렉션을 동기화할 때 prepareUnique 인덱스를 고유 인덱스로 변환하는 것은 리소스 를 많이 사용할 수 있습니다. 이로 인해 canWrite: true 를 반환하는 /progress 엔드포인트와 mongosync 가 COMMITTED 상태 에 도달하는 데 시간이 오래 걸릴 수 있습니다.