Puede finalizar una migración y transferir la carga de trabajo de su aplicación desde el clúster de origen al de destino mediante el Proceso de transición demongosync.
mongosync debe permanecer activo hasta alcanzar el estado COMMITED. Esto permite que mongosync sincronice cualquier guardados adicional que ocurra durante la migración.
Nota
Antes de transferir la carga de trabajo de la aplicación al clúster de destino, siempre debe verificar que la sincronización se haya realizado correctamente. Para obtener más información, consulte Verificar la transferencia de datos.
Pasos
Verificar el estado de mongosync.
Llamar al punto final de progreso para determinar el estado de mongosync antes de iniciar el proceso de transición. Asegúrese de que el mongosync estado del proceso indique los siguientes valores:
canCommitestrue.lagTimeSecondses pequeño (cerca de0).Si
lagTimeSecondsno está cerca de0cuando comienza el cambio, este podría demorar mucho tiempo.Al usar el Verificador Integrado, verifique
verification.sourcelosverification.destinationdocumentos de retorno y. LoslagTimeSecondscampos en ambos documentos deben estar cerca0phase"stream hashing"de y los campos deben mostrar.Si el verificador no está en la fase de hash del flujo, el proceso de transferencia podría llevar mucho tiempo.
El siguiente ejemplo devuelve el estado del proceso de sincronización.
Solicitud
curl localhost:27182/api/v1/progress -XGET
Respuesta
{ "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" }, "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 }
Detenga cualquier operación de escritura en las colecciones sincronizadas en la fuente.
Espere a que todas las transacciones en el clúster de origen se confirmen o cancelen.
mongosyncHabilita el bloqueo de escritura solo en el destino de forma predeterminada. Puede habilitarlo explícitamente iniciandomongosyncconenableUserWriteBlockingestablecido en"destinationOnly".mongosyncsolo bloquea las escrituras en el destino y las desbloquea justo antes de quecanWritese establezca entrue.Si inicia
mongosyncconenableUserWriteBlockingconfigurado en"sourceAndDestination",mongosyncbloquea todas las operaciones de guardar en el clúster de destino y las desbloquea justo antes de quecanWritese configure entrue.mongosyncbloquea los guardados en el origen después de que llames a/commit.Si inicia
mongosyncconenableUserWriteBlockingestablecido en"none", asegúrese de deshabilitar las escrituras. Por ejemplo, ejecute elsetUserWriteBlockModeComando en el clúster de origen:db.adminCommand( { setUserWriteBlockMode: 1, global: true } ) Si
mongosyncusa sincronización filtrada, no es necesario deshabilitar las escrituras en todo el clúster de origen. Sin embargo, debe asegurarse de detener las operaciones de escritura en las colecciones que incluye el filtro.
Envíe una solicitud de confirmación mongosync a.
Si inicia varias instancias mongosync para su migración, debe emitir una solicitud de confirmación para cada instancia mongosync.
Solicitud
curl localhost:27182/api/v1/commit -XPOST --data '{ }'
Respuesta
{"success":true}
Nota
Después de enviar una solicitud commit, llame al punto final progress para asegurarse de que el estado mongosync sea COMMITTING o COMMITTED.
Si su clúster de origen contiene configuraciones de consulta persistentes (PQS), debe migrar manualmente PQS a su clúster de destino.
Si anteriormente configuraste enableUserWriteBlocking en sourceAndDestination, mongosync bloquea las escrituras en el clúster de origen una vez que completes este paso.
Si previamente configuró enableUserWriteBlocking en sourceAndDestination y mongosync falla durante este paso, debe desbloquear manualmente las escrituras en el clúster de origen setUserWriteBlockMode mediante.
Espere hasta que pueda realizar escrituras en el clúster de destino.
Llama al progress punto final para determinar si canWrite truees. Si canWrite es,false espera hasta progress que canWrite muestre que true es. Si estás ejecutando varias instancias de mongosync, solo comprueba que canWrite sea verdadero en el primer mongosync proceso. El canWrite estado de cualquier mongosync proceso posterior no es válido.
curl -sS localhost:27182/api/v1/progress -XGET | jq ".progress.canWrite"
true
Verificar transferencia de datos.
Verifique la sincronización exitosa de datos desde el clúster de origen al de destino.
Para obtener más información, consulte Verificar transferencia de datos.
Si bloqueó manualmente las escrituras en el clúster de destino mediante, habilite las escrituras de la aplicación en el clúster de setUserWriteBlockMode destino.
Para habilitar escrituras,setUserWriteBlockMode actualice:
db.adminCommand( { setUserWriteBlockMode: 1, global: false } )
Luego, transfiera la carga de trabajo de su aplicación al clúster de destino.
Si inició mongosync con bloqueo de escritura utilizando la enableUserWriteBlocking opción en el punto final /start, no necesita completar este paso.
Comportamiento
canWrite y COMPROMETIDO
mongosync permite escrituras en el clúster de destino en una etapa anterior al estado COMMITTED.
Si configura enableUserWriteBlocking como "sourceAndDestination" o "destinationOnly", o si el verificador está activado, puede escribir en el destino después de que /progress informe canWrite: true. De lo contrario, espere hasta que el estado sea COMMITTED. Si ejecuta varias instancias de mongosync, use solo el estado canWrite del primer proceso mongosync.
En la sincronización inicial, mongosync replica los índices únicos del clúster de origen como índices no únicos en el clúster de destino. Durante la confirmación, los índices no únicos relevantes del clúster de destino se establecen en prepareUnique. Al finalizar, el punto de conexión /progress comienza a devolver canWrite:
true. Las colecciones con índices prepareUnique rechazan los documentos nuevos que infringen la restricción de índice único. mongosync convierte los índices prepareUnique en índices únicos. Al finalizar, mongosync cambia su estado a COMMITTED.
Nota
La conversión de índices prepareUnique a índices únicos puede ser intensiva en recursos al sincronizar grandes colecciones. Esto puede resultar en un largo tiempo entre el /progress endpoint que devuelve canWrite: true y mongosync que llega al COMMITTED estado.
Aunque las aplicaciones pueden realizar escrituras una vez que se devuelve canWrite:
true, las operaciones que requieren bloqueos exclusivos, como la creación de índices, solo pueden proceder después de que se complete la conversión del índice. Además, las operaciones de guardar pueden experimentar una mayor latencia durante este tiempo debido a la contención de recursos en competencia.