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
/ /

Sincronizar clústeres fragmentados

Hay dos formas de sincronizar Clústeres fragmentados. Puedes usar cualquiera de los dos. mongosync o varias instancias mongosync. Para un rendimiento óptimo con clústeres grandes o con mucha carga, utilice una instancia mongosync por cada fragmento del clúster de origen.

Importante

Siempre debes desactivar el balanceador en un clúster de destino particionado usando balancerStop. Después de detener el balanceador, espere quince minutos antes de iniciar mongosync. Esto le da al clúster tiempo para finalizar cualquier migración de fragmentos en curso.

Si el clúster de origen o destino es un clúster compartido y no está ejecutando mongosync con filtrado de namespace, deberás desactivar el balanceador del clúster de origen ejecutando el comando balancerStop y esperar 15 minutos para que el comando se complete.

Si el clúster de origen o destino es un clúster fragmentado y está ejecutando mongosync con filtrado de espacios de nombres, puede habilitar globalmente el equilibrador del clúster de origen, pero debe desactivarlo para todas las colecciones dentro del filtro de espacios de nombres. Consulta Cómo desactivar el balanceador para colecciones en sincronización filtrada. También se puede deshabilitar completamente el balanceador del clúster de origen.

Durante la migración, no ejecute los comandosmoveChunknimoveRange. Si ha habilitado el balanceador del clúster de origen, pero lo ha deshabilitado para las colecciones dentro del filtro de espacio de nombres, no ejecuteshardCollectionen las colecciones dentro del filtro de espacio de nombres. Si ejecutashardCollectionen las colecciones dentro del filtro de espacio de nombres durante la migración, mongosync devuelve un error y se detiene, lo que requiere que inicie la migración desde cero.

Para configurar un único mongosync, sigue las instrucciones de conexión para la arquitectura de tu clúster para conectarte a la instancia de mongos en tu 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 clúster a clúster usando varias instancias de mongosync.

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

Cuando configures múltiples instancias de mongosync para sincronizarse entre clústeres fragmentados, debes enviar comandos idénticos de puntos finales API a cada instancia de mongosync.

Para configurar varias instancias mongosync:

  1. Verificar la configuración del clúster

  2. Determinar los IDs de particiones

  3. Conectar las instancias

1

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

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 único servidor host puede ejecutar múltiples instancias de 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 de mongosync para cada partición en el clúster de origen. Edite los campos --id y --port para cada instancia adicional de mongosync.

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 de 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 que se utilizará durante la sincronización. Considera designar un rango de puertos para simplificar el script de las 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 de 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 está ejecutando en mongosync02Host y utilizando port 27602 para la sincronización. Para comprobar el progreso en otras particiones, actualiza el host y el número de puerto, y luego repite la llamada a la API en cada instancia de 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 utiliza port 27601 para la sincronización. Para pausar la sincronización en otras particiones, actualice el host y el número de puerto y repita la llamada a la API en cada instancia de mongosync.

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

Utiliza curl u otro cliente HTTP para emitir el comando reanudar para 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 progreso y compruebe los valores de canCommit y lagTimeSeconds.

Para minimizar el bloqueo de escritura en el clúster de origen, debe ejecutar el comando commit solo cuando el valor de lagTimeSeconds sea lo suficientemente bajo 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 es bloqueante. El comando commit no se devolverá hasta que se haya llamado a commit en cada instancia de 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 la aplicación del clúster de origen al destino, verifica tus datos para asegurarte de que la sincronización haya sido exitosa.

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, consulta Verificar la 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 invertir la sincronización de modo que el clúster de destino original actúe como el 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 es bloqueante. El comando reverse no se devolverá hasta que se haya llamado a reverse en cada instancia de 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