Definición
shardDrainingStatusMuestra el estado de un fragmento en proceso de drenaje, indicando si el equilibrador sigue transfiriendo fragmentos a otros fragmentos del clúster o si el proceso ha finalizado.
El comando devuelve un error si el fragmento no existe; de lo contrario, devuelve el estado de la operación de vaciado.
Para comenzar a drenar un fragmento, consulte el
startShardDraining.Para detener el drenaje de un fragmento, consulte el
stopShardDrainingcomando.Para eliminar un fragmento drenado, consulte el
commitShardRemovalcomando.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( { shardDrainingStatus: <shard> } )
Campos de salida
Este comando devuelve la siguiente salida:
Campo | Tipo | Descripción |
|---|---|---|
| string | Proporciona la operación de drenaje actual que está realizando el equilibrador. |
| string | Proporciona el estado de la operación de drenaje. |
| string | Indica el fragmento que se está drenando. |
| Documento | Muestra las tareas restantes que el equilibrador debe realizar para vaciar el fragmento. |
| long | Indica la cantidad de fragmentos que aún se encuentran en el shard. |
| long | Indica el número de bases de datos que aún se encuentran en el fragmento. |
| long | Indica la cantidad de grandes fragmentos que aún se encuentran en el shard. |
| long | Indica el número de colecciones que aún se encuentran en el fragmento. |
| string | Proporciona un mensaje adicional para el usuario. |
| arreglo | Indica las bases de datos que utilizan el fragmento de drenaje como fragmento principal. Antes de poder eliminar el fragmento del clúster, debe mover manualmente estas bases de datos a un nuevo fragmento mediante el |
| arreglo | Indica colecciones no fragmentadas almacenadas en el fragmento que se está vaciando. Antes de poder eliminar el fragmento del clúster, debe mover manualmente estas colecciones a otro fragmento mediante el |
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 fragmentado tiene un fragmento principal. Si el fragmento que desea vaciar es también el principal de una de las bases de datos del clúster, deberá mover manualmente las bases de datos a un nuevo fragmento después de migrar todos los datos del fragmento actual.movePrimary Consulte el 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.
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 comando shardDrainingStatus:
db.adminCommand( { shardDrainingStatus: "shard04" } )
{ msg: "draining ongoing", state: "ongoing", remaining: { chunks: Long(2), dbs: Long(2), jumboChunks: Long(0), collectionsToMove: Long(2) }, shard: "shard04", 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") } } }