Docs Menu
Docs Home
/ /
Administración

Eliminar fragmentos de un clúster fragmentado existente

Para eliminar un Fragmento: debe asegurarse de que sus datos se migren a los fragmentos restantes del clúster. Este procedimiento describe cómo migrar datos de forma segura y cómo eliminar un fragmento.

Cuando se elimina un fragmento en un clúster con una distribución de fragmentos desigual, el equilibrador primero elimina los fragmentos del fragmento de drenaje y luego equilibra la distribución de fragmentos desigual restante.

Este procedimiento describe cómo eliminar un fragmento de un clúster. No utilice este procedimiento para migrar un clúster completo a un nuevo hardware. Para migrar, consulte Migrar un clúster fragmentado autoadministrado a un hardware diferente.

Para eliminar un fragmento, primero conéctese a uno de los clústeres mongos mongosh instancias que usan. Luego, utilice la secuencia de tareas de este documento para eliminar un fragmento del clúster.

  • La eliminación de un fragmento puede provocar que un cursor de flujo de cambio abierto se cierre y que el cursor de flujo de cambio cerrado no pueda reanudarse por completo.

  • Puede reiniciar un clúster de forma segura durante la eliminación de un fragmento. Si reinicia un clúster durante un proceso de vaciado en curso, este continuará automáticamente después de que se reinicien los componentes del clúster. MongoDB registra el estado del vaciado del fragmento config.shards en la colección.

Para migrar correctamente los datos desde un fragmento, el proceso de balanceo debe estar habilitado. Compruebe el estado del balanceador con el sh.getBalancerState() asistente en. Para obtener más información, consulte la sección mongosh sobre operaciones del balanceador.

Para determinar el nombre del fragmento, conéctese a una mongos instancia con mongosh y:

  • Utilice el comando, como en el siguiente listShards ejemplo:

    db.adminCommand( { listShards: 1 } )
  • Ejecute sh.status() el método db.printShardingStatus() o.

El campo shards._id enumera el nombre de cada fragmento.

Desde la admin base de datos, ejecute el removeShard comando. Esto inicia el vaciado de fragmentos del fragmento que está eliminando a otros fragmentos del clúster. Por ejemplo, para un fragmento mongodb0 llamado, ejecute:

db.adminCommand( { removeShard: "mongodb0" } )

mongos convierte la preocupación removeShard de escritura del "majority" comando a.

Esta operación retorna con la siguiente respuesta:

{
"msg" : "draining started successfully",
"state" : "started",
"shard" : "mongodb0",
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [
"fiz",
"buzz"
],
"ok" : 1,
"operationTime" : Timestamp(1575398919, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1575398919, 2),
"signature" : {
"hash" : BinData(0,"Oi68poWCFCA7b9kyhIcg+TzaGiA="),
"keyId" : Long("6766255701040824328")
}
}
}

El balanceador comienza a migrar fragmentos del fragmento mongodb0 a otros fragmentos del clúster. Estas migraciones se realizan lentamente para evitar una carga excesiva en el clúster. Dependiendo de la capacidad de la red y la cantidad de datos, esta operación puede tardar desde unos minutos hasta varios días en completarse.

Nota

La salida incluye el campo, que indica las dbsToMove bases de datos, si las hay, para las que el fragmento es el principal. Una vez vaciados todos los fragmentos del fragmento, debe movePrimary usar para las bases de datos o, alternativamente, eliminarlas (lo que elimina los archivos de datos asociados).

Para comprobar el progreso de la migración en cualquier etapa del proceso, vuelva a ejecutar desde removeShard la admin base de datos. Por ejemplo, para un fragmento mongodb0 llamado, ejecute:

db.adminCommand( { removeShard: "mongodb0" } )

mongos convierte la preocupación removeShard de escritura del "majority" comando a.

El comando devuelve un resultado similar al siguiente:

{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : NumberLong(2),
"dbs" : NumberLong(2),
"jumboChunks" : NumberLong(0)
},
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [
"fizz",
"buzz"
],
"ok" : 1,
"operationTime" : Timestamp(1575399086, 1655),
"$clusterTime" : {
"clusterTime" : Timestamp(1575399086, 1655),
"signature" : {
"hash" : BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
"keyId" : NumberLong("6766255701040824328")
}
}
}

En la salida, el campo remaining incluye los siguientes campos:

Campo
Descripción

chunks

Número total de fragmentos que quedan actualmente en el fragmento.

dbs

Número total de bases de datos cuyo fragmento principal es el fragmento. Estas bases de datos se especifican en el dbsToMove campo de salida.

jumboChunks

Del número total chunks de, el número que son gigantes.

Si jumboChunks es mayor 0 que, espere hasta que solo jumboChunks queden en el fragmento. Una vez que solo queden jumbo fragmentos, debe borrar manualmente la bandera jumbo antes de que se complete el vaciado. Consulte Borrar la jumbo bandera.

Una vez que se jumbo borra el indicador, el balanceador puede migrar estos fragmentos. Para obtener más información sobre el procedimiento de migración, consulte Procedimiento de migración de rangos.

Continúe verificando el estado del comando hasta que el número de fragmentos removeShard restantes 0 sea.

db.adminCommand( { removeShard: "mongodb0" } )

Si el fragmento es el principal de una o más bases de datos del clúster, debe configurar dicha base de datos para que use un fragmento diferente como principal. enumera las bases de datos que necesita mover enremoveShard el dbsToMove campo de la salida del comando. Si el fragmento no es el principal de ninguna base de datos, pase a la siguiente tarea: Finalizar la migración.

Para mover una base de datos a otro fragmento, utilice el movePrimary comando.

Importante

Para garantizar una migración sin problemas, consulte las consideraciones en la movePrimary documentación del comando antes de movePrimary ejecutar.

Para migrar la base de datos fizz de mongodb0 a mongodb1, emita el siguiente comando:

db.adminCommand( { movePrimary: "fizz", to: "mongodb1" })

mongos usa para escribir "majority" preocupación movePrimary por.

Este comando no regresa hasta que MongoDB complete la transferencia de todos los datos. La respuesta de este comando será similar a la siguiente:

{
"ok" : 1,
"operationTime" : Timestamp(1575400369, 9),
"$clusterTime" : {
"clusterTime" : Timestamp(1575400369, 9),
"signature" : {
"hash" : BinData(0,"2Nz8QCcVXB0LJLm1hsXfpTCaM0M="),
"keyId" : NumberLong("6766255701040824328")
}
}
}

Para limpiar toda la información de metadatos y finalizar la eliminación, ejecuta removeShard nuevamente. Por ejemplo, para una partición llamada mongodb0, ejecuta:

db.adminCommand( { removeShard: "mongodb0" } )

mongos convierte la preocupación removeShard de escritura del "majority" comando a.

Al finalizar aparece un mensaje de éxito:

{
"msg" : "removeshard completed successfully",
"state" : "completed",
"shard" : "mongodb0",
"ok" : 1,
"operationTime" : Timestamp(1575400370, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1575400370, 2),
"signature" : {
"hash" : BinData(0,"JjSRciHECXDBXo0e5nJv9mdRG8M="),
"keyId" : NumberLong("6766255701040824328")
}
}
}

Una vez que el valor del campo state esté "completo", puede detener de forma segura las instancias que comprenden el fragmento mongodb0.

Volver

Agregar fragmentos

En esta página