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

Migrar con mongomirror

mongomirror es una herramienta para migrar manualmente datos de un set de réplicas de MongoDB existente a un set de réplicas de MongoDB Atlas. Consulta Descargar mongomirror.

mongomirror no requiere que usted apague su conjunto de réplicas o aplicaciones existentes, no importa datos de usuarios o roles y no copia la config base de datos.

Use mongomirror para:

  • Ejecutar una migración única de un conjunto de datos a un clúster de MongoDB Atlas desde una implementación de MongoDB alojada fuera de MongoDB Atlas.

  • Realizar una migración única de un conjunto de datos de un clúster de Atlas a otro clúster de Atlas.

Consulte también Cómo elegir una herramienta de importación y migración de datos.

  • La implementación de origen de MongoDB debe ser un set de réplicas. Si la fuente es una implementación autónoma de MongoDB, antes de ejecutar mongomirror, convierta la autónoma en un set de réplicas.

  • El set de réplicas de origen debe ejecutar MongoDB versión 2.6 o superior.

  • El conjunto de réplicas de MongoDB de origen no puede ser un clúster gratuito (anteriormente conocido como M0) ni un clúster flexible.

  • El set de réplicas de origen de MongoDB no puede contener datos en colecciones de series de tiempo.

  • No cambie la bandera featureCompatibilityVersion en ningún momento durante el procedimiento.

  • Cuando migres de MongoDB 4.4 o versiones anteriores a un clúster de Atlas que ejecute MongoDB 7.0 o posterior, descarta cualquier índice geoHaystack de tus colecciones.

  • mongomirror no es compatible con índices TTL. Descarta cualquier índice TTL existente y vuelve a crearlos una vez terminado el proceso de migración. Si no deseas descartar un índice existente porque es importante para el rendimiento de la query, contacto con el soporte para explorar opciones alternativas.

  • No hagas ningún cambio de namespace durante el proceso de migración, como usar el comando renameCollection o ejecutar un pipeline de agregación que incluya la etapa de agregación $out.

  • No puede utilizar el renameCollection comando ni la $out etapa de agregación como parte de la sincronización inicial, que se ejecuta como parte del mongomirror proceso.

  • No reinicie el primario durante la etapa de sincronización inicial de la migración.

  • Si su implementación de MongoDB contiene índices con claves que exceden el límite de clave de índice, antes de comenzar el procedimiento de migración en vivo, modifique los índices para que no contengan claves de gran tamaño.

mongomirror debe tener acceso de red al set de réplicas de origen. Si el set de réplicas de origen requiere autenticación, incluya las credenciales de usuario al ejecutar mongomirror. Especificar un usuario de base de datos con, como mínimo, los siguientes privilegios:

Si no existe tal usuario, crea el usuario en el set de réplicas MongoDB de origen. Diferentes versiones del MongoDB Server tienen diferentes roles incorporados. Seleccione un rol integrado según su versión de MongoDB Server y ejecute los comandos apropiados en la mongosh:

  • Para clústeres de origen, un usuario debe tener los roles readAnyDatabase, clusterMonitor y backup.

    Para verificar que el usuario de la base de datos que ejecutará el proceso de Migración en vivo tiene estos roles, ejecuta el comando db.getUser() en la base de datos admin.

    use admin
    db.getUser("admin")
    {
    "_id" : "admin.admin",
    "user" : "admin",
    "db" : "admin",
    "roles" : [
    {
    "role" : "backup",
    "db" : "admin"
    },
    {
    "role" : "clusterMonitor",
    "db" : "admin"
    }
    {
    "role" : "readAnyDatabase",
    "db" : "admin"
    }
    ]
    } ...

    Además, el usuario de base de datos de su clúster de origen debe tener el rol para leer el oplog en la base de datos admin. Para obtener más información, consulta Acceso al Oplog.

  • Para los clústeres de origen que ejecutan MongoDB,3.4 un usuario debe tener, como mínimo,clusterMonitor los roles y. Por readAnyDatabase ejemplo:

    use admin
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "clusterMonitor", "readAnyDatabase" ]
    }
    )
  • Para los clústeres de origen que ejecutan MongoDB 3.2 un usuario debe tener, como mínimo, tanto los roles de clusterManager como de readAnyDatabase, así como acceso de lectura a la base de datos local. Esto requiere un rol personalizado, que se puede crear con los siguientes comandos:

    use admin
    db.createRole(
    {
    role: "migrate",
    privileges: [
    { resource: { db: "local", collection: "" }, actions: [ "find" ] }
    ],
    roles: ["readAnyDatabase", "clusterManager"]
    }
    )
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "migrate" ]
    }
    )
  • Para los clústeres de origen que ejecutan MongoDB 2.6 o 3.0, un usuario debe tener, como mínimo, el rol readAnyDatabase. Por ejemplo:

    use admin
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "readAnyDatabase" ]
    }
    )

La implementación de destino de Atlas:

  • No puede ser un clúster Gratis ni un clúster Flex.

  • Debe ser un set de réplicas.

  • Debe tener la versión que sea igual o posterior a la versión de MongoDB del clúster de origen. Consulta Ruta de actualización.

  • No debe contener ningún namespace que se superponga con el clúster de origen. Si mongomirror detecta espacios de nombres superpuestos en el clúster de destino, falla antes de iniciar el proceso. Si el clúster de destino contiene espacios de nombres superpuestos, elimina todos los datos del clúster de destino con --drop, o enumera los espacios de nombres para importar desde el clúster de origen con --includeNamespace.

  • Debe incluir en su lista de acceso IP, ya sea:

    • La dirección IP pública del servidor en el que se ejecuta mongomirror, o

    • Si se configura para el emparejamiento de VPC, ya sea el bloque CIDR de VPC del par (o un subconjunto) o el grupo de seguridad del VPC par.

    Nota

    Para encontrar la dirección IP pública de cualquier nodo del clúster, use la nslookup herramienta desde la línea de comandos. Para obtener más información, consulte ¿Cambian alguna vez las direcciones IP públicas del clúster Atlas?

mongomirror debe tener acceso a la red del clúster de destino.

Debes especificar un usuario de base de datos con el rol Atlas admin para ejecutar mongomirror. Para obtener más información, consulta Configura usuarios de base de datos.

Importante

mongomirror no es compatible con migraciones entre clústeres de origen MongoDB 6.0+ y clústeres de destino 6.0+. No se puede usar mongomirror para migrar desde un set de réplicas de origen 6.0.x o versiones posteriores a un set de réplicas de destino 6.0.x o posteriores.

Puede utilizar para migrar desde un conjunto de réplicas de origen en versiones anteriores a un conjunto de réplicas de destino con la versión mongomirror MongoDB.6.0

Alternativamente, puedes actualizar tu set de réplicas de origen a la versión 6.0+ o 7.0+ y utilizar este procedimiento de migración en vivo para migrar un set de réplicas actualizado a Atlas.

mongomirror Admite las siguientes rutas de migración.

Source Replica Set
MongoDB Version
Target Atlas Replica Set
MongoDB Version

5.0

6.0

4.4

6.0

4.2

6.0

4.0

6.0

3.6

6.0

3.4

6.0

3.2

6.0

3.0

6.0

2.6

6.0

Nota

En macOS 64-bit, aparece una alerta de seguridad la primera vez que intenta abrir el archivo mongomirror después de descargarlo. Para continuar, consulta Abre una aplicación anulando la configuración de seguridad.

Cuando inicias,mongomirror esto:

  1. Conecta a Atlas a través de TLS/SSL.

  2. Realiza una sincronización inicial, copiando las colecciones del set de réplicas MongoDB existente al clúster de destino en Atlas.

  3. Después de la sincronización inicial, sigue continuamente los cambios en el oplog del set de réplicas y los reproduce en el clúster de destino en Atlas. mongomirror no copia la base de datos config. mongomirror usa compresión de línea si la habilitas en el clúster de origen o destino y usas --compressors para especificar qué librerías de compresión permitir.

    mongomirror crea todos los índices en el clúster de destino en primer plano, sin importar cómo se hayan creado los índices en el clúster de origen. La creación de índice en primer plano bloquea todas las demás operaciones en la base de datos. Para obtener más información, consulta Operaciones de creación de índices en una colección poblada.

Una vez iniciado, mongomirror se ejecuta de forma continua hasta que se apague:

  • Si apagamongomirrordurante la etapa de sincronización inicial, antes de reiniciarmongomirror, verifique que el clúster de destino esté vacío o ejecutemongomirrorcon--drop.

  • Si apaga durante mongomirror la etapa de seguimiento del registro de operaciones, el proceso detiene su seguimiento.Puede reiniciar para continuar mongomirror el seguimiento desde el último registro de operaciones procesado --bookmarkFile usando.

1

Si el set de réplicas de origen requiere autenticación, debe incluir credenciales de usuario al ejecutar mongomirror. Para los requisitos, consulta Acceso requerido en el set de réplicas de origen.

Toma nota del nombre de usuario y la contraseña para este usuario, ya que debes especificar estas credenciales al ejecutar mongomirror.

2
  1. Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.

  2. Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.

  3. En la barra lateral, haz clic en Database & Network Access en la sección Security.

La página Acceso a la base de datos y a la red se muestra.

3

Debe especificar un usuario de base de datos con el Atlas admin rol para mongomirror ejecutar.Consulte "Configurar usuarios de base de datos" para obtener información sobre cómo crear un usuario de base de datos.

Si no existe tal usuario, cree uno:

  1. Si aún no se muestra, haz clic en la pestaña Database Users.

  2. Haga clic en Add New Database User.

  3. Agrega un usuario Atlas admin.

Toma nota del nombre de usuario y la contraseña seleccionados para el nuevo usuario, ya que deberás especificar estas credenciales al ejecutar mongomirror.

4

Si el host donde se ejecutará mongomirror no se encuentra en la lista de acceso IP del clúster, actualizar la lista. Puedes especificar cualquiera de las siguientes opciones:

  • La dirección IP pública del servidor en el que se ejecutará mongomirror o

  • Si está configurado para VPC emparejamiento, se puede usar o el bloque CIDR de la VPC del par (o una subred) o el grupo de seguridad de la VPC del par ..

5
  1. Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.

  2. Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.

  3. En la barra lateral, haz clic en Clusters en la sección Database.

La página de clústeres se muestra.

6

Haz clic en Connect para el clúster de Atlas al que deseas migrar los datos.

7

Puedes obtener la información de hostname del clúster Atlas desde la interfaz de usuario de Atlas.

Nota

No es necesario usar un controlador para migrar datos con mongomirror.

  1. Desde el cuadro de diálogo Connect, haga clic en Shell.

  2. En la lista desplegable, selecciona 3.4 or earlier. La cadena de conexión debe tener un aspecto similar al del siguiente ejemplo. Este ejemplo se ha dividido en varias líneas para una mejor comprensión:

    mongodb://<db_username>:<db_password>@
    00.foo.mongodb.net:27017,
    01.foo.mongodb.net:27017,
    02.foo.mongodb.net:27017/test?
    ssl=true&replicaSet=myAtlasRS&authSource=admin
  3. En un editor de texto, pega el valor de replicaSet, añade una barra oblicua (/) y luego añade la lista de hosts como valores separados por comas, como se muestra en el ejemplo siguiente:

    myAtlasRS/00.foo.mongodb.net:27017,01.foo.mongodb.net:27017,02.foo.mongodb.net:27017

Usa este valor para --destination en el siguiente paso.

8

Para completar el proceso de migración, verifique la transferencia de datos y cambie a Atlas.

Después de que complete la sincronización inicial y siga el registro de operaciones del conjunto de réplicas, puede cambiar al clúster Atlas de mongomirror destino.

1

Esto garantiza que no se produzcan escrituras adicionales en el clúster de origen.

2

Esto significa que los clústeres de origen y destino están en un estado coherente.

3

Una vez que el clúster de Atlas esté actualizado, detén mongomirror.

4

Verifique que sus datos se transfieran al clúster de destino mediante una de las siguientes estrategias de verificación. Utilice estos métodos de verificación solo después de asegurarse de que los clústeres de origen o destino NO estén escribiendo datos.

  • Utilice el método db.collection.countDocuments() en cada colección de los clústeres de origen y de destino para obtener recuentos de documentos y compararlos entre los clústeres.

  • Escribe un script que ejecute una query en colecciones en el clúster de origen y luego compruebe que los documentos, índices, colecciones, metadatos y vistas correctos existan con los mismos valores en el clúster de destino. En el script, utiliza los siguientes comandos en los clústeres de origen y destino:

5

Actualiza tus aplicaciones cliente con la cadena de conexión de Atlas proporcionada a través del botón Connect en el panel del clúster.

Para obtener detalles sobre las conexiones a Atlas, consulte Conectarse a un clúster a través de bibliotecas de cliente.

mongomirror registra su progreso en la salida estándar en la terminal. Durante la sincronización inicial, mongomirror registra una barra de progreso para cada colección que copia. Por ejemplo:

2024-08-09T16:35:50.227-0000 [#....................] park.events 2179/34184 (6.4%)
2024-08-09T16:35:50.227-0000 [#############........] zoo.animals 29000/49778 (58.3%)

Al realizar el seguimiento continuo del oplog, mongomirror registra el tiempo de retraso, en segundos, entre la entrada más reciente del oplog en el clúster de origen y la última entrada del oplog procesada en el clúster de destino. Por ejemplo:

2024-12-12T16:22:17.027-0800 Current lag from source: 6s

Un tiempo de retraso de 6 segundos significa que la última entrada del registro de operaciones mongomirror procesada ocurrió 6 segundos antes de la más reciente disponible en el clúster de origen.

Nota

El tiempo que tarda mongomirror en ponerse al día puede ser mayor o menor a 6 segundos, dependiendo de la cantidad de entradas que lleguen por segundo.

Un tiempo de retraso de 0 segundos indica que está procesando entradas que llegaron menos de un segundo antes de la última entrada del registro de mongomirror operaciones.

Si el clúster de origen tiene índices, mongomirror compila los mismos índices en el clúster de destino. El registro de progreso muestra los tiempos de inicio y finalización del proceso de creación del índice. Para ver el progreso de las creaciones de índices, puedes:

  • Utilice el comando currentOp en el nodo principal del clúster de destino. El command campo muestra información sobre la operación en ejecución. Las entradas de creación de índices son similares a las siguientes:

    "command" : {
    "createIndexes" : "perfs",
    "indexes" : [
    {
    "key" : {
    "animal" : "text"
    },
    "name" : "animal_text"
    }
    ]...
  • Descargue los registros de mongodb para su clúster de destino y busque las entradas recientes relativas a las líneas del índice. Los mensajes de registro relacionados con la construcción del índice se parecen a los siguientes:

    {"t":{"$date":"2024-08-09T16:35:50.227+00:00"},"s":"I", "c":"INDEX", "id":20447, "ctx":"conn1080","msg":"Index build: completed","attr":{"buildUUID":{"uuid":{"$uuid":"c4a62739-bf19-456d-bbd6-7baa29f1063b"}}}}

Para evitar conflictos por recursos de red y CPU, ejecute en hosts mongomirror distintos a los hosts de instancia mongod de su conjunto de réplicas.

  • mongomirror afecta el rendimiento de su set de réplicas de origen de manera similar a tener un secundario:

    • Para la etapa inicial de sincronización, la carga escala con el tamaño de su conjunto de datos.

    • Una vez que se complete una sincronización inicial, la carga escala con gigabytes de oplog usados por hora.

Para mongomirror sintaxis, opciones y ejemplos, consulta la página de referencia de mongomirror.

En esta página