Definición
startShardDrainingInicia el proceso de extracción de fragmentos de una partición para prepararla para su eliminación de un clúster fragmentado.
Cuando se ejecuta el comando, le indica al balanceador que se desea vaciar el fragmento especificado. De forma asíncrona, el balanceador comienza a mover los fragmentos del fragmento a otros fragmentos del clúster. Una vez que el balanceador completa este proceso, el fragmento no contiene datos y puede eliminarse del clúster de forma segura.
Nota
El balanceador debe estar habilitado para que
startShardDrainingmueva fragmentos fuera del fragmento. Si el balanceador está deshabilitado, no se migra ningún fragmento yshardDrainingStatusContinúa informando sobre los trabajos restantes en el fragmento.El comando devuelve un error si el fragmento no existe; de lo contrario, devuelve
ok.Para comprobar el estado de un fragmento en proceso de drenaje, utilice el
shardDrainingStatuscomando.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( { 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.
No se producen copias de seguridad del clúster durante el drenaje de fragmentos.
No se puede realizar una copia de seguridad del clúster mientras se drena el fragmento.
Operaciones de fragmentación de drenaje simultáneas
Puedes tener más de una operación de drenaje de fragmentos en curso al mismo tiempo.
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.
Equilibrio de fragmentos
Cuando se vacía un fragmento en un clúster con una distribución desigual de fragmentos, el equilibrador primero elimina los fragmentos del fragmento que se está vaciando y luego equilibra la distribución desigual de fragmentos restante.
Nivel de confirmación de escritura
mongos convierte la startShardDraining preocupación de escritura del "majority" comando a.
Flujos de cambio
El vaciado de un fragmento puede provocar el cierre de un cursor de flujo de cambios abierto, y es posible que el cursor de flujo de cambios cerrado no se pueda reanudar por completo.
Operaciones de DDL
Si ejecuta startShardDraining mientras su clúster está ejecutando una operación DDL (operación que modifica una colección reshardCollection como), el vaciado de fragmentos solo se ejecuta después de que finaliza la operación DDL concurrente.
Ejemplos
Para comenzar a drenar un fragmento, utilice el db.adminCommand() método:
db.adminCommand( { startShardDraining: "shard04" } )