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?
Este es un error en libc, de acuerdo con:
https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1674733
php_network_getaddresses: getaddrinfo failed: Nombre o servicio desconocido ubuntu
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.