page paga capacidad aws php mysql laravel amazon-web-services dns

paga - "Excepción PDO: php_network_getaddresses: getaddrinfo failed" después de cambiar las resoluciones DNS, con DB ejecutándose en AWS



amazon web service sign in (2)

En nuestra aplicación Laravel 5.2, tenemos una configuración de base de datos que se ejecuta en AWS, utilizando varios servidores de lectura (y múltiples conexiones de base de datos).

Por la noche, cambiamos los resolvedores de DNS para todos los servidores web al DNS de Google (8.8.8.8 y 8.8.4.4). Luego, los servidores comenzaron a escupir estos:

PDOException: Excepción ''PDOException'' con el mensaje '' SQLSTATE [HY000] [2002] php_network_getaddresses: getaddrinfo failed: Nombre o servicio no conocido '' en /home/forge/studydrive.net/releases/20170320162143/vendor/laravel/framework/src/Illuminate /Database/Connectors/Connector.php:55

El código en Connector.php:55 es simplemente el constructor de PDO:

public function createConnection($dsn, array $config, array $options) { $username = Arr::get($config, ''username''); $password = Arr::get($config, ''password''); try { $pdo = new PDO($dsn, $username, $password, $options); // <== THIS ONE } catch (Exception $e) { $pdo = $this->tryAgainIfCausedByLostConnection( $e, $dsn, $username, $password, $options ); } return $pdo; }

La configuración .env para AWS (con partes sensibles modificadas):

DB_HOST=myapp-cluster.cluster-123abc.eu-west-2.rds.amazonaws.com DB_HOST_WRITE=myapp-cluster.cluster-123abc.eu-west-2.rds.amazonaws.com DB_HOST_READ=myapp-cluster.cluster-ro-123abc.eu-west-2.rds.amazonaws.com

Entonces, parece que el PDO de PHP de repente no puede resolver el nombre DB_HOST .

Tenga en cuenta que no podemos usar una IP para DB_HOST , ya que el nombre de host (en el lado de AWS) se asigna a 3 servidores de LECTURA de base de datos diferentes.

Además, antes de cambiar los resolvedores, todo estaba funcionando bien.

¿Alguien tiene alguna idea de lo que podría estar causando el error de PDO o cómo resolverlo?



A partir del 20 de marzo, muchos usuarios de Ubuntu en la web repentinamente tuvieron problemas de resolución DNS en sus aplicaciones debido a una mala actualización lanzada por Canonical (los mantenedores de Ubuntu) que rompe la resolución de DNS después de unas pocas horas de disponibilidad. Aquí está el informe de error donde el problema fue informado y triaged:

https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1674532

Esto puede haber ocasionado fallas en su CMS para actualizar / instalar complementos / temas de instalación, fallas en la conexión a API externas y / o mensajes de error similares a los siguientes:

Advertencia: file_get_contents (): php_network_getaddresses: getaddrinfo failed: Ninguna dirección asociada con hostname Could not resolve host: downloads.wordpress.org cURL error 6: No se pudo resolver el host: example.com en .... Afortunadamente Canonical ha podido desde entonces resuelva el problema, pero los sistemas afectados deben actualizar para adquirir la solución. Para hacer eso, necesitará que DNS funcione, por lo tanto, si actualmente está inactivo, primero reinicie su Droplet. Una vez que la resolución DNS funciona normalmente, ejecuta:

sudo apt-get update sudo apt-get upgrade

Luego puede verificar sus versiones para asegurarse de que tiene las correctas. Esto se puede hacer con:

# sudo dpkg -l | grep "GNU C Library" | awk ''{print $3}''

Si está en Ubuntu 16.X, debería ver resultados similares a los siguientes:

# sudo dpkg -l | grep "GNU C Library" | awk ''{print $3}'' 2.23-0ubuntu7 2.23-0ubuntu7 2.23-0ubuntu7

Si está en Ubuntu 14.X, debería ver resultados similares a los siguientes:

# sudo dpkg -l | grep "GNU C Library" | awk ''{print $3}'' 2.19-0ubuntu6.11 2.19-0ubuntu6.11

Si ve versiones anteriores de esos paquetes, deberá actualizar según las instrucciones anteriores para evitar este problema.