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 remover un partición debes asegurarte de que los datos de esa partición se hayan migrado a las particiones restantes en el clúster. Este procedimiento describe cómo migrar datos de forma segura y cómo remover una partición.

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 de la partición, conectarse a una instancia de mongos con mongosh y realizar una de las siguientes opciones:

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

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

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 desde la partición denominada mongodb0 hacia otras particiones en el clúster. Estas migraciones ocurren lentamente para evitar sobrecargar el clúster en su conjunto. Dependiendo de la capacidad de tu red y de 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, ejecute removeShard nuevamente desde la base de datos admin. 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".

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 el jumboChunks es mayor que 0, espera hasta que solo queden las jumboChunks en la partición. Una vez que solo queden los fragmentos de jumbo, deberás borrar manualmente la marca de jumbo antes de que se complete el drenaje. Ver Borrar jumbo bandera.

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 fluida, consulte las consideraciones en la documentación del comando movePrimary antes de ejecutar movePrimary.

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 retorna hasta que MongoDB termine de trasladar todos los datos. La respuesta de este comando se parecerá a lo 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".

Aparece un mensaje de éxito al completar:

{
"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 particiones

En esta página