Esta página describe los procedimientos administrativos comunes relacionados con la compensación. Para obtener una introducción a la compensación, consulte Balanceador de clúster fragmentado. Para obtener información general sobre el balanceo, consulte "Funcionamiento interno del balanceador".
El proceso de equilibrado ha pasado de ser mongos instancias al miembro principal del conjunto de réplicas del servidor de configuración.
Comprobar el estado del balanceador
sh.getBalancerState() verifica si el balanceador está habilitado (es decir, si tiene permiso para ejecutarse). no verifica si el balanceador está migrando datossh.getBalancerState() activamente.
Para ver si el balanceador está habilitado en su clúster fragmentado, ejecute el siguiente comando, que devuelve un valor booleano:
sh.getBalancerState()
También puede comprobar si el balanceador está habilitado sh.status() con. El campo indica si currently-enabled currently-running está habilitado y el campo indica si se está ejecutando.
Comprobar si Balancer se está ejecutando
Para ver si el proceso de balanceador está activo en su clúster:
Configurar el tamaño del rango predeterminado
El tamaño de rango predeterminado para un clúster fragmentado es de 128 megabytes. En la mayoría de los casos, este tamaño es adecuado para dividir y migrar fragmentos. Para obtener información sobre cómo el tamaño de rango afecta las implementaciones, consulte "Tamaño de rango".
Cambiar el tamaño del rango predeterminado afecta a los rangos que se procesan durante las migraciones y divisiones automáticas, pero no afecta retroactivamente a todos los rangos.
Para configurar el tamaño de rango predeterminado, consulte Modificar el tamaño de rango en un clúster fragmentado.
Programar la ventana de equilibrio
En algunas situaciones, especialmente cuando el conjunto de datos crece lentamente y una migración puede afectar el rendimiento, es útil asegurarse de que el balanceador esté activo solo en ciertos momentos. De forma predeterminada, el proceso del balanceador siempre está habilitado y migrando fragmentos. El siguiente procedimiento especifica,activeWindow que es el plazo durante el cual el balanceador puede migrar fragmentos:
Cambiar a la base de datos de configuración.
Emita el siguiente comando para cambiar a la base de datos de configuración.
use config
Asegúrese de que el equilibrador no stopped sea.
El balanceador no se activará en el stopped estado. Para garantizar que el balanceador no esté en el estado,stopped sh.startBalancer()utilice, como se muestra a continuación:
sh.startBalancer()
El balanceador no se iniciará si está fuera del período de tiempo activeWindow.
Modificar la ventana del balanceador.
Establezca activeWindow updateOne()utilizando, como en lo siguiente:
db.settings.updateOne( { _id: "balancer" }, { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, { upsert: true } )
Reemplace <start-time> y <end-time> con valores de tiempo utilizando valores de hora y minutos de dos dígitos (es decir, HH:MM) que especifican los límites de inicio y final de la ventana de equilibrio.
Para valores
HH, utilice valores de hora entre00y23.Para el valor
MM, utilice valores de minutos que oscilen entre00y59.
Para clústeres fragmentados locales o autoadministrados, MongoDB evalúa las horas de inicio y finalización en relación con la zona horaria del miembro principal en el conjunto de réplicas del servidor de configuración.
Para los clústeres Atlas, MongoDB evalúa las horas de inicio y finalización en relación con la zona horaria UTC.
Nota
La ventana del balanceador debe ser suficiente para completar la migración de todos los datos insertados durante el día.
Como las tasas de inserción de datos pueden cambiar según la actividad y los patrones de uso, es importante asegurarse de que la ventana de equilibrio que seleccione sea suficiente para satisfacer las necesidades de su implementación.
Ventana de balance de cheques
Para ver la ventana de equilibrio actual, ejecute el siguiente comando:
use config db.settings.find( { _id: "balancer" } )
Eliminar una programación de ventana de equilibrio
Si ha configurado la ventana de equilibrio y desea eliminar la programación para que el equilibrador siempre esté en ejecución, utilice $unset para activeWindow borrar, como se muestra a continuación:
use config db.settings.updateOne( { _id : "balancer" }, { $unset : { activeWindow : true } } )
Desactivar el balanceador
Importante
Dejar el balanceador deshabilitado durante largos periodos puede generar fragmentos desequilibrados, lo que reduce el rendimiento del clúster. Desactive el balanceador solo si es necesario y asegúrese de volver a habilitarlo al finalizar el mantenimiento.
Por defecto, el equilibrador puede ejecutarse en cualquier momento y sólo mueve los fragmentos según sea necesario. Para desactivar el balanceador por un corto periodo de tiempo y evitar toda migración, utiliza el siguiente procedimiento:
Conéctese a cualquier en el
mongosmongoshclúster utilizando el shell.Ejecute la siguiente operación para deshabilitar el balanceador:
sh.stopBalancer() Si hay una migración en curso, el sistema completará la migración en curso antes de detenerse.
Para verificar que el balanceador no se iniciará, ejecute el siguiente comando, que devuelve
falsesi el balanceador está deshabilitado:sh.getBalancerState() Opcionalmente, para verificar que no haya migraciones en progreso después de la deshabilitación, ejecute la siguiente operación en el
mongoshshell:use config while( sh.isBalancerRunning() ) { print("waiting..."); sleep(1000); }
Nota
Para desactivar el balanceador desde un controlador, utiliza el comando balancerStop en la base de datos admin, de la siguiente manera:
db.adminCommand( { balancerStop: 1 } )
A partir de MongoDB,7.0 al detener el balanceador también se deshabilita la fusión automática para el clúster fragmentado.
Habilitar el balanceador
Utilice este procedimiento si ha deshabilitado el balanceador y está listo para volver a habilitarlo:
Conéctese a cualquier en el
mongosmongoshclúster utilizando el shell.Emita una de las siguientes operaciones para habilitar el balanceador:
Desde el shell,
mongoshemita:sh.startBalancer() Nota
Para habilitar el balanceador desde un controlador, utilice el comando balancerStart contra la
adminbase de datos, como se muestra a continuación:db.adminCommand( { balancerStart: 1 } )
A partir de MongoDB, al 7.0 iniciar el balanceador también se habilita la fusión automática para el clúster fragmentado.
Deshabilitar el equilibrio durante las copias de seguridad
Nota
Deshabilitar el balanceador solo es necesario cuando se realizan copias de seguridad manualmente, ya sea llamando a o programando una tarea que llame mongodump a mongodump en un momento específico.
No es necesario desactivar el balanceador cuando se utilizan procesos de copia de seguridad y restauración coordinados:
Si MongoDB migra un fragmento durante una copia de seguridad, puede obtener una instantánea inconsistente de su clúster fragmentado. Nunca ejecute una copia de seguridad mientras el balanceador esté activo. Para asegurarse de que el balanceador esté inactivo durante la copia de seguridad:
Configure la ventana de balanceo para que el balanceador esté inactivo durante la copia de seguridad. Asegúrese de que la copia de seguridad pueda completarse con el balanceador deshabilitado.
deshabilite manualmente el balanceador mientras dure el procedimiento de copia de seguridad.
Si se apaga el equilibrador durante una ronda de equilibrado, el apagado no es instantáneo. El equilibrador completa el movimiento del fragmento en curso y luego detiene todas las rondas de equilibrado posteriores.
Antes de iniciar una copia de seguridad, confirme que el balanceador no esté activo. Puede usar el siguiente comando para determinar si el balanceador está activo:
!sh.getBalancerState() && !sh.isBalancerRunning()
Una vez finalizado el procedimiento de copia de seguridad, puede reactivar el proceso de equilibrado.
Deshabilitar el equilibrio en una colección
Puede deshabilitar el balanceo de una colección específica con el sh.disableBalancing() método. Es posible que desee deshabilitar el balanceador de una colección específica para soportar operaciones de mantenimiento o cargas de trabajo atípicas, por ejemplo, durante la ingesta o la exportación de datos.
Cuando deshabilita el equilibrio en una colección, MongoDB no interrumpirá las migraciones en progreso.
Para deshabilitar el equilibrio en una colección, conéctese a un mongos con el mongosh shell y llame al sh.disableBalancing() método.
Por ejemplo:
sh.disableBalancing("students.grades")
El método acepta como sh.disableBalancing() parámetro el espacio de nombres completo de la colección.
Habilite el balanceo en una colección
Puede habilitar el equilibrio para una colección específica con el sh.enableBalancing() método.
Al habilitar el balanceo para una colección, MongoDB no comenzará a balancear los datos inmediatamente. Sin embargo, si los datos de su colección fragmentada no están balanceados, MongoDB podrá empezar a distribuirlos de forma más equitativa.
Para habilitar el equilibrio en una colección, conéctese a un mongos con el mongosh shell y llame al sh.enableBalancing() método.
Por ejemplo:
sh.enableBalancing("students.grades")
El método acepta como sh.enableBalancing() parámetro el espacio de nombres completo de la colección.
Confirmar que el equilibrio esté habilitado o deshabilitado
Para confirmar si el balanceo de una colección está habilitado o deshabilitado, consulte la collections colección en la base de datos para encontrar el espacio de nombres config de la colección y verifique el noBalance campo. Por ejemplo:
db.getSiblingDB("config").collections.findOne({_id : "students.grades"}).noBalance;
Esta operación devolverá un error nulo, true, false o ninguna salida:
Un error nulo indica que el espacio de nombres de la colección es incorrecto.
Si el resultado es
true, el equilibrio está deshabilitado.Si el resultado es
false, el balanceo está habilitado actualmente, pero se desactivó anteriormente para la colección. El balanceo de esta colección comenzará la próxima vez que se ejecute el balanceador.Si la operación no devuelve ningún resultado, el balanceo está habilitado actualmente y nunca se ha deshabilitado para esta colección. El balanceo de esta colección comenzará la próxima vez que se ejecute el balanceador.
También puede comprobar si el balanceador está habilitado sh.status() mediante. El campo indica si el balanceador está currently-enabled habilitado.
Cambiar el comportamiento de replicación para la migración de fragmentos
Acelerador secundario
Durante la migración de fragmentos, el valor _secondaryThrottle determina cuándo continúa la migración con el siguiente documento en el fragmento.
En la config.settings colección:
Si la
_secondaryThrottleconfiguración para el balanceador está establecida en una preocupación de escritura, cada documento movido durante la migración de fragmentos debe recibir el reconocimiento solicitado antes de continuar con el siguiente documento.Si la configuración
_secondaryThrottleno está establecida, el proceso de migración no espera la replicación a un documento secundario y, en su lugar, continúa con el siguiente documento.Este es el comportamiento predeterminado para WiredTiger.
Para cambiar la _secondaryThrottle configuración, conéctese a una instancia y actualice directamente mongos el _secondaryThrottle valor en la colección de settings la base de datos de configuración. Por ejemplo, desde un shell mongosh mongos conectado a un, ejecute el siguiente comando:
use config db.settings.updateOne( { "_id" : "balancer" }, { $set : { "_secondaryThrottle" : { "w": "majority" } } }, { upsert : true } )
Los efectos de cambiar la configuración _secondaryThrottle podrían no ser inmediatos. Para garantizar un efecto inmediato, detenga y reinicie el balanceador para habilitar el valor seleccionado de _secondaryThrottle.
Para obtener más información sobre el comportamiento de replicación durante los distintos pasos de la migración de fragmentos, consulte Migración y replicación de rango.
Utilice las
moveRangesecondaryThrottlewriteConcernopciones y del comando para especificar el comportamiento durante el comando.Utilice las
moveChunk_secondaryThrottlewriteConcernopciones y del comando para especificar el comportamiento durante el comando.
Para obtener más detalles, consulta moveRange y moveChunk.
Esperar a eliminar
La _waitForDelete configuración del balanceador y el comando afectan moveChunk la forma en que el balanceador migra múltiples fragmentos de un fragmento. De igual forma, la _waitForDelete configuración del balanceador y el moveRange comando también afectan la forma en que el balanceador migra múltiples fragmentos de un fragmento. De forma predeterminada, el balanceador no espera a que finalice la fase de eliminación de la migración en curso antes de iniciar la siguiente migración de fragmentos. Para que la fase de eliminación bloquee el inicio de la siguiente migración de fragmentos, puede establecer como _waitForDelete verdadero.
Para obtener más información sobre la migración de fragmentos, consulte Migración de rangos. Para obtener más información sobre el comportamiento de la cola de migración de fragmentos, consulte Limpieza de migración de rangos asíncrona.
Importante
Cuando _waitForDelete se configura el campo, MongoDB no espera el retraso antes de eliminar el rango. Si usa orphanCleanupDelaySecs el _waitForDelete parámetro y se realizan operaciones de lectura en los secundarios, la lectura podría finalizar debido a la fase de eliminación de la migración. Para obtener más información,terminateSecondaryReadsOnOrphanCleanup consulte.
Para cambiar el valor _waitForDelete del balanceador:
Conéctese a una instancia
mongos.Actualice el
_waitForDeletevalor en la colección desettingsla base de datos de configuración. Por ejemplo:use config db.settings.updateOne( { "_id" : "balancer" }, { $set : { "_waitForDelete" : true } }, { upsert : true } )
Una vez establecido en true, para volver al comportamiento predeterminado:
Rangos de equilibrio que superan el límite de tamaño
De forma predeterminada, MongoDB no puede mover un rango si la cantidad de documentos en el rango es mayor que 2 veces el resultado de dividir el tamaño del rango configurado por el tamaño promedio del documento.
Al especificar la configuración del balanceador attemptToBalanceJumboChunks truea, el balanceador puede migrar estos rangos grandes siempre que no hayan sido etiquetados como jumbo.
Para configurar el valor del balanceador,attemptToBalanceJumboChunks conéctese a una instancia y mongos actualice directamente la colección. Por config.settings ejemplo, desde un shell mongosh mongos conectado a una instancia, ejecute el siguiente comando:
db.getSiblingDB("config").settings.updateOne( { _id: "balancer" }, { $set: { attemptToBalanceJumboChunks : true } }, { upsert: true } )
Si el rango que desea mover está etiquetado jumbo como, puede borrar manualmente la bandera jumbo para que el balanceador intente migrar el rango.
También puede migrar manualmente rangos que excedan el límite de tamaño (con o sin la etiqueta jumbo) utilizando:
el comando con
moveRangela opción forceJumbo: trueel comando con
moveChunkla opción forceJumbo: true
Sin embargo, cuando ejecuta moveRange o moveChunk forceJumbo: truecon, las operaciones de escritura en la colección pueden bloquearse durante un largo período de tiempo durante la migración.