Docs Menu
Docs Home
/ /
Administración
/ / /

Convertir un clúster fragmentado autoadministrado en un conjunto de réplicas

Este tutorial describe cómo convertir un Clúster fragmentado en un conjunto de réplicas no fragmentado. Para convertir un conjunto de réplicas en un clúster fragmentado, consulte "Convertir un conjunto de réplicas autoadministrado en un clúster fragmentado". Consulte la documentación sobre fragmentación para obtener más información sobre los clústeres fragmentados.

Los pasos de este tutorial requieren MongoDB 6.0 o posterior.

El fsyncLos fsyncUnlock comandos y requieren la fsync acción de autorización, que se puede asignar a través del rol o un rol hostManager personalizado.

Convierta el clúster cuando no se realicen normalmente migraciones de fragmentos, reorganizaciones ni transformaciones de esquema.

Para deshabilitar el balanceador y bloquear el clúster:

  1. Conecte mongosh a una instancia en el clúster mongos fragmentado.

  2. Para detener el balanceador, ejecute:

    sh.stopBalancer()
  3. Para verificar que el balanceador esté deshabilitado, 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, ejecute:

    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úrese de que la salida muestre que fsyncLocked es true, lo que significa que el clúster está bloqueado:

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

En el caso de un clúster fragmentado con un solo fragmento, este contiene el conjunto de datos completo. Utilice el siguiente procedimiento para convertir ese clúster en un conjunto de réplicas no fragmentado:

  1. Reconfigure la aplicación para conectarse al miembro principal del conjunto de réplicas que aloja el fragmento único; ese sistema será el nuevo conjunto de réplicas.

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

    Tip

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

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

Utilice el siguiente procedimiento para realizar la transición de un clúster fragmentado con más de un fragmento a un conjunto de réplicas completamente 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 lasmongosinstancias. Si detiene lasmongosinstancias, las aplicaciones no podrán leer la base de datos. Si detiene lasmongosinstancias, inicie una instancia temporalmongosa la que las aplicaciones no puedan acceder para el proceso de migración de datos.

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

    Excluya la config base de datos al mongorestore ejecutar. Use la opción como se muestra en este --nsExclude ejemplo:

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

    Nota

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

  4. Reconfigure la aplicación para utilizar el conjunto de réplicas no fragmentadas en lugar de la mongos instancia.

La aplicación ahora usará el conjunto de réplicas no fragmentadas para lecturas y escrituras. Ahora puede desmantelar la infraestructura de clúster fragmentada restante sin usar.

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

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

    db.getSiblingDB( "admin" ).fsyncLock()
  2. Para confirmar el desbloqueo, 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 ] }
    } }
    ] )
  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 } ]

Administrar el equilibrador de clúster fragmentado

Volver

Realizar una copia de seguridad de los metadatos del clúster

En esta página