Docs Menu
Docs Home
/ /

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.

Ejecutar la primera instancia de mongosync:

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

Al ejecutar varias instancias de mongosync, el número de instancias debe ser igual al número de particiones. Cada instancia de mongosync debe iniciarse con la --id opción o id configuración para especificar la partición 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 --cluster1 deberían dirigir a las instancias de mongos. En el ejemplo, utilizan la misma instancia de mongos.

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 una única partición del clúster de origen, identificado por la opción --id.

  • 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 curl u otro cliente HTTP para emitir el comando start a cada una de las instancias mongosync.

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

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

Para revisar el progreso de sincronización de una partición específica, utiliza curl u otro cliente HTTP para emitir el comando progreso a la instancia mongosync que sincroniza esa partición.

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 está en ejecución en mongosync01Host y utilizando port 27601. Para reanudar la sincronización en otras particiones, actualizar el host y el número de puerto y luego repite 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 valor lagTimeSeconds es lo suficientemente pequeño, y canCommit es true, emite el comando confirmación para realizar la sincronización. Repite el proceso en todas las instancias de mongosync.

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 sólo revisan el progreso y la sincronización de confirmación para la instancia mongosync que se está ejecutando en mongosync01Host y se encuentra utilizando port 27601. Para sincronizar todos los shards, realiza llamadas adicionales a progress y commit en otras instancias mongosync que puedan estar ejecutándose.

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.

Nota

Si mongosync se detiene durante la confirmación, antes de que el punto final /progress canWrite: true informe, debe reiniciar toda la migración para asegurarse de que esté verificada.

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 "sourceAndDestination" cuando la API de inicio mongosyncinicia.

Volver

Set de réplicas a clúster

En esta página