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
/ /
Administración

Remover particiones de un clúster 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 una partición en un clúster con una distribución desigual de fragmentos, el balanceador primero elimina los fragmentos de la partición en proceso de drenaje y luego equilibra la distribución desigual de fragmentos restante.

Este procedimiento describe cómo remover una partición de un clúster. No utilizes este procedimiento para migrar un clúster completo a un hardware nuevo. Para migrar, consulte Migrar un clúster de fragmentación autogestionado a otro hardware en su lugar.

Para remover una partición, primero debe conectarse a uno de los clúster mongos instancias usando mongosh. Luego, utiliza la secuencia de tareas en este documento para eliminar una partición del clúster.

  • La eliminación de una partición puede causar que un cursor de flujo de cambios abierto se cierre, y es posible que el cursor de flujo de cambios cerrado no se pueda reanudar completamente.

  • Puedes reiniciar un clúster con seguridad durante un proceso de eliminación de particiones. Si reinicias un clúster durante un proceso de drenaje en curso, el drenaje continúa automáticamente una vez que los componentes del clúster se reinician. MongoDB registra el estado de drenado de la partición en la colección config.shards.

Para migrar datos correctamente de una partición, el proceso de balanceador debe estar habilitado. Verifica el estado del balanceador usando el asistente sh.getBalancerState() en mongosh. Para obtener más información, consulta la sección sobre operaciones del balanceador.

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

  • Utiliza el comando listShards, como se muestra a continuación:

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

El campo shards._id lista el nombre de cada partición.

Desde la base de datos admin, ejecuta el comando removeShard. Esto inicia el "drenaje" de fragmentos de la partición que está eliminando hacia otras particiones en el clúster. Por ejemplo, para una partición llamada mongodb0, ejecute:

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

mongos convierte el nivel de confirmación de escritura (write concern) del comando removeShard en "majority".

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 dbsToMove que indica las bases de datos, si las hay, para las cuales la partición es la partición primaria. Después de que todos los fragmentos se hayan extraído del shard, se debe realizar una de las siguientes acciones para la(s) base(s) de datos: movePrimary o, alternativamente, descartar las bases de datos (lo que borra 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 el nivel de confirmación de escritura (write concern) del comando removeShard en "majority".

El comando devuelve una salida similar a la 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 la partición.

dbs

Número total de bases de datos cuya partición primaria es la partición. Estas bases de datos se especifican en el campo de salida dbsToMove.

jumboChunks

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

Si jumboChunks es mayor que 0, espere hasta que solo queden jumboChunks 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 bandera.jumbo

Después de que la bandera jumbo se borre, el balanceador puede migrar estos fragmentos. Para más detalles sobre el procedimiento de migración, consulta Procedimiento de Migración de Rangos.

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

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

Si la partición es la partición primaria de una o más bases de datos del clúster, entonces debes hacer que esa base de datos utilice una partición diferente como su partición primaria. removeShard enumera cualquier base de datos que debas mover en el campo dbsToMove en la salida del comando. Si la partición no es la partición primaria de ninguna base de datos, sáltate la siguiente tarea, finaliza la migración.

Para mover una base de datos a otra partición, utilice el comando movePrimary.

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, emite el siguiente comando:

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

mongos utiliza "majority" nivel de confirmación de escritura (write concern) para movePrimary.

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 el nivel de confirmación de escritura (write concern) del comando removeShard en "majority".

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 sea "completado", puede detener de forma segura las instancias que conforman el fragmento mongodb0.

Volver

Agregar fragmentos

En esta página