Docs Menu
Docs Home
/
MongoDB Mongosync
/

Sincronizar clústeres fragmentados

Hay dos maneras de sincronizar clústeres fragmentados. Puede usar mongosync una mongosync instancia o varias. Para obtener el mejor rendimiento con clústeres grandes o con mucha carga, use una mongosync instancia por cada fragmento del clúster de origen.

Importante

Si el clúster de origen o destino es un clúster fragmentado, debe detener el balanceador en ambos clústeres y no ejecutar los moveChunk moveRange comandos ni durante la migración. Para detener el balanceador, ejecute el comando y espere a que se balancerStop complete.

Para configurar un solo mongosync, siga las Instrucciones de conexión para la arquitectura de su clúster para conectarse a la mongos instancia en su clúster.

Cuando conecte un solo mongosync a un clúster fragmentado, no utilice la opción replicaSet id ni la opción.

El resto de esta página aborda la sincronización de clúster a clúster utilizando múltiples instancias mongosync.

El número de instancias mongosync debe coincidir con el número de fragmentos en el clúster de origen. Debe usar la misma versión de mongosync en todas las instancias. Para un origen de conjunto de réplicas, solo puede usar una instancia mongosync.

Cuando configura varias instancias mongosync para sincronizar entre clústeres fragmentados, debe enviar comandos de punto final de API idénticos a cada instancia mongosync.

Para configurar varias instancias mongosync:

  1. Verificar la configuración del clúster

  2. Determinar los identificadores de los fragmentos

  3. Conectar las instancias

1

A partir de mongosync 1.1, se puede sincronizar entre clústeres con diferente número de fragmentos. Sin embargo, si se desea revertir la sincronización, el clúster de origen y el de destino deben tener el mismo número de fragmentos.

2

Para obtener los ID de fragmentos, conéctese al clúster de origen y mongos listShards ejecute el comando.

db.adminCommand( { listShards: 1 } )

La información está en la matriz shards.

shards: [
{
_id: 'shard01',
host: 'shard01/localhost:27501,localhost:27502,localhost:27503',
state: 1,
topologyTime: Timestamp({ t: 1656612236, i: 2 })
},
{
_id: 'shard02',
host: 'shard02/localhost:27504,localhost:27505,localhost:27506',
state: 1,
topologyTime: Timestamp({ t: 1656612240, i: 4 })
}
]
3

Estas instrucciones utilizan una cadena de conexión genérica. Para modificar la cadena de conexión según la arquitectura de su clúster, consulte los detalles de conexión específicos de la arquitectura.

Tip

Un solo servidor host puede ejecutar varias instancias mongosync. Para mejorar el rendimiento, ejecute mongosync en varios servidores host.

Ejecute la primera instancia mongosync:

mongosync \
--cluster0 "mongodb://user:password@cluster0host:27500" \
--cluster1 "mongodb://user:password@cluster1host:27500" \
--id shard01 --port 27601

Al ejecutar varias mongosync instancias, la cantidad de instancias debe ser igual a la cantidad de fragmentos. Cada mongosync instancia debe iniciarse con la --id opción o id la configuración para especificar el fragmento que replica.

Ejecute una nueva instancia mongosync para cada fragmento del clúster de origen. Edite los campos --id y --port para cada instancia mongosync adicional.

mongosync \
--cluster0 "mongodb://user:password@cluster0host:27500" \
--cluster1 "mongodb://user:password@cluster1host:27500" \
--id shard02 --port 27602

Las cadenas de conexión para las opciones --cluster0 y deben apuntar --cluster1 a mongos instancias. En el ejemplo, usan la misma mongos instancia.

Cada instancia mongosync:

  • Se conecta a mongos instancias en el clúster de origen.

  • Se conecta a mongos instancias en el clúster de destino.

  • Replica un solo fragmento del clúster de origen, identificado por la --id opción.

  • Especifica un puerto único para usar durante la sincronización. Considere designar un rango de puertos para simplificar la programación de operaciones de Mongosync.

Utilice u curl otro cliente HTTP para emitir el comando de inicio a cada una de las instancias.mongosync

curl mongosync01Host:27601/api/v1/start -XPOST --data \
'{ "source": "cluster0", "destination": "cluster1", \
"reversible": false, "enableUserWriteBlocking": false }'
curl mongosync02Host:27602/api/v1/start -XPOST --data \
'{ "source": "cluster0", "destination": "cluster1", \
"reversible": false, "enableUserWriteBlocking": false }'

Las opciones del comando start deben ser las mismas para todas las instancias mongosync.

Para revisar el progreso de sincronización de un fragmento en particular, use curl u otro cliente HTTP para emitir el comando de progreso a la mongosync instancia que sincroniza ese fragmento.

curl mongosync02Host:27602/api/v1/progress -XGET

Este comando verifica el progreso de la instancia mongosync que se ejecuta en mongosync02Host y usa port 27602 para la sincronización. Para verificar el progreso en otros fragmentos, actualice el host y el número de puerto, y luego repita la llamada a la API para cada instancia mongosync.

El comando de pausa detendrá temporalmente el proceso de sincronización en un solo fragmento. No pausa ninguna otra mongosync instancia que pueda estar ejecutándose. Utilice curl u otro cliente HTTP para ejecutar el pause comando en una mongosync instancia.

curl mongosync01Host:27601/api/v1/pause -XPOST --data '{}'

Este comando pausa la instancia mongosync que se ejecuta en mongosync01Host y usa port 27601 para la sincronización. Para pausar la sincronización en otros fragmentos, actualice el host y el número de puerto, y luego repita la llamada a la API para cada instancia mongosync.

Si una o más mongosync instancias están en pausa, puede usar el comando "reanudar" para reanudar la sincronización. Ejecute un comando por separado resume en cada instancia en pausa mongosync para continuar la sincronización.

Utilice u curl otro cliente HTTP para emitir el comando de reanudación a cada instancia.mongosync

curl mongosync01Host:27601/api/v1/resume -XPOST --data '{}'

Este comando reanuda la sincronización en la instancia mongosync que se ejecuta en mongosync01Host y usa port 27601. Para reanudar la sincronización en otros fragmentos, actualice el host y el número de puerto, y luego repita la llamada a la API en cada instancia mongosync.

Cuando desee completar la sincronización, emita el comando de progreso y verifique los valores canCommit de lagTimeSeconds y.

Para minimizar el bloqueo de escritura en el clúster de origen, solo debe ejecutar el commit comando cuando el valor de lagTimeSeconds sea lo suficientemente pequeño para su aplicación.

Si el lagTimeSeconds valor es suficientemente pequeño y canCommit truees, ejecute el comando de confirmación para confirmar la sincronización. Repita el proceso en todas las mongosync instancias.

La operación commit está bloqueando. El comando commit no regresará hasta que se haya llamado a commit en cada instancia mongosync.

// Check progress
curl mongosync01Host:27601/api/v1/progress -XGET
// Commit
curl mongosync01Host:27601/api/v1/commit -XPOST --data '{}'

Estos comandos solo verifican el progreso y confirman la sincronización de la instancia mongosync que se ejecuta en mongosync01Host y usa port 27601. Para sincronizar todos los fragmentos, realice llamadas adicionales a progress y commit en cualquier otra instancia mongosync que esté en ejecución.

Antes de transferir la carga de su aplicación desde el clúster de origen al destino, verifique sus datos para asegurarse de que la sincronización se haya realizado correctamente.

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

Nota

Para un tutorial en profundidad sobre cómo invertir la dirección de su sincronización, consulta Reverse Sync Direction.

Para revertir la sincronización de modo que el clúster de destino original actúe como clúster de origen:

  • Si aún no lo ha hecho, ejecute el comando de confirmación en cada mongosync instancia y espere a que finalicen todas las confirmaciones. Para comprobar si el proceso de sincronización se ha confirmado, ejecute el comando de progreso en todas las mongosync instancias y compruebe si el campo de cada respuesta state contiene el COMMITTED valor.

  • Emita el comando inverso a cada mongosync instancia.

La operación reverse está bloqueando. El comando reverse no regresará hasta que se haya llamado a reverse en cada instancia mongosync.

curl mongosync01Host:27601/api/v1/reverse -XPOST --data '{}'

Este comando revierte la sincronización en la instancia mongosync que se ejecuta en mongosync01Host y usa port 27601. Realice llamadas adicionales a reverse en cualquier otra instancia mongosync que esté en ejecución.

Nota

La sincronización inversa solo es posible si reversible y enableUserWriteBlocking están configurados en true cuando la API de inicio mongosyncinicia.

Volver

Sincronizar un conjunto de réplicas con un clúster fragmentado

En esta página