es una herramienta para migrar manualmente datos de un set de réplicas existente de MongoDB a un set de réplicas de MongoDB Atlas. Ver Descargar mongomirror.
no requiere que cierre su conjunto de réplicas o aplicaciones existentes, no importa datos de usuarios o roles y no copia la base de datos config.
Uso 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.
Requisitos previos
Implementación MongoDB de origen
La implementación de MongoDB de origen debe ser un set de réplicas. Si la fuente es una implementación independiente de MongoDB, antes de ejecutar , convierta la instancia independiente en un set de réplicas.
El set de réplicas de origen debe ejecutar MongoDB versión 2.6 o superior.
El set de réplicas de origen de MongoDB no puede ser un clúster gratuito (anteriormente conocido como
M0) ni un clúster Flex.El set de réplicas de origen de MongoDB no puede contener datos en colecciones de series de tiempo.
No cambie la bandera
featureCompatibilityVersionen 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.
no es compatible con índices TTL. Descarta cualquier índice TTL existente y reconstruyelos cuando el proceso de migración esté completo. Si no desea descartar un índice existente porque es importante para el rendimiento de las query, comuníquese con soporte para opciones alternativas.
No hagas ningún cambio de namespace durante el proceso de migración, como usar el comando
renameCollectiono ejecutar un pipeline de agregación que incluya la etapa de agregación$out.No puede usar el comando
renameCollectiono la etapa de agregación$outcomo parte de la sincronización inicial, que se ejecuta como parte del proceso.No reinicie el primario durante la etapa de sincronización inicial de la migración.
Si la implementación de MongoDB contiene índices con claves que superan el Límite de Claves de Índice, antes de iniciar el procedimiento de migración en vivo, se deben modificar los índices para que no contengan claves sobredimensionadas.
Acceso requerido en el set de réplicas de origen
debe tener acceso a la red al set de réplicas fuente. Si el set de réplicas requiere autenticación, incluye las credenciales del usuario al ejecutar. Especifique un usuario de base de datos con, como mínimo, los siguientes privilegios:
Leer todas las bases de datos y colecciones. El
readAnyDatabaserol en la base de datosadmincubre este requisito.Lea el oplog. Consulta Acceso a Oplog.
Ejecute el comando
getParameter.
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,clusterMonitorybackup.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 clústeres de origen que ejecutan MongoDB 3.4, un usuario debe tener, como mínimo, los roles
clusterMonitoryreadAnyDatabase. Por 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
clusterManagercomo dereadAnyDatabase, así como acceso de lectura a la base de datoslocal. 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" ] } )
Implementación de Atlas de destino
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 misma versión o una posterior a la versión de MongoDB del clúster de origen. Consulte la ruta de actualización.
No debe contener ningún namespace que se superponga con el clúster de origen. Si detecta superposición de espacios de nombres en el clúster de destino, el proceso falla antes de comenzar. Si su clúster de destino contiene namespaces superpuestos, borrar todos los datos del clúster de destino con
--drop, o lista los namespaces que desea importar del 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 está ejecutando, 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 de tu clúster, utiliza la herramienta
nslookupde la línea de comandos. Para obtener más información, consulta ¿Cambian alguna vez las IP públicas del clúster de Atlas?
Acceso requerido en el clúster de destino
debe tener acceso a la red del clúster de destino.
Debes especificar un usuario de base de datos con el Atlas admin rol para ejecutar. Para obtener más información, consulta Configurar usuarios de bases de datos.
Ruta de actualización
Importante
no está soportado para migraciones entre clústeres de origen MongoDB 6.0+ y clústeres de destino 6.0+. No puedes utilizar para migrar desde un set de réplicas de origen 6.0.x o posterior a un set de réplicas de destino 6.0.x o posterior.
Puede utilizarse para migrar de un set de réplicas de origen en versiones anteriores a un set de réplicas de destino con MongoDB versión 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.
Admite las siguientes rutas de migración.
Set de réplicas de origen Versión de MongoDB | Set de réplicas de réplicas Atlas de destino Versión de MongoDB |
|---|---|
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 |
Descargar mongomirror
Nota
En macOS 64-bit, se muestra una alerta de seguridad la primera vez que intentas abrir el archivo mongomirror después de haberlo descargado. Para continuar, vea Abra una aplicación anulando la configuración de seguridad.
Sistema operativo | Descargar |
|---|---|
Amazon Linux 1 | |
Amazon Linux 2 | |
Debian 9.2 | |
Debian 10 | |
macOS de 64 bits | |
RHEL 7.0 | |
RHEL 7.1 PPC64LE | |
RHEL 7.2 s390x | |
RHEL 8.0 | |
RHEL 8.1 PPC64LE | |
SLES 12 | |
SLES 15 | |
Ubuntu 16.04 | |
Ubuntu 16.04 ARM | |
Ubuntu 18.04 | |
Ubuntu 18.04 ARM | |
Ubuntu 20.04 | |
Ubuntu 20.04 ARM | |
Windows |
mongomirror Proceso
Cuando inicias, este:
Se conecta a Atlas a través de TLS.
Realiza una sincronización inicial, copiando las colecciones del set de réplicas MongoDB existente al clúster de destino en Atlas.
Después de la sincronización inicial, rastrea continuamente el registro de operaciones del set de réplicas en busca de cambios entrantes y los reproduce en el clúster de destino en Atlas. no copia la base de datos
config. utiliza la compresión de red si la activas en el clúster de origen o destino y utilizas--compressorspara especificar qué librerías de compresión permitir.construye todos los índices en el clúster de destino en primer plano, independientemente de cómo se hayan construido los índices en el clúster de origen. La creación de índices primer plano bloquea todas las demás operaciones en la base de datos. Para obtener más información, consulte Operaciones de creación de índices en una colección poblada.
Una vez iniciado, se ejecuta de manera continua hasta que se apaga:
Si cierras durante la etapa de sincronización inicial, antes de reiniciar, verifica que el clúster de destino esté vacío, o ejecuta con
--drop.Si cierras durante la etapa de seguimiento de oplog, el proceso deja de realizar el seguimiento de la oplog. Puedes reiniciar para continuar el seguimiento desde el último registro de Oplog procesado usando
--bookmarkFile.
Ejecutar mongomirror
Configura el usuario de la base de datos en el set de réplicas de origen.
Si el conjunto de réplicas de origen requiere autenticación, se deben incluir las credenciales de usuario al ejecutar . Para los requisitos, consulte 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.
En Atlas, ve a la página Database & Network Access de tu proyecto.
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.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
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.
Configura un usuario de base de datos en el clúster de Atlas de destino.
Debes especificar un usuario de base de datos con el Atlas admin rol para ejecutar. Consulta Configurar usuarios de Base de Datos para obtener documentación sobre la creación de un usuario de base de datos.
Si no existe tal usuario, cree uno:
Si aún no se muestra, haz clic en la pestaña Database Users.
Haga clic en Add New Database User.
Agrega un usuario Atlas admin.
Anote el nombre de usuario y la contraseña seleccionados para el nuevo usuario, ya que debe especificar estas credenciales al ejecutar .
Actualizar la lista de acceso IP.
Si el host en el que se va a ejecutar no está en la lista de acceso IP del clúster, actualice la lista. Puedes especificar cualquiera de las siguientes opciones:
La dirección IP pública del servidor en el que se ejecutará, o
Si se configura el VPC emparejamiento, se pueden utilizar el bloque CIDR de la VPC del par o una subred, o el Grupo de seguridad de la VPC del par.
En Atlas, ve a la página Clusters de tu proyecto.
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.
Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Clusters en la sección Database.
La página de clústeres se muestra.
Haz clic Connecten.
Haz clic en Connect para el clúster de Atlas al que deseas migrar los datos.
Copia la información del host del clúster de destino.
Puedes obtener la información de hostname del clúster Atlas desde la interfaz de usuario de Atlas.
Nota
No necesitas utilizar un driver para migrar datos con .
Desde el cuadro de diálogo Connect, haga clic en Shell.
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 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.
Para completar el proceso de migración, verifique la transferencia de datos y cambie a Atlas.
Cambiar a Atlas
Una vez que completes la sincronización inicial y se siga el registro de operaciones del conjunto de réplicas, se puede cambiar al clúster de destino de Atlas.
Verificar transferencia de datos.
Verifica que tus datos se transfieran al clúster de destino utilizando una de las siguientes estrategias de verificación. Utilice los siguientes métodos de verificación solo después de asegurarse de que los clústeres de origen o destino NO estén escribiendo datos.
Usa 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:
Para verificar la transferencia de índices y comparar los resultados, utilice el db.collection.getIndexes() método.
Para verificar la transferencia de metadatos y comparar los resultados, utiliza el método db.getCollectionInfos().
Actualiza las aplicaciones cliente para usar el clúster de Atlas.
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 más información sobre las conexiones a Atlas, se puede consultar Conectarse a un clúster mediante librerías de clientes.
Monitoring
registra su progreso en la salida estándar en la terminal. Durante la sincronización inicial, registra una barra de progreso por 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 examinar el oplog, 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 procesada del oplog en el clúster de destino. Por ejemplo:
2024-12-12T16:22:17.027-0800 Current lag from source: 6s
Un tiempo de retardo de 6 segundos significa que la última entrada de oplog procesada ocurrió 6 segundos antes que la más reciente disponible en el clúster de origen.
Nota
El tiempo que se tarda en ponerse al día puede ser mayor o menor que 6 segundos, dependiendo del número de entradas que lleguen por segundo.
Un retraso de 0 segundos indica que se están procesando entradas que llegaron menos de un segundo antes que la última entrada de oplog.
Si el clúster de origen tiene índices, crea los mismos índices en el clúster de destino. El registro de progreso muestra los tiempos de inicio y finalización del proceso de construcción del índice. Para ver el progreso de las creaciones de índices, puede:
Usa el comando currentOp en el nodo principal del clúster de destino. El campo
commandmuestra información sobre la operación en curso. Las entradas de construcción de índices se asemejan a lo siguiente:"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"}}}}
Rendimiento
Para evitar la contención de recursos de red y CPU, ejecuta en hosts distintos de los hosts de instancia de tu mongod set de réplicas.
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.
Sintaxis de comandos, opciones y ejemplos
Para sintaxis, opciones y ejemplos, consulta la página de referencia de mongomirror.