Definición
commitShardRemovalElimina una partición de un clúster.
Para ejecutar este comando, primero se debe drenar la partición con el Comando
startShardDraining. Este comando indica al balanceador que mueva fragmentos de la partición a otras particiones en el clúster. También debe mover manualmente las bases de datos que utilizan la partición como partición primaria y las colecciones no particionadas almacenadas en la partición antes de ejecutar el comandocommitShardRemoval.El comando devuelve un error si la partición no se ha vaciado por completo o si contiene una base de datos o una colección no fragmentada. Si la partición se drena y todas las bases de datos y colecciones no fragmentadas se migran de la partición, el comando devuelve
ok.Para comenzar a drenar una partición, consulta el comando
startShardDraining.Para comprobar el estado de una partición en proceso de drenaje, consulta el comando
shardDrainingStatus.Para detener el drenaje de una partición, consulte el comando
stopShardDraining.Nuevo en la versión 8.3.
Compatibilidad
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 en MongoDB Atlas. Consulta Modify your Atlas Sharded Cluster para añadir o remover particiones de tu clúster de Atlas.
Sintaxis
El comando tiene la siguiente sintaxis:
db.adminCommand( { commitShardRemoval: <shard> } )
Comportamiento
Requisitos de acceso
Si tienes habilitado authorization, debes tener el rol de clusterManager o cualquier rol que incluya la acción de removeShard.
Requisitos para la migración de la base de datos
Cada base de datos en un clúster tiene una partición primaria. Si la partición que desea vaciar también es el primario de una de las bases de datos del clúster, entonces debe mover manualmente las bases de datos de su partición primaria a una nueva partición después de migrar todos los datos de la partición.
Si existe una base de datos que utilice la partición que deseas utilizar como primario, el comando commitShardRemoval devuelve un error.
Para más detalles, consulta el comando movePrimary y el remover particiones de un clúster para obtener información adicional.
Requisitos de migración de la colección
Las colecciones sin particiones se almacenan en shards individuales. Si una de estas colecciones está en la partición que deseas eliminar, primero debes migrar la colección a una diferente.
Si hay una colección no particionada almacenada en la partición que desea eliminar, el comando commitShardRemoval devuelve un error.
Para migrar una colección no particionada, consulta el comando moveCollection.
Ejemplos
Para comenzar a drenar una partición, utilice el método db.adminCommand() para ejecutar el comando startShardDraining:
db.adminCommand( { startShardDraining: "shard04" } )
Para comprobar el estado de la operación de vaciado, utiliza el comando shardDrainingStatus:
db.adminCommand( { shardDrainingStatus: "shard04" } )
{ "msg" : "draining completed successfully", "state" : "drainingComplete", "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1771839836, 139), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1771839836, 139) }
Si la salida muestra alguna base de datos en el campo dbsToMove, utiliza el comando movePrimary para trasladarlas a una partición diferente.
Si la salida muestra alguna colección no particionada en el campo collectionsToMove, utiliza el comando moveCollection para moverla a una partición diferente.
Cuando shardDrainingStatus muestra { state:
"drainingComplete" }, el equilibrador ha terminado de mover fragmentos fuera de la partición. Ahora puedes remover la partición:
db.adminCommand( { commitShardRemoval: "shard04" } )
{ "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1771840037, 12), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1771840037, 12) }