Mi instancia EC2 está inundando mi instancia RDS, pero mi instancia EC2 funciona sin problemas

Mi instancia EC2 está inundando mi instancia RDS, pero mi instancia EC2 funciona sin problemas

Tengo una configuración bastante complicada en mi consola de AWS.

  1. Tengo una instancia EC2 en la región A con LAMP instalado para lo que llamaré mi CRM.
  2. Tengo un RDS en la misma región A de mi CRM que contiene la información de los pedidos/clientes que tengo.
  3. Tengo una instancia EC2 en una región B con LAMP instalado a la que llamaré mi "Carrito de compras"
  4. Tengo un RDS en la misma región B con la base de datos de mi carrito de compras.
  5. Detalle un tanto menor (creo): tengo otras dos instancias EC2 en las regiones C y D con LAMP instalado que son "carritos de compras" secundarios. También tienen sus propias instancias RDS.

Los dos servidores EC2 principales se conectan entre sí mediante llamadas a través de CURL. Entonces, cuando llega un pedido a mi servidor EC2 B, se realiza una llamada curl a mi servidor EC2 A para insertar el pedido, agregar información del cliente, etc. Además, mi servidor A puede realizar llamadas CURL a mi servidor B para actualizar los precios. etc. El servidor B puede realizar llamadas CURL al servidor A para obtener los precios de envío actuales a una ciudad.

Ahora el problema que tengo es que ayer, alrededor de las 4 a.m., mi instancia RDS B comenzó a inundarse de conexiones y superó su límite de 50 conexiones simultáneas. Así que actualicé de t2.small a t2.medium y ahora tengo 90 conexiones simultáneas, pero el problema persiste, llegando constantemente al límite de 90 conexiones desde cada dos minutos hasta media hora.

También actualicé mi instancia EC2 A, pero nuevamente eso no cambia nada. Cuando ejecuto lo siguiente en mi instancia RDS B, normalmente obtengo entre 6 y 10 subprocesos, pero ocasionalmente comienza a aumentar y, cuando lo hace, llega a 90 conexiones, generalmente en uno o dos minutos.

MOSTRAR estado COMO 'Threads_connected';

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 6     |
+-------------------+-------+
1 row in set (0.01 sec)

Al ejecutar el siguiente comando en mi instancia RDS B, se muestra que se interrumpen las conexiones cuando alcanzo el límite de 90 conexiones simultáneas:

mostrar estado como 'Conn%';

+-----------------------------------+--------+
| Variable_name                     | Value  |
+-----------------------------------+--------+
| Connection_errors_accept          | 0      |
| Connection_errors_internal        | 0      |
| Connection_errors_max_connections | 6856   |
| Connection_errors_peer_address    | 0      |
| Connection_errors_select          | 0      |
| Connection_errors_tcpwrap         | 0      |
| Connections                       | 123258 |
+-----------------------------------+--------+
7 rows in set (0.03 sec)

Cada vez que llego a 90 conexiones en RDS B, mi instancia EC2 A se ralentiza y las conexiones aumentan en la instancia RDS A. Y mi instancia EC2 B envía errores HTTP 500 porque la conexión mysqli falló debido a demasiadas conexiones.

Finalmente, si ejecuto lo siguiente en instancias RDS A o RDS B, veolotesde comandos para dormir, pero casi nunca ninguna consulta:

MOSTRAR LISTA DE PROCESOS COMPLETA;

La "solución" temporal que se me ocurrió es reiniciar el servicio Apache en la instancia EC2 A. Tan pronto como hago eso, todos los procesos en RDS A y B se aclaran en unos segundos.

No entiendo cómo esto pudo empezar a suceder de repente, e incluso después de aumentar el poder de mis instancias, cómo puede seguir sucediendo. No tengo ideas sobre dónde buscar a continuación. El único "problema" que tengo, hasta donde sé, es que mi límite de conexiones RDS está siendo alcanzado. Los promedios de carga de EC2 son muy buenos (0,02 en este momento). No he cambiado ningún código en la última semana que se me ocurra.

Respuesta1

Finalmente encontré este problema después de aproximadamente 8 horas de búsqueda. Un profesional independiente introdujo un código fraudulento en uno de mis sitios web que no podía cerrar las conexiones MySQL.

Con suerte, esto ayudará a alguien más. Si está experimentando una situación similar, verifique el servidor en busca de archivos modificados recientemente con:

find . -type f -mtime -$n

¿Dónde $nes un número entero que representa la cantidad de días hace que comenzó a experimentar problemas? Ejecute ese comando en el directorio donde espera que se haya producido el cambio.

información relacionada