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 se ejecuta removeShardMongoDB vacía la partición utilizando el balanceador para mover los fragmentos de la partición a otras particiones del clúster. Una vez que la partición se ha vaciado, MongoDB remueve la partición 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. Consulte Modificar su clúster de Atlas para agregar o remover particiones de su 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. Consulta el comando movePrimary y el recurso Remover particiones de un clúster existente 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 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.

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 drop or movePrimary these databases",
"dbsToMove" : [
"fizz",
"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 ("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.

La salida incluye el campo dbsToMove indicando las bases de datos para las cuales bristol01 es la partición primaria. Después de que se hayan drenado todos los fragmentos de la partición, debe movePrimary para las bases de datos o, alternativamente, descartar estas bases de datos.

Nota

Si la partición que se está removiendo no es la partición primaria de ninguna base de datos, el arreglo dbsToMove estará vacío y removeShard podrá completar la migración sin intervención.

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)
},
"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" : 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.

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)
},
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [
"fizz",
"buzz"
],
"ok" : 1,
"operationTime" : Timestamp(1575400343, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1575400343, 1),
"signature" : {
"hash" : BinData(0,"9plu5B/hw4uWAgEmjjBP3syw1Zk="),
"keyId" : Long("6766255701040824328")
}
}
}

Después de que se hayan vaciado todos los fragmentos de la partición, si tienes dbsToMove, puedes movePrimary para esas bases de datos o, alternativamente, descartar las bases de datos (lo que elimina los archivos de datos asociados).

Una vez que el balanceador haya terminado de mover todos los fragmentos del fragmento y usted haya gestionado el,dbsToMove removeShard podrá finalizar. Al ejecutar de nuevo, se obtendrá un resultado similar al removeShard 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