Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/

Convertir el clúster autogestionado a un set de réplicas

Este tutorial describe cómo convertir un clúster a un set de réplicas no particionado. Para convertir un set de réplicas en un clúster, consulta Convertir un set de réplicas autogestionado en un clúster. Consulta la documentación de particionado para obtener más información sobre los clústeres.

Este tutorial te guía a través de las siguientes tareas:

  1. Desactivar el balanceador y bloquear el clúster.

  2. Convertir un clúster único o fragmentado en un set de réplicas

  3. Desbloquee el clúster después de convertirlo en un set de réplicas.

A partir de MongoDB 8.0, puedes utilizar el directShardOperations rol para realizar operaciones de mantenimiento que requieren ejecutar comandos directamente en una partición.

Advertencia

Ejecutar comandos usando el rol directShardOperations puede hacer que su clúster deje de funcionar correctamente y puede causar corrupción de datos. Utiliza el rol directShardOperations únicamente con fines de mantenimiento o bajo la orientación del soporte de MongoDB. Deja de usar el rol directShardOperations cuando termines de realizar operaciones de mantenimiento.

Los pasos de este tutorial requieren MongoDB 6.0 o posterior.

Los comandos fsync y fsyncUnlock requieren la acción de autorización fsync, la cual puede asignarse mediante el hostManager rol o un rol personalizado.

Convierta el clúster cuando las migraciones de fragmentos, el resharding y las transformaciones de esquemas no se realicen normalmente.

A partir de MongoDB 8.3, los conjuntos de réplicas que anteriormente eran clusters fragmentados no se pueden volver a convertir en conjuntos de réplicas.

La conversión de un clúster fragmentado en un conjunto de réplicas preserva los metadatos de particionado de su implementación anterior, incluido un document de identidad de partición, lo que impide que vuelva a convertirse en un clúster fragmentado. Si intentas una reconversión autogestionada a un clúster particionado, MongoDB devolverá un error.

Para convertir estos sets de réplicas en clústeres fragmentados, contacta con el soporte técnico.

1

Para deshabilitar el equilibrador y bloquear el clúster:

  1. Conectar mongosh a una mongos instancia en el clúster particionado.

  2. Para detener el balanceador, ejecute:

    sh.stopBalancer()
  3. Para verificar que el balanceador está desactivado, ejecute el siguiente comando y asegúrese de que la salida sea false:

    sh.getBalancerState()
  4. Para bloquear el clúster fragmentado, lo que impide la escritura en la base de datos, ejecuta:

    db.getSiblingDB( "admin" ).fsyncLock()
  5. Para confirmar el bloqueo, ejecute:

    db.getSiblingDB( "admin" ).aggregate( [
    { $currentOp: { } },
    { $facet: {
    "locked": [
    { $match: { $and: [
    { fsyncLock: { $exists: true } }
    ] } }
    ],
    "unlocked": [
    { $match: { fsyncLock: { $exists: false } } }
    ]
    } },
    { $project: {
    "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },
    "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }
    } }
    ] )
  6. Asegúrate de que la salida muestre que fsyncLocked es true, lo que significa que el clúster está bloqueado:

    [ { fsyncLocked: true }, { fsyncUnlocked: false } ]
2

En el caso de un cluster fragmentado con solo una partición, esa partición contiene el conjunto completo de datos. Para convertir ese clúster en un set de réplicas no fragmentado:

  1. Reconfigurar la aplicación para conectarse con el miembro primario del set de réplicas que aloja la única partición; ese sistema será el nuevo set de réplicas.

  2. Remueve la opción --shardsvr de tu mongod.

    Tip

    Cambiar la opción --shardsvr cambiará el puerto en el que mongod escucha las conexiones entrantes.

El clúster de réplica única ahora es un conjunto de réplicas no particionado que aceptará operaciones de lectura y escritura en el conjunto de datos.

Siga el siguiente procedimiento para pasar de un clúster con más de una partición a un set de réplicascompletamente nuevo.

  1. Con el clúster bloqueado y el balanceador deshabilitado, implementa un nuevo set de réplicas además de tu clúster. El set de réplicas debe tener la capacidad suficiente para alojar todos los archivos de datos de todas las particiones actuales combinadas. No configures la aplicación para conectarse al nuevo set de réplicas hasta que se complete la transferencia de datos.

  2. Reconfigure su aplicación o detenga todas las instancias de mongos. Si detiene todas las instancias de mongos, las aplicaciones no podrán leer desde la base de datos. Si detiene todas las instancias mongos, inicie una instancia temporal mongos a la que las aplicaciones no pueden acceder para el procedimiento de migración de datos.

  3. Utiliza mongodump y mongorestore para migrar los datos de la mongos instancia al nuevo conjunto de réplicas.

    Excluya la base de datos config cuando ejecute mongorestore. Usa la opción --nsExclude como se muestra en este ejemplo:

    mongorestore --nsExclude="config.*" <connection-string> /data/backup

    Nota

    No todas las colecciones en todas las bases de datos están necesariamente particionadas. No migres únicamente las colecciones particionadas. Asegúrese de que todas las bases de datos y todas las colecciones se migren correctamente.

  4. Reconfigura la aplicación para usar el set de réplicas no particionado en lugar de la instancia mongos.

    Después de convertir el clúster en un set de réplicas, actualice la cadena de conexión utilizada por sus aplicaciones a la cadena de conexión del set de réplicas. Luego, reinicia tus aplicaciones.

La aplicación ahora utiliza el set de réplicas sin particiones para lecturas y escrituras. Ahora puedes retirar la infraestructura de clúster sharded no utilizada restante.

3

Después de convertir el clúster en un set de réplicas, realiza los siguientes pasos para desbloquear el clúster:

  1. Para desbloquear el clúster y permitir que las escrituras en la base de datos se reanuden, ejecuta:

    db.getSiblingDB( "admin" ).fsyncLock()
  2. Para confirmar el desbloqueo, ejecuta:

    db.getSiblingDB("admin").aggregate( [
    { $currentOp: { } },
    { $facet: {
    "locked": [
    { $match: { $and: [
    { fsyncLock: { $exists: true } }
    ] } } ],
    "unlocked": [
    { $match: { fsyncLock: { $exists: false } } }
    ]
    } },
    { $project: {
    "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },
    "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }
    } }
    ] )
  3. Asegúrese de que la salida muestre que fsyncLocked es false, lo que significa que el clúster está desbloqueado:

    [ { fsyncLocked: false }, { fsyncUnlocked: true } ]

Gestionar balanceador de clúster fragmentado

Volver

Respaldar metadatos del clúster

En esta página