Definición
commitShardRemovalElimina una partición de un clúster.
Para ejecutar este comando, primero debe vaciar el fragmento con el
startShardDrainingComando. Este comando le indica al balanceador que mueva fragmentos del shard a otros shards del clúster. También debe mover manualmente las bases de datos que utilizan el shard como shard principal y las colecciones no fragmentadas almacenadas en el shard antes de ejecutar elcommitShardRemovalcomando.El comando devuelve un error si el fragmento no se ha vaciado por completo o si contiene una base de datos o una colección no fragmentada. Si el fragmento se ha vaciado y todas las bases de datos y colecciones no fragmentadas se han migrado fuera del fragmento, el comando devuelve
ok.Para comenzar a drenar un fragmento, consulte el
startShardDrainingcomando.Para comprobar el estado de un fragmento en proceso de drenaje, consulte el
shardDrainingStatuscomando.Para detener el drenaje de un fragmento, consulte el
stopShardDrainingcomando.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
En un clúster fragmentado, cada base de datos tiene una partición principal. Si la partición que desea vaciar es también la principal de una de las bases de datos del clúster, deberá mover manualmente las bases de datos desde su partición principal a una nueva partición después de migrar todos los datos de la partición actual.
Si hay una base de datos que utiliza el fragmento que desea usar como primario, el comando commitShardRemoval devuelve un error.
Para obtener más detalles, consulte el movePrimary comando y la sección Eliminar fragmentos de un clúster fragmentado para obtener más información.
Requisitos de migración de colecciones
Las colecciones no fragmentadas se almacenan en fragmentos individuales. Si una de estas colecciones se encuentra en el fragmento que desea eliminar, primero debe migrarla a otro fragmento.
Si hay una colección no fragmentada almacenada en el fragmento que desea eliminar, el comando commitShardRemoval devuelve un error.
Para migrar una colección no fragmentada, consulte el moveCollection comando.
Ejemplos
Para comenzar a drenar un fragmento, utilice el método db.adminCommand() startShardDraining para ejecutar el comando:
db.adminCommand( { startShardDraining: "shard04" } )
Para comprobar el estado de la operación de drenaje, utilice el shardDrainingStatus comando:
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 dbsToMove campo, utilice el movePrimary comando para moverlas a un fragmento diferente.
Si la salida muestra alguna colección sin fragmentar en el collectionsToMove campo, utilice el moveCollection comando para moverlas a un fragmento diferente.
Cuando shardDrainingStatus { state:
"drainingComplete" }muestra, el equilibrador ha terminado de mover fragmentos fuera del shard. Ahora puedes eliminar el shard:
db.adminCommand( { commitShardRemoval: "shard04" } )
{ "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1771840037, 12), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1771840037, 12) }