View a markdown version of this page

Problemas de conexión con Amazon DocumentDB - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Problemas de conexión con Amazon DocumentDB

Identificación: detecte el problema

Causas comunes

Los problemas de conexión suelen deberse a tres áreas principales:

El agotamiento del grupo de conexiones se produce cuando una aplicación alcanza el número máximo de conexiones permitido a Amazon DocumentDB, ya sea a través de los límites del grupo de conexiones del lado del cliente o de los límites de instancias del lado del servidor. Esta condición provoca una disminución del rendimiento de la aplicación, tiempos de espera y posibles errores, ya que las nuevas solicitudes de conexión se ponen en cola o se rechazan.

La sobrecarga de autenticación se produce cuando Amazon DocumentDB recibe un número excesivo de solicitudes de autenticación simultáneas, especialmente cuando procesa más de 1000 conexiones nuevas en un período de tiempo breve. Durante el mantenimiento de la autenticación, Amazon DocumentDB mantiene un bloqueo exclusivo en el mapa de sesiones, lo que provoca que los intentos de autenticación posteriores se pongan en cola hasta que finalice el mantenimiento.

Los problemas de configuración en Amazon DocumentDB suelen deberse a errores de configuración en las redes, la seguridad y los ajustes del cliente. Esto incluye elementos como una configuración incorrecta del grupo de seguridad, una configuración de VPC incorrecta o problemas con los SSL/TLS certificados. Comprender la configuración adecuada es esencial para mantener un acceso seguro y confiable a la base de datos.

Diagnostique: encuentre la causa raíz

Grupos de conexiones

El grupo de conexiones se inicializa al crear una MongoClient instancia. Cada grupo mantiene las conexiones en función de dos parámetros clave:

minPoolSize - Se mantiene el número mínimo de conexiones

maxPoolSize - Número máximo de conexiones permitido

Cuando una solicitud necesita una conexión:

  1. El grupo comprueba si hay conexiones inactivas disponibles

  2. Si no existe ninguna y el tamaño del grupo es inferior maxPoolSize, se crea una nueva conexión

  3. Si está en maxPoolSize, la solicitud entra en una cola de espera

  4. Si la cola está llena o se ha agotado el tiempo de espera, se arroja MongoWaitQueueFullException

El comportamiento de la cola de espera se controla mediante estos parámetros:

waitQueueTimeoutMS: tiempo máximo de espera para la conexión

waitQueueSize - Número máximo de solicitudes en cola

A continuación, se muestra un ejemplo de un enfoque problemático para conectarse a Amazon DocumentDB, en el que se crea un nuevo grupo cada vez:

for(Request request : requests) { MongoClient client = MongoClients.create(settings); // Process request client.close(); }

CloudWatch Las métricas fundamentales que se deben monitorear son:

  • DatabaseConnections- El número de conexiones (activas e inactivas) abiertas en una instancia tomada con una frecuencia de 1 minuto.

  • DatabaseConnectionsMax- El número máximo de conexiones de base de datos abiertas (activas e inactivas) en una instancia en un período de 1 minuto.

  • DatabaseConnectionsLimit- El número máximo de conexiones simultáneas a bases de datos (activas e inactivas) permitidas en una instancia en un momento dado.

  • LowMemNumOperationsThrottled- El número de solicitudes que se limitan debido a la poca memoria disponible en un período de 1 minuto.

Consulta Cuotas y límites para ver los límites por clase de instancia.

Entre las señales de advertencia más comunes que indican problemas con el grupo de conexiones a nivel de aplicación se incluyen las siguientes:

  • Aumento de los tiempos de adquisición de conexiones

  • Aumento del tamaño de las colas de espera

  • Número creciente de excepciones de tiempo de espera

Sobrecarga de autenticación

La conexión a Amazon DocumentDB sigue un flujo similar al siguiente:

Solicitud de conexión → SSL Handshake → Autenticación → Creación de sesiones → Listo para la conexión

Al procesar más de 1000 conexiones nuevas, las solicitudes de conexión adicionales entrarán en una cola de autenticación después de completar el protocolo de enlace SSL. El tiempo medio de conexión de la aplicación aumentará durante estos eventos de sobrecarga.

CloudWatch Las métricas fundamentales que hay que supervisar son:

  • DatabaseConnections- El número de conexiones (activas e inactivas) abiertas en una instancia tomada con una frecuencia de 1 minuto.

  • DatabaseConnectionsMax- El número máximo de conexiones de base de datos abiertas (activas e inactivas) en una instancia en un período de 1 minuto.

  • DatabaseConnectionsLimit- El número máximo de conexiones simultáneas a bases de datos (activas e inactivas) permitidas en una instancia en un momento dado.

Problemas de configuración

El problema de configuración más común se produce al intentar conectarse a un punto final de un clúster privado de Amazon DocumentDB desde un entorno sin acceso al entorno de red privada. Amazon DocumentDB solo está diseñado para una nube privada virtual (VPC) y actualmente no admite puntos de conexión públicos. No puede conectarse directamente a su clúster de Amazon DocumentDB desde su portátil o entorno de desarrollo local fuera de su VPC.

Esto se manifestará en errores como los siguientes:

Error: couldn't connect to server... Failed to connect to... exception: connect failed connection attempt failed

Las configuraciones incorrectas de los grupos de seguridad también pueden provocar errores de conexión. De forma predeterminada, un clúster de Amazon DocumentDB escucha las conexiones en el puerto TCP 27017. La aplicación fallará si intenta conectarse a un puerto diferente al puerto con el que se implementó el clúster o si la aplicación no está incluida en la configuración del grupo de seguridad de entrada del clúster.

La administración incorrecta de los certificados también puede provocar problemas de conexión. De forma predeterminada, el cifrado en tránsito está habilitado para los clústeres de Amazon DocumentDB recién creados. Cuando se habilita el cifrado en tránsito, se requieren conexiones seguras mediante TLS para conectarse al clúster mediante el certificado global-bundle.pem. Si intenta utilizar un certificado incorrecto, recibirá errores como los siguientes:

unable to get local issuer certificate

Si intenta conectarse a un clúster con TLS activado sin especificar los parámetros de TLS, recibirá errores como los siguientes:

Server selection timed out after 30000 ms

Resolver: solucione el problema

Grupos de conexiones: revise la agrupación de conexiones implementando o ajustando los tamaños de los grupos para que coincidan con los requisitos de carga de trabajo. Las configuraciones óptimas de los grupos dependen de la carga de trabajo y los requisitos. Debe ser minPoolSize tal que las conexiones principales estén listas y disponibles, y que sean lo suficientemente maxWaitTime cortas como para que fallen rápidamente si el grupo se ha agotado.

A continuación, se muestra un ejemplo de cómo reutilizar un único grupo sin crear uno nuevo cada vez:

MongoClient client = MongoClients.create(settings); for(Request request : requests) { // Process request }

Sobrecarga de autenticación: administre la autenticación implementando un aumento gradual de las conexiones y limitando las nuevas conexiones a 1000 a la vez. Utilice la agrupación de conexiones para reutilizar las conexiones autenticadas de forma eficaz. Para evitar sobrecargar el clúster de Amazon DocumentDB con conexiones, implemente una estrategia de aumento de conexiones.

public class ConnectionManager { private static final int BATCH_SIZE = 100; private static final int DELAY_MS = 1000; public void establishConnections(int totalRequired) { int established = 0; while (established < totalRequired) { int batch = Math.min(BATCH_SIZE, totalRequired - established); createConnections(batch); Thread.sleep(DELAY_MS); established += batch; } } }

También puede configurar los ajustes del grupo de conexiones para limitar el número total de conexiones permitidas.

MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> { builder.maxSize(500) // Limit total connections .minSize(10) // Maintain base connections .maxConnectionLifeTime(3600000) // Rotate connections hourly }) .applyToServerSettings(builder -> { builder.heartbeatFrequency(10000) // Regular server checks }) .build();

Problemas de configuración: asegúrese de que su aplicación tenga acceso a la VPC privada y a la subred donde se encuentran los recursos de Amazon DocumentDB. Si utilizas el emparejamiento de VPC, consulta la guía para desarrolladores Solucionar problemas de una conexión de emparejamiento de VPC para obtener más información. También puede consultar el artículo del Knowledge Center ¿Cómo puedo solucionar problemas de conectividad desde Internet a las instancias de Amazon EC2 de mi VPC? .

Para la configuración del grupo de seguridad, debe incluir una regla de entrada en el grupo de seguridad de Amazon DocumentDB para permitir las conexiones desde la aplicación.

{ "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 27017, "ToPort": 27017, "SourceSecurityGroupId": "<application-security-group>", "Description": "DocumentDB access from application tier" } ], "SecurityGroupEgress": [ { "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "CidrIp": "0.0.0.0/0" } ] }

Si el clúster está configurado con cifrado TLS, descargue el certificado TLS para Amazon DocumentDB denominado global-bundle.pem y utilícelo cuando se conecte al clúster.

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

Soluciones a largo plazo

Es posible que sea necesario escalar las instancias mediante la actualización a una clase de instancia más grande o la adición de réplicas de lectura para distribuir la carga de conexión. La implementación adecuada del equilibrio de carga garantiza una utilización óptima de los recursos en todo el clúster.

Los cambios en las aplicaciones deben centrarse en implementar una gestión sólida de las conexiones, una supervisión integral y el cumplimiento de las mejores prácticas de agrupación de conexiones. Esto incluye la gestión adecuada de los errores y la gestión del ciclo de vida de las conexiones.

Las mejoras en la arquitectura pueden implicar la adopción de Amazon DocumentDB Serverless para cargas de trabajo variables, la implementación de una lógica de reintento sofisticada y el diseño para la tolerancia a errores. Considere la posibilidad de reestructurar la arquitectura de las aplicaciones para gestionar mejor la administración de las conexiones.

Prácticas recomendadas

Grupos de conexiones

Mediante la administración y el monitoreo adecuados del grupo de conexiones, las aplicaciones pueden mantener una conectividad de base de datos estable y, al mismo tiempo, evitar situaciones de agotamiento que podrían afectar a la confiabilidad y el rendimiento del sistema. Configure los tiempos de espera adecuados y asigne un tamaño a su grupo en función de las características de su carga de trabajo.

Ejemplo de configuración de un grupo de conexiones

MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.maxSize(10)) .applyToConnectionPoolSettings(builder -> builder.maxWaitQueueSize(2)) .applyToConnectionPoolSettings(builder -> builder.maxConnectionIdleTime(10, TimeUnit.MINUTES)) .build();

Para obtener más información, consulte: https://aws.amazon.com/blogs/database/ - -compatibility-part-1-client-configuration/ building-resilient-applications-with amazon-documentdb-with-mongodb

Sobrecarga de autenticación

Implemente siempre la agrupación de conexiones con los valores adecuados para los parámetros en función de su carga de trabajo. Utilice una técnica de establecimiento de conexiones gradual y mantenga las conexiones persistentes, siempre que sea posible. Implemente una limpieza de conexiones adecuada para garantizar que no se desperdicien recursos inactivos.

Problemas de configuración

Asegúrese de haber configurado el enrutamiento adecuado desde su aplicación a los recursos de Amazon DocumentDB. Utilice TLS para el cifrado en tránsito e implemente el acceso con privilegios mínimos. Compruebe sus credenciales de Amazon DocumentDB y valide los valores de la cadena de conexión.