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
/ /

removeShard (comando de base de datos)

removeShard

Remueve una partición de un clúster particionado. Cuando ejecutas removeShard, MongoDB vacía la partición usando el balanceador para mover los fragmentos de la partición a otras particiones en el clúster.

Nota

El balanceador debe estar habilitado para que removeShard se complete. Si el balanceador está deshabilitado, el comando permanece en estado de vaciado y no finaliza, incluso si ya ha movido todos los datos fuera del fragmento.

Si la partición tiene colecciones no particionadas, debes drenar todas las colecciones no particionadas de la partición. A partir de MongoDB 8.0, puede usar sh.moveCollection() para mover colecciones no particionadas. Para obtener detalles sobre el procedimiento para drenar una partición, consulte remover particiones de un clúster.

Una vez que se drena el fragmento, MongoDB lo elimina del clúster.

Nota

Si deseas volver a agregar una partición removida a tu clúster, debes limpiar la storage.dbPath de todos los nodos de la partición para remover los archivos antes de que puedas volver a agregarla.

Este comando está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

Nota

Este comando no es compatible con MongoDB Atlas. Consulta Modify your Atlas Sharded Cluster para añadir o remover particiones de tu clúster de Atlas.

El comando tiene la siguiente sintaxis:

db.adminCommand(
{
removeShard : <shardToRemove>
}
)

No puedes hacer una copia de seguridad de los datos del clúster durante la eliminación de particiones.

Puede tener más de una removeShard operación en curso.

Si tienes habilitado authorization, debes tener el rol de clusterManager o cualquier rol que incluya la acción de removeShard.

Cada base de datos en un clúster tiene una partición primaria. Si la partición que desea remover también es la primaria de una de las bases de datos del clúster, debe mover manualmente las bases de datos a una nueva partición después de migrar todos los datos de la partición. Consulte el comando movePrimary y el comando Remover particiones de un clúster para obtener más informació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.

Tip

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

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.

Si ejecutas removeShard mientras tu clúster realiza una operación DDL (operación que modifica una colección como reshardCollection), removeShard solo se ejecuta después de que la operación DDL concurrente finaliza.

Desde mongosh, la removeShard operación se asemeja a lo siguiente:

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

Reemplaza bristol01 por el nombre de la partición que deseas remover. Cuando ejecutas removeShard, el comando devuelve un mensaje similar al siguiente:

{
"msg" : "draining started successfully",
"state" : "started",
"shard" : "bristol01",
"note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
"dbsToMove" : [
"fizz",
"buzz"
],
"collectionsToMove" : [
"fizz.coll1",
"buzz.coll1"
],
"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 ("drenar") fragmentos de la partición denominada bristol01 a otras particiones del clúster. Estas migraciones se producen lentamente para evitar sobrecargar el clúster de manera innecesaria.

Si ejecuta el comando nuevamente, removeShard dará el estado actual del proceso. Por ejemplo, si la operación está en un estado ongoing, el comando devuelve un resultado similar a lo siguiente:

{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : Long(2),
"dbs" : Long(2),
"jumboChunks" : Long(0),
"collectionsToMove": Long(2)
},
"note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
"dbsToMove" : [
"fizz",
"buzz"
],
"collectionsToMove" : [
"fizz.coll1",
"buzz.coll1"
],
"ok" : 1,
"operationTime" : Timestamp(1575399086, 1655),
"$clusterTime" : {
"clusterTime" : Timestamp(1575399086, 1655),
"signature" : {
"hash" : BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
"keyId" : Long("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 los jumboChunks en la partición. Una vez que solo queden los fragmentos jumbo, debes borrar manualmente la bandera jumbo antes de que se complete el drenaje. Consulta Borrar 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.

collectionsToMove

Número total de colecciones no particionadas que necesitas mover de la partición.

Continúa comprobando el estado del comando removeShard (es decir, vuelvo a ejecutar el comando) hasta que el número de fragmentos restantes sea 0.

{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : Long(0), // All chunks have moved
"dbs" : Long(2),
"jumboChunks" : Long(0),
"collectionsToMove": Long(2)
},
"note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
"dbsToMove" : [
"fizz",
"buzz"
],
"collectionsToMove" : [
"fizz.coll1",
"buzz.coll1"
],
"ok" : 1,
"operationTime" : Timestamp(1575400343, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1575400343, 1),
"signature" : {
"hash" : BinData(0,"9plu5B/hw4uWAgEmjjBP3syw1Zk="),
"keyId" : Long("6766255701040824328")
}
}
}

Después de que el balanceador drene todos los fragmentos de la partición, es posible que debas mover manualmente tus colecciones y bases de datos fuera de la partición drenada.

Si la salida removeShard contiene colecciones en el campo collectionsToMove, utiliza moveCollection para mover esas colecciones a una partición diferente de la partición de drenaje o descartar las colecciones (lo que elimina los archivos de datos asociados).

Si la removeShard salida contiene bases de datos en el dbsToMove campo, utilice para esas bases movePrimary de datos o elimine las bases de datos (lo que elimina los archivos de datos asociados).

Nota

Para obtener el mejor rendimiento, mueve tus colecciones antes de mover tus bases de datos.

Una vez que el balanceador haya terminado de mover todos los fragmentos del fragmento y usted haya gestionado los dbsToMove y,collectionsToMove removeShard podrá finalizar. Al ejecutar removeShard de nuevo, se obtendrá un resultado similar al siguiente:

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

Volver

refineCollectionShardKey

En esta página