sql >> Base de Datos >  >> NoSQL >> MongoDB

Una guía para configurar un balanceador de carga en un clúster fragmentado de MongoDB

Para cualquier base de datos, el equilibrio de carga de todas las solicitudes provenientes de los clientes es un mecanismo importante y fundamental para garantizar la escalabilidad. Una solución de equilibrio de carga adecuada distribuye todas las solicitudes de los clientes de manera uniforme en todos los recursos de la base de datos. Si el clúster de la base de datos no está protegido con una solución de equilibrio de carga adecuada, su base de datos no podrá manejar una mayor carga de tráfico en ella.

Afortunadamente, MongoDB brinda soporte integrado para equilibrar la carga del alto tráfico al admitir el escalado horizontal a través de la fragmentación. Puede distribuir los datos de sus colecciones en varios servidores mediante fragmentación. También puede agregar nuevos servidores/máquinas a su clúster para manejar el aumento de tráfico en la base de datos. Puede seguir esta guía para convertir su clúster de réplica de MongoDB en un clúster de fragmentación.

En este artículo, aprenderemos sobre el comportamiento del proceso del equilibrador que se ejecuta en los clústeres fragmentados de MongoDB y cómo modificar su comportamiento. El proceso del balanceador de MongoDB se encarga de distribuir sus colecciones de manera uniforme entre los fragmentos. Por ejemplo, si un fragmento de su clúster contiene demasiados fragmentos de su colección fragmentada, ese fragmento en particular puede recibir más tráfico en comparación con otros fragmentos. Por lo tanto, el proceso del equilibrador equilibra correctamente los fragmentos de las colecciones en los fragmentos. En la mayoría de las implementaciones de MongoDB, las configuraciones predeterminadas del proceso del equilibrador son suficientes para las operaciones normales. Pero, en algunas situaciones, los administradores de bases de datos pueden querer modificar el comportamiento predeterminado de este proceso. Si desea modificar el comportamiento predeterminado del proceso del balanceador para cualquier necesidad de nivel de aplicación o requisito operativo, puede seguir esta guía.

Comencemos con algunos comandos básicos para obtener información sobre el estado y el estado del proceso del equilibrador.

Estado del estado del equilibrador

Este comando verifica si el equilibrador está habilitado o permitido para ejecutarse o no. Si el proceso del equilibrador no se está ejecutando, este comando devolverá falso. Esto no verificará si el proceso del equilibrador se está ejecutando o no.

sh.getBalancerState()

Habilitar el proceso del equilibrador

Si el equilibrador no está habilitado de forma predeterminada, puede habilitarlo ejecutando el siguiente comando. Este comando no iniciará el proceso del balanceador, pero habilitará el proceso y garantizará que el balanceo de fragmentos no se bloquee cuando el proceso del balanceador se ejecute la próxima vez.

sh.enableBalancing(<collection_name/namespace>)

Deshabilitar el proceso del equilibrador

El proceso del equilibrador se ejecuta en cualquier momento de forma predeterminada. Por lo tanto, si desea deshabilitar el proceso del equilibrador durante un período de tiempo específico, puede usar el siguiente comando. Un escenario ideal para usar este comando es cuando está realizando una copia de seguridad de su base de datos.

sh.stopBalancer()

Asegúrese de que el proceso del equilibrador esté detenido antes de realizar la copia de seguridad. Si el proceso está habilitado mientras realiza la copia de seguridad de la base de datos, puede terminar con una réplica inconsistente de su base de datos. Esto puede suceder cuando el proceso del equilibrador mueve algunos fragmentos entre los fragmentos para equilibrar la carga durante el proceso de copia de seguridad.

También puede deshabilitar el equilibrio en algunas colecciones específicas al proporcionar el espacio de nombres completo de una colección como parámetro usando el siguiente comando.

sh.disableBalancing("<db_name>.<collection_name>")

Estado de funcionamiento del equilibrador

Este comando verifica si el proceso del equilibrador se está ejecutando o no. También verifica si está administrando activamente los fragmentos fragmentados o no. Devuelve verdadero si el proceso se está ejecutando; de lo contrario, devuelve falso.

sh.isBalancerRunning()

Configuraciones de tamaño de fragmento predeterminado

De forma predeterminada, el tamaño de fragmento en cualquier clúster fragmentado de MongoDB es de 64 MB. Para la mayoría de los escenarios, esto es lo suficientemente bueno para migrar o dividir los fragmentos fragmentados. Sin embargo, a veces el proceso de migración normal implica más operaciones de E/S de las que su hardware puede procesar. En este tipo de situaciones, es posible que desee reducir el tamaño de los fragmentos. Puede hacerlo ejecutando el siguiente conjunto de comandos.

use config

db.settings.save( { _id:"chunksize", value: <sizeInMB> } )

Si cambia el tamaño de fragmento predeterminado en el clúster fragmentado, tenga en cuenta lo siguiente

  • Puede especificar el tamaño del fragmento solo entre 1 y 1024 MB
  • La división automática solo ocurrirá al insertar o actualizar
  • Los tamaños de fragmentos más bajos conducirán a más tiempo durante el proceso de división.

Equilibrio de programación para un tiempo específico

Cuando el tamaño de su base de datos es enorme, los procesos de equilibrio o migración pueden afectar el rendimiento general de su base de datos. Por lo tanto, es aconsejable programar el proceso de equilibrio durante una ventana de tiempo específica cuando la carga en la base de datos es muy inferior. Puede usar los siguientes comandos para configurar la ventana de tiempo para que se ejecute el proceso del equilibrador.

use config

db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, true )

Ejemplo

El siguiente comando establecerá la ventana de tiempo de 1:00 a. m. a 5:00 a. m. para que se ejecute el proceso de equilibrio.

db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "01:00", stop : "05:00" } } }, true )

Asegúrese de que el período de tiempo dado sea suficiente para un proceso de equilibrio completo.

También puede eliminar cualquier ventana de tiempo de proceso de equilibrio existente ejecutando el siguiente comando.

db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })

Además de los comandos anteriores, también puede cambiar el comportamiento de replicación mientras realiza el proceso de migración de fragmentos utilizando el parámetro _secondaryThrottle. Además, puede usar la propiedad _waitForDelete con el comando moveChunk para indicarle al proceso de equilibrio que espere la fase de eliminación de la migración actual antes de comenzar con la nueva fase de migración de fragmentos.

Conclusión

Con suerte, esto será todo lo que necesite al cambiar el comportamiento predeterminado del proceso del balanceador de MongoDB. El equilibrio es un aspecto muy importante de cualquier clúster fragmentado de MongoDB. Por lo tanto, si conoce el proceso de balanceo en detalle, se vuelve muy fácil modificar el comportamiento predeterminado del proceso de balanceo según sus necesidades y casos de uso.