Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Finalizar el proceso de cambio.

Puedes finalizar una migración y transferir la carga de trabajo de tu aplicación desde el clúster de origen al de destino usando la mongosync proceso de implementación.

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 trasladar la carga de trabajo de tu aplicación al clúster de destino, siempre debes verificar que la sincronización se haya realizado exitosa. Para obtener más información, consulta Verificar transferencia de datos.

1

Llame al endpoint de progreso para determinar el estado de mongosync antes de iniciar el proceso de corte. Asegúrese de que el estado del proceso mongosync indique los siguientes valores:

  • canCommit es true.

  • lagTimeSeconds es pequeño (cerca de 0).

    Si lagTimeSeconds no está cerca de 0 cuando comience el corte, este podría tardar mucho tiempo.

  • Al utilizar el verificador embedido, revise tanto el documento de devolución verification.source como el verification.destination. Los campos lagTimeSeconds en ambos documentos deben estar cerca de 0 y los campos phase deben mostrar "stream hashing".

    Si el verificador no está en la fase de hash de flujo, el proceso de transición podría tomar mucho tiempo.

El siguiente ejemplo devuelve el estado del proceso de sincronización.

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"
},
"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
}
2
  • Espere a que todas las transacciones en el clúster de origen se confirmen o aborten.

  • mongosync habilita por defecto el bloqueo de guardado solo de destino. Se puede habilitar explícitamente iniciando mongosync con enableUserWriteBlocking configurado en "destinationOnly". mongosync solo bloquea los guardados en el destino y los desbloquea justo antes de que canWrite se establezca en true.

  • Si inicia mongosync con enableUserWriteBlocking configurado en "sourceAndDestination", mongosync bloquea todas las operaciones de guardar en el clúster de destino y las desbloquea justo antes de que canWrite se configure en true. mongosync bloquea los guardados en el origen después de que llames a /commit.

  • Si inicia mongosync con enableUserWriteBlocking configurado en "none", asegúrese de deshabilitar los guardados. Por ejemplo, ejecute el setUserWriteBlockMode comando en el clúster de origen:

    db.adminCommand( {
    setUserWriteBlockMode: 1,
    global: true
    } )
  • Si mongosync utiliza la sincronización filtrada, no es necesario desactivar escrituras en todo el clúster de origen. Sin embargo, debes asegurarte de detener las operaciones de guardar para las colecciones que incluye el filtro.

3

Si se inician varias instancias de mongosync para la migración, debe emitir una solicitud de compromiso para cada instancia de mongosync.

curl localhost:27182/api/v1/commit -XPOST --data '{ }'
{"success":true}

Nota

Después de enviar una solicitud de commit, llama al endpoint de progress para asegurarte de que el estado de mongosync sea COMMITTING o COMMITTED.

Si su clúster de origen contiene Configuraciones de Consultas Persistentes (PQS), debe migrar manualmente las 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 configuraste enableUserWriteBlocking en sourceAndDestination y mongosync falla durante este paso, debes desbloquear manualmente las escrituras en el clúster de origen utilizando setUserWriteBlockMode.

4

Llama al endpoint progress para determinar si canWrite está true. Si canWrite está false, espera hasta que progress muestre que canWrite está true. Si estás ejecutando múltiples instancias de mongosync, solo verifica que canWrite sea verdadero en el primer proceso mongosync. El estado canWrite de cualquier proceso mongosync posterior no es válido.

curl -sS localhost:27182/api/v1/progress -XGET | jq ".progress.canWrite"
true
5

Verifica la sincronización exitosa de datos desde la fuente al clúster de destino.

Para obtener más información, consulta Verificar la transferencia de datos.

6

Para habilitar la escritura, actualiza setUserWriteBlockMode:

db.adminCommand(
{
setUserWriteBlockMode: 1,
global: false
}
)

Luego, transfiera la carga de trabajo de la aplicación al clúster de destino.

Si inició mongosync con bloqueo de guardado utilizando la opción enableUserWriteBlocking en el endpoint /start, no necesita completar este paso.

7

Cuando la respuesta de progreso mongosync indica que el estado mongosync es COMMITTED, el proceso de transición está completo.

curl -sS localhost:27182/api/v1/progress -XGET | jq ".progress.state"
"COMMITTED"

mongosync permite guardados en el clúster de destino en una etapa anterior al estado COMMITTED.

Si configuras enableUserWriteBlocking en "sourceAndDestination" o "destinationOnly", o si el verificador está activado, puedes guardar en el destino después de que /progress informe canWrite: true. De lo contrario, espere hasta que el estado esté COMMITTED. Si está ejecutando varias instancias de mongosync, solo utilice el estado canWrite del primer proceso mongosync.

En la sincronización inicial, mongosync replica los índices únicos en el clúster de origen como índices no únicos en el clúster de destino. Durante la confirmación, los índices no únicos relevantes en el clúster de destino se configuran a prepareUnique. Cuando esto se completa, el endpoint /progress comienza a devolver canWrite: true. Las colecciones con prepareUnique índices rechazan nuevos documentos que violan la restricción de índice único. mongosync luego convierte los índices prepareUnique en índices únicos. Cuando esto se hace, 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.

Volver

Dimensionamiento del oplog

En esta página