Definición
startShardDrainingInicia el proceso de drenar fragmentos de una partición para prepararla y extraerla de un clúster particionado.
Cuando se ejecuta el comando, se le informa al balanceador que desea drenar la partición dada. Asincrónicamente, el equilibrador comienza entonces a mover fragmentos de la partición a otros nodos en el clúster. Una vez que el balanceador haya completado este proceso, la partición no contendrá datos y se podrá eliminar de forma segura del clúster.
Nota
El balanceador debe estar habilitado para que
startShardDrainingpueda mover fragmentos fuera de la partición. Si el balanceador está deshabilitado, no se migran fragmentos yshardDrainingStatuscontinúa informando el trabajo restante en la partición.El comando devuelve un error si la partición no existe; de lo contrario, devuelve
ok.Para comprobar el estado de una partición drenando, usa el comando
shardDrainingStatus.Para detener el agotamiento de una partición, consulta el comando
stopShardDraining.Para eliminar una partición drenada, consulte el comando
commitShardRemoval.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( { startShardDraining: <shardToDrain> } )
Comportamiento
Requisitos de acceso
Si tienes habilitado authorization, debes tener el rol de clusterManager o cualquier rol que incluya la acción de removeShard.
Sin copias de seguridad del clúster durante el vaciado de particiones
No puedes hacer una copia de seguridad del clúster mientras drenas la partición.
Operaciones simultáneas de partición de drenaje
Puede haber más de una operación de drenaje de particiones en curso a la vez.
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 drenar también es la primaria de una de las bases de datos del clúster, entonces debe mover manualmente las bases de datos a una nueva partición después de migrar todos los datos desde la partición. Consulta el comando movePrimary y el comando Remover particiones de un clúster para obtener más información.
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.
Para migrar una colección no particionada, consulta el comando moveCollection.
Equilibrio de fragmentos
Cuando drena una partición en un clúster con una distribución desigual de fragmentos, el balanceador primero remueve los fragmentos de la partición que se está drenando y luego balancea la distribución desigual de fragmentos restantes.
Nivel de confirmación de escritura
mongos convierte el nivel de confirmación de escritura (write concern) del comando startShardDraining en "majority".
Flujos de cambio
Drenar una partición puede causar que un cursor de flujo de cambios abierto se cierre, y puede que el cursor cerrado de flujo de cambios no se pueda reanudar completamente.
Operaciones de DDL
Si ejecuta startShardDraining mientras su clúster está ejecutando una operación DDL (operación que modifica una colección, como reshardCollection), el drenaje de la partición solo se ejecuta después de que finalice la operación DDL concurrente.
Ejemplos
Para comenzar a drenar una partición, use el método db.adminCommand():
db.adminCommand( { startShardDraining: "shard04" } )