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 debe deshabilitar el balanceador en un clúster de destino fragmentado balancerStop mediante. Después de detener el balanceador, espere quince minutos antes de mongosync iniciar. Esto le da tiempo al clúster para finalizar cualquier migración de fragmentos en curso.
Si el clúster de origen o destino es un clúster fragmentado y no está ejecutando mongosync con filtrado de espacio de nombres, debe deshabilitar el balanceador del clúster de origen ejecutando el comando y balancerStop esperando 15 minutos para que se complete el comando.
Si el clúster de origen o destino es un clúster fragmentado y se ejecuta con filtrado de mongosync espacios de nombres, se puede habilitar globalmente el balanceador del clúster de origen, pero debe deshabilitarlo para todas las colecciones dentro del filtro de espacios de nombres. Consulte Deshabilitar el balanceador para colecciones en la sincronización filtrada. También se puede deshabilitar por completo 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.
Configura una Instancia Única de mongosync
Para configurar un solo,mongosync siga las instrucciones de conexión correspondientes a la arquitectura de su clúster mongos para conectarse a la 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.
Configurar varias mongosync instancias
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:
Determinar los identificadores de los fragmentos
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 }) } ]
Conectar las mongosync instancias
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
mongosinstancias en el clúster de origen.Se conecta a
mongosinstancias en el clúster de destino.Replica un solo fragmento del clúster de origen, identificado por la
--idopció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.
Iniciar varias mongosync instancias
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": "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.
Comprobar progreso
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.
Pausar una 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.
Sincronización de currículum
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.
Confirmar sincronización desde varias mongosync instancias
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.
Verificación de datos
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.
Invertir la dirección de sincronización
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
mongosyncinstancia 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 lasmongosyncinstancias y compruebe si el campo de cada respuestastatecontiene elCOMMITTEDvalor.
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.